¿Los conjuntos Antes y Después para las gramáticas sin contexto siempre están libres de contexto?

14

Deje que G sea ​​una gramática libre de contexto. Una serie de terminales y no terminales de G se dice que es una forma de frase de G si se puede obtener mediante la aplicación de las producciones de G cero o más veces al símbolo inicial de S . Deje SF(G) el conjunto de formas enunciativas de G .

Supongamos que αSF(G) y que β sea ​​una subcadena de α : llamamos a β un fragmento de SF(G) . Ahora deja

Before(β)={γ | δ.γβδSF(G)}

y

.After(β)={δ | γ.γβδSF(sol)}

¿Son los lenguajes libres de contexto y After ( β ) ? ¿Qué pasa si G no es ambiguo? Si G no es ambiguo, ¿ antes ( β ) y Después ( β ) también se pueden describir con un lenguaje libre de contexto inequívoco?antes de(β)After(β)GGBefore(β)After(β)

Este es un seguimiento de mi pregunta anterior , luego de un intento anterior de hacer que mi pregunta sea más fácil de responder falló. Una respuesta negativa hará que la pregunta global en la que estoy trabajando sea muy difícil de responder.

Alex ten Brink
fuente

Respuestas:

8

Permítanos sentir primero y Después ( β ) . Considere un árbol de derivación que contiene β ; "contiene" aquí significa que puede cortar subárboles para que β sea ​​una subpalabra del frente del árbol. Entonces, el conjunto antes (después) son todos los frentes potenciales de la parte izquierda (derecha) del árbol de β :Before(β)After(β)βββ

árbol con conjuntos de antes y después
[ fuente ]

Entonces, tenemos que construir una gramática para la parte del árbol alineada horizontalmente (verticalmente). Eso parece bastante fácil ya que ya tenemos una gramática para todo el árbol; solo tenemos que asegurarnos de que todas las formas oracionales sean palabras (cambiar los alfabetos), filtrar aquellas que no contienen (que es una propiedad regular ya que β es fijo) y cortar todo después (antes) de β , incluido β . Este corte también debería ser posible.ββββ


Ahora a una prueba formal. Transformaremos la gramática como se describe y utilizaremos las propiedades de cierre de para hacer el filtrado y el corte, es decir, realizamos una prueba no constructiva.CFL

Sea una gramática libre de contexto. Es fácil ver que SF ( G ) no tiene contexto; construya G = ( N , T , δ , N S ) así:G=(N,T,δ,S)SF(G)G=(N,T,δ,NS)

  • N={norteUNUNnorte}
  • T=norteT
  • δ={α(A)α(β)Aβδ}{NAAAN}

