403
правки
Изменения
Нет описания правки
|id = Лемма
|statement =
Пусть <tex> List(a_1, a_2, ... a_n) </tex> для набора слов <tex>(a_1, a_2, ..., a_n) </tex> {{---}} язык над алфавитом <tex> \{a_1, a_2, ..., a_n\} \cup \{1, 2, ..., n \}</tex>(для простоты будем считать, что <tex> \{a_1, a_2, ..., a_n\} \cap \{1, 2, ..., n\} = \varnothing </tex>), каждое слово которого имеет вид <tex> i_1i_2a_{i_1}a_{i_2}...i_ka_a_{i_k}a_{i_i_ki_{k-1}}...a_{i_1} </tex>, где <tex> i_j \in \{1, 2, ..., n\} </tex>. Тогда <tex> \overline {List(a_1, a_2, ..., a_n)} </tex> {{---}} [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора | контекстно-свободный]].
|proof =
Для доказательства построим [[Автоматы с магазинной памятью|МП-автомат]] с допуском по допускающему состоянию:
*<tex> \Sigma = \{a_1, a_2, ..., a_n\} \cup \{1, 2, ..., n\} </tex>;
*<tex> \Gamma = \Sigma \cup z_0 </tex>;
*<tex> Q = \{ S_0, S_1, S_2\} </tex>, где <tex> S_0 </tex> {{---}} стартовое состояние, а <tex> S_1 </tex> {{---}} допускающее.
Переходы определим следующим образом:
*<tex>\delta(S_0, ia_i, \alpha) = \langle S_0, a_i \alpha \rangle, i \in \{1, 2, ..., n \}</tex>;*<tex> \delta(S_0, i, a_i, i) = \langle S_0S_2, \varepsilon \rangle, i \in \{1, 2, ..., n \}</tex>;
*<tex> \delta(S_0, c, \alpha) = \langle S_1, \alpha \rangle </tex>, для всех других <tex> c </tex> и <tex> \alpha </tex>, не подходящих под первые два правила;
*<tex> \delta(S_1, c, \alpha) = \langle S_1, \alpha \rangle </tex>, для любых <tex> c </tex> и <tex> \alpha </tex>;*<tex> \delta(S_2, i, a_i) = \langle S_2, \varepsilon \rangle, i \in \{1, 2, ..., n\}</tex>;*<tex> \delta(S_2, c, \alpha) = \langle S_1, \alpha \rangle </tex>, для всех <tex> c </tex> и <tex> \alpha </tex>, кроме случая, когда <tex> c = i </tex> и <tex> \alpha = a_i </tex>.
Несложно увидеть, что любое слово, принадлежащее <tex> {List(a_1, a_2, ..., a_n)} </tex>, оставит данный автомат в состоянии <tex> S_0 S_2 </tex>, в противном случае переведет его в допускающее состояние <tex> S_1 </tex>.
}}