3.2. Характеризации рекурсивно перечислимых языков 133
∪ {Xα → αX | α ∈ N ∪ T } ∪ {Xc
1
→ c
1
c
2
}.
Легко видеть, что G
0
моделирует выводы в G с той лишь
разницей, что вместо сокращающих длину слова правил из P
используются правила, вводящие символ X. Этот символ мож-
но сдвинуть вправо и заменить на терминаль ный символ c
2
справа от c
1
. Тогда, если L = L(G), то язык L
0
= L(G
0
) удовле-
творяет заключению теоремы.
Следствие 3.2. (i) Л юбой рекурсивно перечислимый язык яв-
ляется проекцией некоторого контекстного языка.
(ii) Для лю бого L ∈ RE существуют такие языки L
1
∈ CS
и L
2
∈ R EG, что L = L
1
/L
2
.
Доказательство. Первое утверждение получится, если взять
проекцию, стирающую введенные выше символы c
1
, c
2
. Второе
утверждение получится, если рассмотреть регулярный язык
L
2
= c
1
c
∗
2
. (В обоих случаях контекстный язык — это язык L
0
из теоремы 3.12.)
Разумеется, приведенные выше утверждения верны и в
«зеркальной» версии, т. е. для L
0
⊆ {c
2
}
∗
{c
1
}L в теореме 3.12,
и для левого деления в пункте (ii) следствия 3.2.
Эти результаты показывают, что семейства RE и CS «по-
чти равны»: строки из языков этих семейств различаются лишь
хвостом, который, имея вид c
1
c
i
2
, i > 1, не несет никакой ин-
формации, кроме своей длины. Следовательно с синтаксиче-
ской т очк и зрения языки L и L
0
в теореме 3.12 можно считать
неразличимыми.
Приводимые ниже результаты имеют другую природу: в
них рекурсивно перечислимые языки строятся, исходя из «ма-
леньких» подсемейств семейства RE, но при этом используют-
ся сильные операции (такие, как пересечение, деление и т.п.).
Теорема 3.13. Любой рекурсивно перечислимый язык есть
частное двух линейных языков.
Доказательство. Пусть L ∈ RE, L ⊆ T
∗
. Рассмотрим грам-
матику G = (N, T, S, P ) типа 0, порождающую язык mi(L) и
добавим к P правило S → S. (После этого можно считать, что