con para todos t T y α ( A ) = N A para todos un N . Está claro que L ( G ' ) = SF ( G ) ; por lo tanto, el prefijo de cierre correspondiente Pref ( SF ( G ) ) y el sufijo de cierre Suff ( SF ( G ) ) también están libres de contexto¹.α(t)=ttTα(A)=NAaNL(G)=SF(G)Pref(SF(G))Suff(SF(G))

Ahora, para cualquier son L ( β ( N T ) ) y L ( ( N T ) β ) idiomas regulares. Como C F L está cerrado debajo de la intersección y el cociente derecho / izquierdo con idiomas regulares, obtenemosβ(NT)L(β(NT))L((NT)β)CFL

Before(β)=(Pref(SF(G))  L((NT)β))/βCFL

y

.After(β)=(Suff(SF(G))  L(β(NT)))βCFL


¹ está cerrado por debajo del cociente derecho (e izquierdo) ; Pref ( L ) = L / Σ y similar para el prefijo de rendimiento Suff resp. cierre de sufijo.CFLPref(L)=L/ΣSuff

Rafael
fuente
Comencé a escribir una respuesta y luego me di cuenta de que mi prueba era la misma que la tuya. Tendría que puso de esta manera (comprimido para encajar aquí): formar una gramática mediante la adición de una nueva terminal A (un metavariable) para cada no terminal A y una producción A A . Entonces las formas oracionales de G son las palabras reconocidas por G que consisten en metavariables. Esta es la intersección de un CFG con un lenguaje regular y, por lo tanto, es regular. El conjunto de prefijos de un CFG es un CFG (tome un PDA y haga que cada estado sea final). B e f o r e ( γ ) =GA^AAA^GG es de nuevo un CFG. Before(γ)={γγβL(Prefix(G^))}
Gilles 'SO- deja de ser malvado'
1
@Gilles, tres comentarios sobre eso: 1) las formas de sentencia típicamente (correctamente) contienen el idioma. 2) "hacer que cada estado sea final" - eso no funcionará; también aceptarás prefijos de no palabras. 3) El último paso para "cortar" un sufijo parece ser difícil de poner riguroso. : / ¿Tienes una prueba rigurosa pero más compacta que la mía?
Raphael
1) no importa (cambie para tener o no tener un no terminal para cada terminal). 2) Vaya, corté demasiado: hacer que cada estado que pueda alcanzar un estado final sea final. 3) Hazlo una terminal b a la vez; en el PDA, marque los estados desde los cuales uno puede alcanzar un estado final consumiendo b como final en su lugar. Sí, se necesitaría más expansión para hacer esto más riguroso. Gbb
Gilles 'SO- deja de ser malvado'
9

Sí, y After ( β ) son lenguajes libres de contexto. Así es como lo probaría. Primero, un lema (que es el quid). Si L es CF entonces:Before(β)After(β)L

Before(L,β)={γ | δ.γβδL}

y

After(L,β)={γ | δ.δβγL}

son CF.

¿Prueba? Para construya un transductor de estado finito no determinista T β que escanee una cadena, generando cada símbolo de entrada que vea y simultáneamente busque β de manera no determinista . Cada vez que T β ve el primer símbolo de β, se bifurca de manera no determinista y deja de emitir símbolos hasta que termina de ver β o ve que ve un símbolo que se desvía de β , deteniéndose en cualquier caso. Si T β ve βBefore(L,β)TββTββββTββen su totalidad, acepta al detenerse, que es la única forma en que acepta. Si ve una desviación de , lo rechaza.β

El lema se puede activar para manejar casos en los que podría superponerse consigo mismo (como a b a b ; siga buscando β incluso mientras se encuentra en el escaneo para un β anterior ) o aparece varias veces (en realidad, el original no determinista bifurcación ya maneja eso). βababββ

Está bastante claro que , y dado que las CFL están cerradas bajo transducción en estado finito, Before ( L , β ) es, por lo tanto, CF. Tβ(L)=Before(L,β)Before(L,β)

Un argumento similar se aplica a , o podría hacerse con reversiones de cadena de Before ( L , β ) , las CFL también se cierran bajo reversión:After(L,β)Before(L,β)

After(L,β)=rev(Before(rev(L),rev(β)))

En realidad, ahora que veo el argumento de reversión, sería aún más fácil comenzar con , ya que el transductor para eso es más simple de describir y verificar: genera la cadena vacía mientras busca un β . Cuando encuentra β, se bifurca de manera no determinista, una bifurcación continúa buscando copias adicionales de β , la otra bifurcación copia todos los caracteres posteriores textualmente de entrada a salida, aceptando todo el tiempo.After(L,β)βββ

Lo que queda es hacer que esto funcione tanto para formularios condenatorios como para CFL. Pero eso es bastante sencillo, ya que el lenguaje de las formas sentenciales de un CFG es en sí mismo un CFL. Puede demostrar eso reemplazando cada no terminal a lo largo de G diciendo X , declarando que X es un terminal y agregando todas las producciones X X a la gramática.XGXXXX

Tendré que pensar en su pregunta sobre la ambigüedad.

David Lewis
fuente