Язык L = { a^n b^n c^n | n ≥ 1 } часто приводят как пример не-КС-языка — докажите, почему этот язык не контекстно-свободен, используя лемму о накачке для КС-языков, и опишите машину или формализм (например, линейно-ограниченный автомат или тип0-грамматику), который способен порождать этот язык

9 Ноя в 21:46
4 +4
0
Ответы
1
Доказательство не-КС с помощью леммы о накачке для КС-языков.
Лемма: для любого бесконтекстного языка существует число ppp такое, что любое слово sss с ∣s∣≥p|s|\ge psp можно представить как s=uvwxys=uvwxys=uvwxy, где ∣vwx∣≤p|vwx|\le pvwxp, ∣vx∣≥1|vx|\ge1vx1, и для всех i≥0i\ge0i0 слово uviwxiyuv^i w x^i yuviwxiy принадлежит языку.
Пусть для противоречия язык L={anbncn∣n≥1}L=\{a^n b^n c^n \mid n\ge1\}L={anbncnn1} бесконтекстен. Возьмём ppp из леммы и рассмотрим
s=apbpcp. s = a^p b^p c^p .
s=apbpcp.
По лемме s=uvwxys=uvwxys=uvwxy с ∣vwx∣≤p|vwx|\le pvwxp и ∣vx∣≥1|vx|\ge1vx1. Так как длина блока vwx≤pvwx\le pvwxp, эта подстрока целиком лежит не более чем в двух подряд идущих видах символов: либо внутри одних aaa, либо внутри одних bbb, либо внутри одних ccc, либо пересекает границу a ⁣/ ba\!/\,ba/b или b ⁣/ cb\!/\,cb/c. Значит vvv и xxx затрагивают не все три типа символов одновременно.
Рассмотрим случаи (всегда можно взять i=0i=0i=0 или i=2i=2i=2 для контрпримера):
- Если vvv и xxx содержат только aaa-символы, то при i=0i=0i=0 число aaa уменьшится, а числа b,cb,cb,c останутся равными ppp: получим слово, где числа букв не все равны, следовательно не в LLL.
- Аналогично, если v,xv,xv,x только из bbb или только из ccc, то при i=0i=0i=0 (или i=2i=2i=2) нарушится равенство трёх счётчиков.
- Если v,xv,xv,x пересекают границу a ⁣/ ba\!/\,ba/b, то их удаление/добавление изменит числа aaa и bbb (вместе), но не число ccc; при некотором iii числа трех типов не будут все равны.
- Аналогично для границы b ⁣/ cb\!/\,cb/c.
Во всех случаях существует iii такое, что uviwxiy∉Luv^i w x^i y\notin Luviwxiy/L, что противоречит лемме. Следовательно LLL не является бесконтекстным.
Формализм, порождающий / распознающий этот язык.
1) Контекстно-чувствительная грамматика (тип-1). Пример Грамматики, порождающей LLL:
S→aSBC∣abc,CB→BC,aB→ab,bB→bb,bC→bc,cC→cc. \begin{aligned}
S &\to aSBC \mid abc,\\
CB &\to BC,\\
aB &\to ab,\\
bB &\to bb,\\
bC &\to bc,\\
cC &\to cc.
\end{aligned}
SCBaBbBbCcC aSBCabc,BC,ab,bb,bc,cc.
Идея: многократно применять S→aSBCS\to aSBCSaSBC, затем S→abcS\to abcSabc, после чего переставлять и заменять B,CB,CB,C на b,cb,cb,c, получая anbncna^n b^n c^nanbncn. Все правила не укорачивают слово, поэтому грамматика контекстно-чувствительная.
2) Линейно-ограниченный автомат (LBA). НЕЛБА (недетерминированный LBA) или даже детерминированный LBA может распознать LLL таким образом: на ленте записано входное слово; итеративно помечать (заменять) первый непомеченный aaa на метку XXX, затем найдя первую непомеченную bbb пометить её YYY, затем первую непомеченную ccc пометить ZZZ; повторять, пока не пометятся все символы; в конце проверить, что были только aaa, затем bbb, затем ccc и что ни один символ не остался непомеченным. Поскольку LBA использует только ограниченную входной длиной память, это распознавание укладывается в модель линейно-ограниченного автомата.
9 Ноя в 22:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир