formal_language_theory / lectures / unit_4
.pdfАлгоритмическая разрешимость проблемы конечности или бесконечности языка, порождаемого cfg
Поскольку мы можем проверить, имеется ли данная цепочка в данном КСязыке L (см. теорему 2.3 о рекурсивности контекстно-зависимых грамматик), то мы просто должны проверять все цепочки в интервале длин l, удовлетворяющих неравенству p < l p + q, на принадлежность языку L(G).
Если такая цепочка имеется, то язык L бесконечен; если в языке L нет цепочек длины больше, чем p, то язык L конечен.
Что и требовалось доказать.
101
Исключение нетерминалов из cfg, из которых выводится только конечное число терминальных цепочек
В теореме 4.2 доказывалось, что из КСграмматики можно исключить все нетерминалы, из которых не выводится ни одной терминальной цепочки.
Теперь мы докажем возможность исключения нетерминалов, из которых выводится только конечное число терминальных цепочек.
102
Теорема 4.9. Для всякой КС-грамматики G1 можно найти эквивалентную ей КСграмматику G2, такую, что если A — нетерминал грамматики G2, не являющийся начальным нетерминалом, то из A выводимо бесконечно много терминальных цепочек.
Доказательство. Если язык
L(G1) = {x1, x2, ..., xn}
конечен, то утверждение очевидно.
Ret 88
103
Исключение нетерминалов из cfg, из которых выводится только конечное число терминальных цепочек
Действительно, положим
G2 = ({S}, VT , P2, S), где P2 = {S xi i = 1, 2, ..., n}.
В этой грамматике совсем нет нетерминалов, отличных от S.
Пусть теперь грамматика есть
G1 = (VN, VT, P1, S),
и язык L(G1) бесконечен. Рассмотрим грамматики
GA = (VN, VT, P1, A) для всех A VN.
104
Исключение нетерминалов из cfg, из которых выводится только конечное число терминальных цепочек
Так как существует алгоритм, позволяющий узнать, бесконечен ли порождаемый грамматикой GA язык, то словарь VN мы можем разбить на две части:
VN ={A1, A2, ..., Ak} {B1, B2, ..., Bm},
где Ai (i = 1, 2, ..., k) — нетерминалы, порождающие бесконечно много терминальных цепочек, причём начальный нетерминал S среди них, поскольку язык L бесконечен;
Bj ( j = 1, 2, ..., m) — нетерминалы, порождаю- щие конечные множества терминальных цепочек.
105
Исключение нетерминалов из cfg, из которых выводится только конечное число терминальных цепочек
Построим грамматику
G2 = ({A1, A2,..., Ak}, VT, P2, S), где
P2={Ai u1u2 ... ur Ai C1C2 ... Cr P1,
(1) ui = Ci, если Ci VT {A1, A2, ..., Ak},
(2) Ci *
G1
ui, ui
V |
* |
|
|
T |
, если Ci {B1, B2, ..., Bm}}.
106
Исключение нетерминалов из cfg, из которых выводится только конечное число терминальных цепочек
Короче говоря, правила P2 получаются из правил P1 посредством отбрасывания всех правил с нетерминалами Bj в левых частях, а в правых частях оставшихся правил все вхождения нетерминалов Bj надо заменить какими-нибудь их терминальными порождениями.
Поскольку число таких терминальных порождений конечно, то и число получающихся правил в P2 тоже конечно.
107
Исключение нетерминалов из cfg, из которых выводится только конечное число терминальных цепочек
Покажем теперь, что L(G1) = L(G2).
I. L(G1) L(G2).
Индукцией по длине вывода l докажем, что
|
l |
|
* |
|
w |
* |
|
|
|
|
|
если A |
w, то A |
|
(i = 1, 2, ..., k). |
||||||||
w, |
VT |
||||||||||
i |
G |
i |
G |
2 |
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
w. При этом |
|||
|
|
|
|
|
|
|
|
||||
База. Пусть l = 1 и пусть Ai G |
1 |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
применялось правило A |
|
|
|
|
* |
. |
|||||
w P , где w V |
|||||||||||
|
|
|
|
|
i |
|
|
|
1 |
T |
|
Но это же правило есть в P2 по построению (в правой части этого правила вовсе нет вхождений нетерминалов, в том числе и Bj).
Поэтому Ai w.
G2
108
Исключение нетерминалов из cfg, из которых выводится только конечное число терминальных цепочек
Индукционная гипотеза. Предположим, что утверждение выполняется для всех выводов длины l n (n 1).
Индукционный переход. Рассмотрим вывод длины l = n + 1:
|
|
|
|
|
|
n |
|
|
|
Ai |
C1C2 ... Cr w1w2 ... wr, |
||||
|
|
G |
|
||||
lp |
|
|
1 |
|
G1 |
||
|
|
|
|
||||
|
|
|
|
* |
, lp n. |
||
где Cp G |
1 |
|
wp, wp VT |
||||
|
|
|
|
|
|
|
|
На первом |
шаге применяется правило |
Ai C1C2 ... Cr P1.
109
Исключение нетерминалов из cfg, из которых выводится только конечное число терминальных цепочек
Возьмём во множестве правил P2 соответствующее правило, которое получается из данного заменой в нём всех нетерминалов типа B на соответствующие цепочки w, выводимые из них, т. е. правило
Ai u1u2 ... ur P2,
в котором
up = wp, если Cp VT {B1, B2,..., Bk},
up = Cp, если Cp {A1, A2, ..., Ak}, p =1, 2, ..., r.
110