Доказательство. Пусть G = (V
T
, V
N
, P, S) и x ∈ V
∗
T
. Согласно определению
языка L(G), если существует вывод (7.5), то x ∈ L(G ). Допустим теперь, что цепочка
x выводима из S в G. Пусть r — наименьшее число, для которого существует вывод
S ⇒ Z
1
⇒ . . . ⇒ Z
r
= x. Поскольку G — неукорачивающая КС–грамматика, то
|Z
i
| ≤ |Z
i+1
| для каждого i. Предположим, что r > n
k
. Тогда в выводе x найдутся
цепочки Z
l
= Z
m
при l < m. Отсюда следует, что имеется более короткий вывод S ⇒
Z
1
⇒ . . . ⇒ Z
l
⇒ Z
m+1
⇒ . . . ⇒ Z
r
= x, что противоречит свойству минимальности
рассмотренного нами вывода.
Теорема 7.8. Существует алгоритм, позволяющий узнать, принадлежит ли про-
извольная цепочка языку, порождаемому данной неукорачивающей КС–граммати-
кой.
Доказательство. Пусть x — произвольная цепочка из Σ
∗
и G — некоторая
неукорачивающая КС–грамматика с тем же множеством терминальных символов.
Пусть длина цепочки x равна k. Из теоремы 7.7 следует, что x ∈ L(G) тогда и
только тогда, когда x порождается с помощью некоторого вывода, длина которого не
превышает m = n
|x|
, где n — число нетерминальных символов в G. Тогда достаточно
просмотреть все выводы, длины которых не превышают m. Цепочка x принадлежит
L(G) тогда и только тогда, когда ее можно получить с помощью хотя бы одного из
рассмотренных выводов.
Представляет интерес преобразование любой КС–грамматики в эквивалентную
неукорачивающую грамматику. Если G — КС–грамматика и ε ∈ L(G), то хотя бы
одно правило вида A → ε в множестве правил G имеется. Если ε /∈ L(G), то по
грамматике G всегда можно построить КС–грамматику, тоже порождающую язык
L(G), но не содержащую ни одного правила с пустой правой частью. Алгоритм такого
построения мы рассмотрим при доказательстве следующей теоремы.
Теорема 7.9. Для произвольной КС–грамматики, порождающей язык без пустой
цепочки, можно построить эквивалентную неукорачивающую КС–грамматику.
Доказательство. Построим множество всех нетерминальных символов грамма-
тики G = (V
T
, V
N
, P, S), из которых выводится пустая цепочка. С этой целью выделим
следующие множества нетерминалов:
W
1
= {A|A → ε ∈ P },
W
m+1
= W
m
∪ {B|B → ϕ ∈ P , ϕ ∈ W
∗
m
}.
Ясно, что A
∗
⇒ ε тогда и только тогда, когда A ∈ W
n
для некоторого n (n < |V
N
|).
Рассмотрим множество P
1
, состоящее из всех правил A → ˜α, полученных из
правил A → α ∈ P при удалении из α некоторых (возможно, никаких) вхождений
символов из множества W
n
:
P
0
1
= P \ {A → ε|A → ε ∈ P }
P
i+1
1
= {A → ˜α |A → α ∈ P
i
1
; α = α
1
Bα
2
; B ∈ W
n
&˜α = α
1
α
2
} .
Грамматика G
1
= (V
T
, V
N
, P
1
, S) является неукорачивающей. Покажем, что она эк-
вивалентна G. Пусть x ∈ L(G
1
), тогда существует вывод x в G
1
. Рассмотрим
первый левый шаг вывода, на котором применялось первое правило, не принадле-
жащее P . По построению множеству P принадлежит такое правило A → α, что
α = x
1
A
1
x
2
A
2
. . . x
r
A
r
x
r+1
и A
1
, A
2
, . . . A
r
∈ W n. Это означает, что в G выводимо
A
1
∗
⇒ ε, . . . , A
r
∗
⇒ ε, но тогда рассмотренный шаг вывода в G
1
можно заменить на
вывод в G :
x
1
A
1
x
2
A
2
...x
r
A
r
x
r+1
⇒ x
1
x
2
A
2
...x
r
A
r
x
r+1
⇒ . . . ⇒ x
1
x
2
...x
r+1
.
204