Упражнение 2.1.25 |
Дополнительные свойства контекстно-свободных языков
11.3. Представления контекстно-свободных языков посредством гомоморфизмов
Теорема 11.3.1. Рассмотрим алфавит и язык
, порождаемый контекстно-свободной грамматикой G0:
![\begin{align*}
S \; & {\to} \; C b_1 b_2 b_1 R C , & A \; & {\to} \; a_1 , & R \; & {\to} \; \varepsilon , \\
C \; & {\to} \; c , & A \; & {\to} \; a_2 , & R \; & {\to} \; T a_1 T b_1 , \\
C \; & {\to} \; c D C , & A \; & {\to} \; b_1 , & R \; & {\to} \; T a_2 T b_2 , \\
D \; & {\to} \; A , & A \; & {\to} \; b_2 , & T \; & {\to} \; R , \\
D \; & {\to} \; A D , & & & T \; & {\to} \; R C C .
\end{align*}](/sites/default/files/tex_cache/c03439e9e53477cac96ac91d9916764f.png)
![L \subseteq \Sigma^*](/sites/default/files/tex_cache/3b0615c5a8ff0a3e8ac34d072df9ea13.png)
![h \colon \Sigma^* \farrow \Sigma_0^*](/sites/default/files/tex_cache/ef8ce232885f81c42252405add3838da.png)
![L = h^{-1} ( L_0 \cup \{ \varepsilon \} )](/sites/default/files/tex_cache/7cbe7b47483d1c54a2d961c1f8bdc886.png)
Доказательство. Достаточность следует из теоремы 11.2.4. Приведем теперь идею доказательства необходимости (полное доказательство можно найти в [Сал, с. 103-109]).
Пусть дан произвольный
контекстно-свободный язык L.
Согласно теореме 8.4.6
язык
порождается некоторой
контекстно-свободной грамматикой
,
в которой каждое правило имеет один из следующих трех видов:
,
,
,
где
.
Определим вспомогательную функцию ,
ставящую в соответствие каждому символу из
конечный язык над алфавитом
следующим образом:
![\begin{align*}
\bar{h} ( a ) &=
\{ b_1 b_2^i b_1 \mid ( A_i \tto a ) \in P \} \cup {} \\
&\qquad \cup
\{ b_1 b_2^i b_1 a_1 a_2^j a_1 \mid ( A_i \tto a A_j ) \in P \} \cup {} \\
&\qquad \cup
\{ b_1 b_2^i b_1 a_1 a_2^k a_1 a_1 a_2^j a_1 \mid
( A_i \tto a A_j A_k ) \in P \} .
\end{align*}](/sites/default/files/tex_cache/8b76d8a06292e403b5a90f0f7cf34735.png)
![\bar{h} ( a ) = \{ w_1 , w_2 , \ldots , w_k \} ,](/sites/default/files/tex_cache/870c5396918aa46d74add423176e2600.png)
![h ( a ) = c w_1 c w_2 c \ldots c w_k c .](/sites/default/files/tex_cache/4ff1c69f00a3ffe41087393b098b6989.png)
Пример 11.3.2.
Пусть .
Рассмотрим язык L,
порождаемый грамматикой
![\begin{align*}
A_1 \; & {\to} \; f , \\
A_1 \; & {\to} \; d A_1 A_2 , \\
A_2 \; & {\to} \; f A_3 , \\
A_2 \; & {\to} \; f A_2 A_3 , \\
A_3 \; & {\to} \; g .
\end{align*}](/sites/default/files/tex_cache/9a737c973de84e07a2a3a77c7903a042.png)
h(d) = cb1b2b1a1a2a2a1a1a2a1c, h(f) = cb1b2b1cb1b2b2b1a1a2a2a2a1cb1b2b2b1a1a2a2a2a1a1a2a2a1c, h(g) = cb1b2b2b2b1c.
Рассмотрим, например, слово .
Проверим, что слово h(dffg)
выводится в грамматике G0
из теоремы 11.3.1.
Очевидно, что
.
С помощью последних пяти правил грамматики G0
можно вывести, что
![R \mymathrel{\overstar{\Rightarrow}}
a_1 a_2 a_2 a_1 a_1 a_2 a_1 C C b_1 b_2 b_1 C C
b_1 b_2 b_2 b_1 a_1 a_2 a_2 a_2 a_1 C C
b_1 b_2 b_2 b_2 b_1 .](/sites/default/files/tex_cache/46a8d862f349a8657fe2a9180f434592.png)
![w_1 , \ldots , w_6](/sites/default/files/tex_cache/de83c957fa639164b719dafe519de52e.png)
![\begin{multiline*}
h ( d {} f f g ) =
\\=
c b_1 b_2 b_1
% a_1 a_2^2 a_1^2 a_2 a_1 w_1 w_2 b_1 b_2 b_1 w_3 w_4
a_1 a_2^2 a_1 a_1 a_2 a_1 w_1 w_2 b_1 b_2 b_1 w_3 w_4
b_1 b_2^2 b_1 a_1 a_2^3 a_1 w_5 w_6
b_1 b_2^3 b_1 c
.
\end{multiline*}](/sites/default/files/tex_cache/de37404130f04713a591a2be0fcd8e78.png)
w1 = c, w2 = c, w3 = cb1b2b2b1a1a2a2a2a1cb1b2b2b1a1a2a2a2a1a1a2a2a1c, w4 = cb1b2b1c, w5 = cb1b2b2b1a1a2a2a2a1a1a2a2a1c, w6 = c.
Теорема 11.3.3 (Теорема Хомского-Шютценберже). Язык является контекстно-свободным
тогда и только тогда, когда
существуют такие
натуральное число n, автоматный язык L1 над алфавитом
и гомоморфизм
, что
, где
- язык Дика над 2n буквами.
Доказательство можно найти в [Лал, с. 331-333].
Упражнение 11.3.4. Рассмотрим язык L1, порождаемый грамматикой
![\begin{align*}
S \; & {\to} \; a S b S , \\
S \; & {\to} \; \varepsilon ,
\end{align*}](/sites/default/files/tex_cache/0a4b865994c2c150d09a3f56d7c9fa3f.png)
![\begin{align*}
S \; & {\to} \; bb S a , \\
S \; & {\to} \; \varepsilon .
\end{align*}](/sites/default/files/tex_cache/8af6ab98dc02a7193fb314f1ee7a2539.png)
![h \colon \{a,b\}^* \farrow \{a,b\}^*](/sites/default/files/tex_cache/677bbf6a978b5521e5d78456d9170a47.png)
![h(L_1 \cap \{ a^m b^n \mid m \geq 0 ,\ n \geq 0 \}) = L_2 .](/sites/default/files/tex_cache/0f75887af07aef6f8ce96d13a1d501d0.png)