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
Before(L,β)={γ | ∃δ.γβδ∈ L }
e
Após (L,β) = { γ | ∃δ . δβγ∈ L }
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,β)
Após (L,β) = rev ( Antes ( rev ( L ) , rev ( β) ) )
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.XGX′XX′→ X
Vou ter que pensar na sua pergunta sobre a ambiguidade.