Vamos ter uma ideia do e Depois ( β ) primeiro. Considere uma árvore de derivação que contém β ; "contém" aqui significa que você pode cortar subárvores para que β seja uma subpalavra da frente da árvore. Então, o conjunto anterior (depois) são todas as frentes potenciais da parte da árvore à esquerda (direita) de β :Antes( β)Depois de( β)βββ
[ fonte ]
Portanto, temos que construir uma gramática para a parte alinhada horizontalmente (alinhada verticalmente) da árvore. Isso parece fácil, pois já temos uma gramática para toda a árvore; só precisamos garantir que todas as formas sentenciais sejam palavras (alterar os alfabetos), filtrar as que não contêm (que é uma propriedade regular, pois β é fixo) e cortar tudo depois de (antes) β , incluindo β . Este corte também deve ser possível.ββββ
Agora para uma prova formal. Vamos transformar a gramática como propriedades descritas e de fecho uso de para fazer a filtragem e de corte, ou seja, nós realizar uma prova não-construtiva.C F L
Seja uma gramática livre de contexto. É fácil ver que SF ( G ) é livre de contexto; construa G ′ = ( N ′ , T ′ , δ ′ , N S ) assim:G = ( N, T, δ, S)SF( G )G′= ( N′, T′, δ′, NS)
- N′= { NUMA∣ A ∈ N}
- T′= N∪ T
- δ′= { α ( A ) → α ( β) ∣ A → β∈ δ}∪{NA→A∣A∈N}
com para todos t ∈ T e α ( A ) = N A para todos uma ∈ N . É claro que L ( G ′ ) = SF ( G ) ; portanto, o fechamento do prefixo correspondente Pref ( SF ( G ) ) e o sufixo Suff ( SF ( G ) ) também são livres de contexto¹.α(t)=tt∈Tα(A)=NAa∈NL(G′)=SF(G)Pref(SF(G))Suff(SF(G))
Agora, para qualquer são L ( β ( N ∪ T ) * ) e L ( ( N ∪ T ) * β ) linguagens regulares. Como C F G é fechada sob cruzamento e direita / esquerda quociente com linguagens regulares, obtemosβ∈(N∪T)∗L(β(N∪T)∗)L((N∪T)∗β)CFL
Before(β)=(Pref(SF(G)) ∩ L((N∪T)∗β))/β∈CFL
e
.After(β)=(Suff(SF(G)) ∩ L(β(N∪T)∗))∖β∈CFL
¹ é fechado sob o quociente direito (e esquerdo) ; Pref ( L ) = G / Σ * e semelhante para Suff resp rendimento prefixo. fechamento de sufixo.CFLPref(L)=L/Σ∗Suff
Sim, e Depois ( β ) são linguagens livres de contexto. Aqui está como eu provaria isso. Primeiro, um lema (que é o ponto crucial). Se L é CF, então:Before(β) After(β) L
e
são CF.
Prova? Para construa um transdutor de estado finito não determinístico T β que varre uma string, emitindo todos os símbolos de entrada que vê e simultaneamente procura não deterministicamente β . Sempre que T β vê o primeiro símbolo de β , bifurca-se de forma não determinística e cessa de emitir símbolos até terminar de ver β ou vê um símbolo que se desvia de β , parando em ambos os casos. Se T β vê βAntes (L,β) Tβ β Tβ β β β Tβ β na íntegra, aceita ao parar, que é a única maneira que aceita. Se vir um desvio de , rejeitará.β
O lema pode ser acionado para lidar com casos em que pode se sobrepor (como a b a b - continue procurando por β, mesmo durante a verificação de β anterior ) ou apareça várias vezes (na verdade, o original não determinístico) bifurcação já lida com isso).β a b a b β β
É bastante claro que , e como as CFLs são fechadas sob transdução em estado finito, Antes ( L , β ) é, portanto, CF.Tβ( L ) = Antes ( L , β) Antes (L,β)
Um argumento semelhante vale para , ou pode ser feito com reversões de string de Before ( L , β ) , CFLs também sendo fechadas sob reversão:Após (L,β) Antes (L,β)
Na verdade, agora que vejo o argumento de reversão, seria ainda mais fácil começar com , já que o transdutor para isso é mais simples de descrever e verificar - ele gera a string vazia enquanto procura por um β . Quando encontra β , bifurca-se de forma não determinística, uma bifurcação continua a procurar cópias adicionais de β , a outra bifurcação copia todos os caracteres subseqüentes literalmente da entrada para a saída, aceitando o tempo todo.Após (L,β) β β β
O que resta é fazer isso funcionar tanto para formulários sentenciais quanto para CFLs. Mas isso é bem direto, uma vez que a linguagem das formas sentenciais de um CFG é ela própria uma CFL. Você pode mostrar isso substituindo todos os não terminais em todo G , digamos X ′ , declarando X como um terminal e adicionando todas as produções X ′ → X à gramática.X G X′ X X′→ X
Vou ter que pensar na sua pergunta sobre a ambiguidade.
fonte