Да, и После ( β ) являются контекстно-свободными языками. Вот как я это докажу. Во-первых, лемма (которая суть). Если L является CF, то:Before(β)After(β)L
Before(L,β)={γ | ∃δ.γβδ∈L}
и
After(L,β)={γ | ∃δ.δβγ∈L}
являются CF.
Доказательство? Для создайте недетерминированный конечный датчик T β, который сканирует строку, выводя каждый входной символ, который он видит, и одновременно ищет недетерминированный β . Всякий раз, когда T β видит первый символ β, он недетерминированно разветвляется и прекращает вывод символов до тех пор, пока он либо не завершит просмотр β, либо не увидит, видит символ, отклоняющийся от β , и останавливается в любом случае. Если T β видит βBefore(L,β)TββTββββTββв полном объеме, он принимает после остановки, что является единственным способом, которым он принимает. Если он видит отклонение от , он отклоняет.β
Лемма может быть воспроизведена для обработки случаев, когда может перекрываться с самим собой (например, a b a b - продолжайте искать β даже в процессе сканирования на предмет предшествующего β ) или встречаться несколько раз (фактически, исходный недетерминированный разветвление уже справляется с этим). βababββ
Tβ(L)=Before(L,β)Before(L,β)
After(L,β)Before(L,β)
After(L,β)=rev(Before(rev(L),rev(β)))
After(L,β), since the transducer for that is simpler to describe and verify -- it outputs the empty string while looking for a β. When it finds β it forks non-deterministically, one fork continuing to look for further copies of β, the other fork copying all subsequent characters verbatim from input to output, accepting all the while.
What remains is to make this work for sentential forms as well as CFLs. But that is pretty straightforward, since the language of sentential forms of a CFG is itself a CFL. You can show that by replacing every non-terminal X throughout G by say X′, declaring X to be a terminal, and adding all productions X′→X to the grammar.
I'll have to think about your question on unambiguity.