Составьте контекстно-свободную грамматику для языка L = { a^n b^n c^m | n ≥ 0, m ≥ 0 }, приведите пример вывода строки aabbbc и объясните, почему язык { a^n b^n c^n | n ≥ 0 } не является контекстно‑свободным

23 Окт в 12:44
6 +6
0
Ответы
1
Грамматика (КС) для языка L={anbncm∣n≥0, m≥0}L=\{a^n b^n c^m \mid n\ge 0,\; m\ge 0\}L={anbncmn0,m0}:
G=(V,Σ,R,S)G=(V,\Sigma,R,S)G=(V,Σ,R,S), где
V={S,A,C}V=\{S,A,C\}V={S,A,C}, Σ={a,b,c}\Sigma=\{a,b,c\}Σ={a,b,c},
правила RRR:
S→A CA→a A b∣εC→c C∣ε S \to A\,C
\qquad
A \to a\,A\,b \mid \varepsilon
\qquad
C \to c\,C \mid \varepsilon
SACAaAbεCcCε

Пояснение: нетерминал AAA порождает равное число aaa и bbb (в виде anbna^n b^nanbn), а CCC — произвольное число ccc.
Строка aabbbcaabbbcaabbbc: это последовательность a2b3c1a^2 b^3 c^1a2b3c1. Для языка LLL требуется число bbb равно числу aaa, то есть строка должна иметь вид anbncma^n b^n c^manbncm. Поскольку здесь 2≠32\neq 32=3, строка aabbbcaabbbcaabbbc не принадлежит LLL и потому в грамматике GGG выводу не подлежит.
Пример корректного вывода строки aabbcaabbcaabbc (то есть a2b2c1a^2 b^2 c^1a2b2c1) в данной грамматике:
S⇒A C⇒(aAb) C⇒(a(aAb)b) C⇒a a A b b C⇒a a ε b b C=aabb C⇒aabb (c C)=aabbc C⇒aabbc ε=aabbc \begin{array}{l}
S \Rightarrow A\,C \\
\Rightarrow (a A b)\,C \\
\Rightarrow (a (a A b) b)\,C \\
\Rightarrow a\,a\,A\,b\,b\,C \\
\Rightarrow a\,a\,\varepsilon\,b\,b\,C = aabb\,C \\
\Rightarrow aabb\,(c\,C) = aabbc\,C \\
\Rightarrow aabbc\,\varepsilon = aabbc
\end{array}
SAC(aAb)C(a(aAb)b)CaaAbbCaaεbbC=aabbCaabb(cC)=aabbcCaabbcε=aabbc

Почему язык {anbncn∣n≥0}\{a^n b^n c^n \mid n\ge 0\}{anbncnn0} не контекстно‑свободен (краткое доказательство через лемму о накачке для КС-языков):
Предположим противное: пусть L0={anbncn}L_0=\{a^n b^n c^n\}L0 ={anbncn} — КС-язык. По лемме существует константа ppp. Возьмём строку
s=apbpcp∈L0. s = a^p b^p c^p \in L_0.
s=apbpcpL0 .
По лемме sss представимо как s=uvwxys = u v w x ys=uvwxy, где ∣vwx∣≤p|vwx|\le pvwxp, ∣vx∣≥1|vx|\ge 1vx1 и для всех i≥0i\ge 0i0 строка uviwxiyu v^i w x^i yuviwxiy принадлежит L0L_0L0 . Поскольку ∣vwx∣≤p|vwx|\le pvwxp, подстрока vwxvwxvwx лежит полностью внутри одной из трёх блоков apa^pap, bpb^pbp или cpc^pcp, либо пересекает границу между двумя соседними блоками. Рассмотрим случаи:
- Если vvv и xxx лежат только в блоке aaa (или только в bbb или только в ccc), то при i=0i=0i=0 количество соответствующей буквы убывает, а двух других — нет, поэтому числа a,b,ca,b,ca,b,c в строке становятся разными — противоречие.
- Если vvv и/или xxx пересекают границу между aaa и bbb (или между bbb и ccc), то при накачке меняются количества двух типов букв, но не третьего, поэтому снова после некоторого iii числа a,b,ca,b,ca,b,c не будут равны — противоречие.
Во всех вариантах условие леммы приводит к строкам, не принадлежащим L0L_0L0 , что противоречит предположению. Следовательно, L0L_0L0 не является контекстно‑свободным.
23 Окт в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир