Рассмотрите грамматику G с правилами S -> aSb | ε; определите класс формальных языков, к которому принадлежит L(G), постройте Pushdown Automaton, распишите доказательство нерегулярности языка и предложите, как эту грамматику преобразовать в нормальную форму Хомского
Кратко и по пунктам. 1) Язык и класс - Язык L(G)={anbn∣n≥0}L(G)=\{a^n b^n \mid n\ge 0\}L(G)={anbn∣n≥0}. - Это контекстно-свободный язык (более того — детерминированно КС-язык, DCFL), но не регулярный. 2) Pushdown Automaton (формально) - M=(Q,Σ,Γ,δ,q0,Z0,F)M=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F)M=(Q,Σ,Γ,δ,q0,Z0,F), где Q={q0,q1,qf}, Σ={a,b}, Γ={A,Z0}, F={qf}.\;Q=\{q_0,q_1,q_f\},\;\Sigma=\{a,b\},\;\Gamma=\{A,Z_0\},\;F=\{q_f\}.Q={q0,q1,qf},Σ={a,b},Γ={A,Z0},F={qf}.
- Набор переходов δ\deltaδ (запись в виде множеств образов): δ(q0,a,Z0)∋(q0, AZ0),δ(q0,a,A)∋(q0, AA),δ(q0,b,A)∋(q1, ε),δ(q1,b,A)∋(q1, ε),δ(q0,ε,Z0)∋(qf, Z0),δ(q1,ε,Z0)∋(qf, Z0).
\begin{aligned} &\delta(q_0,a,Z_0)\ni (q_0,\,A Z_0),\\ &\delta(q_0,a,A)\ni (q_0,\,A A),\\ &\delta(q_0,b,A)\ni (q_1,\,\varepsilon),\\ &\delta(q_1,b,A)\ni (q_1,\,\varepsilon),\\ &\delta(q_0,\varepsilon,Z_0)\ni (q_f,\,Z_0),\quad\delta(q_1,\varepsilon,Z_0)\ni (q_f,\,Z_0). \end{aligned} δ(q0,a,Z0)∋(q0,AZ0),δ(q0,a,A)∋(q0,AA),δ(q0,b,A)∋(q1,ε),δ(q1,b,A)∋(q1,ε),δ(q0,ε,Z0)∋(qf,Z0),δ(q1,ε,Z0)∋(qf,Z0).
- Идея: в состоянии q0q_0q0 считываем aaa и пушим маркер AAA; при первом bbb переходим в q1q_1q1 и для каждого bbb попем по одному AAA. Пустая строка принимается переходом в qfq_fqf при неповреждённом Z0Z_0Z0. 3) Доказательство нерегулярности (прамма регулярных языков) - Пусть язык регулярный. По лемме о накачке существует число ppp (параметр накачки). - Возьмём строку s=apbp∈Ls=a^p b^p\in Ls=apbp∈L. По лемме s=xyzs=xyzs=xyz такие, что ∣xy∣≤p|xy|\le p∣xy∣≤p и ∣y∣>0|y|>0∣y∣>0. Тогда yyy состоит только из символа aaa (поскольку первые ppp символов — все aaa). - По лемме строка xy0z=xzx y^0 z = x zxy0z=xz должна принадлежать языку. Но xzxzxz содержит меньше чем ppp символов aaa и всё ещё ppp символов bbb, то есть имеет вид ap−∣y∣bpa^{p-|y|} b^pap−∣y∣bp и не лежит в LLL. Противоречие. Следовательно язык не регулярный. 4) Преобразование грамматики в нормальную форму Хомского (CNF) Исходная грамматика: S→aSb∣ε.
S\to a S b \mid \varepsilon. S→aSb∣ε.
Шаги (коротко): - Введём новый стартовый символ S0S_0S0 и сохраним пустую строку: S0→S∣εS_0\to S \mid \varepsilonS0→S∣ε. - Удаляем ε\varepsilonε-правило из SSS. Поскольку SSS nullable, из S→aSbS\to aSbS→aSb получаем дополнительно S→abS\to abS→ab. Получаем: S→aSb∣ab.
S\to a S b \mid a b. S→aSb∣ab.
- Заменим терминалы в правых частях длиннее 1 на нетерминалы: введём A→a, B→bA\to a,\;B\to bA→a,B→b, тогда S→ASB∣AB.
S\to A S B \mid A B. S→ASB∣AB.
- Преобразуем правила длины >2 в бинарные, введя новый нетерминал XXX для SBS BSB: X→SB,S→AX∣AB.
X\to S B,\qquad S\to A X \mid A B. X→SB,S→AX∣AB.
- Устраняем единичные продукции у S0S_0S0: заменяем S0→SS_0\to SS0→S продукциями SSS, получаем окончательно (и допускаем S0→εS_0\to\varepsilonS0→ε как единственное ε\varepsilonε-правило для стартового символа): S0→AX∣AB∣ε,S→AX∣AB,X→SB,A→a, B→b.
\begin{aligned} &S_0\to A X \mid A B \mid \varepsilon,\\ &S\to A X \mid A B,\\ &X\to S B,\\ &A\to a,\; B\to b. \end{aligned} S0→AX∣AB∣ε,S→AX∣AB,X→SB,A→a,B→b.
- Все правые части сейчас либо два нетерминала, либо одиночный терминал (и единственное ε\varepsilonε-правило — у стартового символа), поэтому это CNF-форма эквивалентной грамматики. Конец.
1) Язык и класс
- Язык L(G)={anbn∣n≥0}L(G)=\{a^n b^n \mid n\ge 0\}L(G)={anbn∣n≥0}.
- Это контекстно-свободный язык (более того — детерминированно КС-язык, DCFL), но не регулярный.
2) Pushdown Automaton (формально)
- M=(Q,Σ,Γ,δ,q0,Z0,F)M=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F)M=(Q,Σ,Γ,δ,q0 ,Z0 ,F), где
Q={q0,q1,qf}, Σ={a,b}, Γ={A,Z0}, F={qf}.\;Q=\{q_0,q_1,q_f\},\;\Sigma=\{a,b\},\;\Gamma=\{A,Z_0\},\;F=\{q_f\}.Q={q0 ,q1 ,qf },Σ={a,b},Γ={A,Z0 },F={qf }. - Набор переходов δ\deltaδ (запись в виде множеств образов):
δ(q0,a,Z0)∋(q0, AZ0),δ(q0,a,A)∋(q0, AA),δ(q0,b,A)∋(q1, ε),δ(q1,b,A)∋(q1, ε),δ(q0,ε,Z0)∋(qf, Z0),δ(q1,ε,Z0)∋(qf, Z0). \begin{aligned}
&\delta(q_0,a,Z_0)\ni (q_0,\,A Z_0),\\
&\delta(q_0,a,A)\ni (q_0,\,A A),\\
&\delta(q_0,b,A)\ni (q_1,\,\varepsilon),\\
&\delta(q_1,b,A)\ni (q_1,\,\varepsilon),\\
&\delta(q_0,\varepsilon,Z_0)\ni (q_f,\,Z_0),\quad\delta(q_1,\varepsilon,Z_0)\ni (q_f,\,Z_0).
\end{aligned}
δ(q0 ,a,Z0 )∋(q0 ,AZ0 ),δ(q0 ,a,A)∋(q0 ,AA),δ(q0 ,b,A)∋(q1 ,ε),δ(q1 ,b,A)∋(q1 ,ε),δ(q0 ,ε,Z0 )∋(qf ,Z0 ),δ(q1 ,ε,Z0 )∋(qf ,Z0 ). - Идея: в состоянии q0q_0q0 считываем aaa и пушим маркер AAA; при первом bbb переходим в q1q_1q1 и для каждого bbb попем по одному AAA. Пустая строка принимается переходом в qfq_fqf при неповреждённом Z0Z_0Z0 .
3) Доказательство нерегулярности (прамма регулярных языков)
- Пусть язык регулярный. По лемме о накачке существует число ppp (параметр накачки).
- Возьмём строку s=apbp∈Ls=a^p b^p\in Ls=apbp∈L. По лемме s=xyzs=xyzs=xyz такие, что ∣xy∣≤p|xy|\le p∣xy∣≤p и ∣y∣>0|y|>0∣y∣>0. Тогда yyy состоит только из символа aaa (поскольку первые ppp символов — все aaa).
- По лемме строка xy0z=xzx y^0 z = x zxy0z=xz должна принадлежать языку. Но xzxzxz содержит меньше чем ppp символов aaa и всё ещё ppp символов bbb, то есть имеет вид ap−∣y∣bpa^{p-|y|} b^pap−∣y∣bp и не лежит в LLL. Противоречие. Следовательно язык не регулярный.
4) Преобразование грамматики в нормальную форму Хомского (CNF)
Исходная грамматика:
S→aSb∣ε. S\to a S b \mid \varepsilon.
S→aSb∣ε. Шаги (коротко):
- Введём новый стартовый символ S0S_0S0 и сохраним пустую строку: S0→S∣εS_0\to S \mid \varepsilonS0 →S∣ε.
- Удаляем ε\varepsilonε-правило из SSS. Поскольку SSS nullable, из S→aSbS\to aSbS→aSb получаем дополнительно S→abS\to abS→ab. Получаем:
S→aSb∣ab. S\to a S b \mid a b.
S→aSb∣ab. - Заменим терминалы в правых частях длиннее 1 на нетерминалы: введём A→a, B→bA\to a,\;B\to bA→a,B→b, тогда
S→ASB∣AB. S\to A S B \mid A B.
S→ASB∣AB. - Преобразуем правила длины >2 в бинарные, введя новый нетерминал XXX для SBS BSB:
X→SB,S→AX∣AB. X\to S B,\qquad S\to A X \mid A B.
X→SB,S→AX∣AB. - Устраняем единичные продукции у S0S_0S0 : заменяем S0→SS_0\to SS0 →S продукциями SSS, получаем окончательно (и допускаем S0→εS_0\to\varepsilonS0 →ε как единственное ε\varepsilonε-правило для стартового символа):
S0→AX∣AB∣ε,S→AX∣AB,X→SB,A→a, B→b. \begin{aligned}
&S_0\to A X \mid A B \mid \varepsilon,\\
&S\to A X \mid A B,\\
&X\to S B,\\
&A\to a,\; B\to b.
\end{aligned}
S0 →AX∣AB∣ε,S→AX∣AB,X→SB,A→a,B→b. - Все правые части сейчас либо два нетерминала, либо одиночный терминал (и единственное ε\varepsilonε-правило — у стартового символа), поэтому это CNF-форма эквивалентной грамматики.
Конец.