Доказательство нерегулярности языков: лемма о разрастании — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 2: Строка 2:
 
{{Лемма
 
{{Лемма
 
|about=О разрастании
 
|about=О разрастании
|statement=<tex>L</tex> - регулярный <tex>\Rightarrow</tex> <tex>\exists n \:\forall \omega : |\omega| \geqslant n, \omega \in L \: \exists x,y,z : \omega=xyz, y\neq \epsilon, |xy|\leqslant n, \forall k \geqslant 0\: xy^{k}z\in L</tex>
+
|statement=
|proof=L - регулярный <tex>\Rightarrow</tex> <tex>\exists</tex> автомат <tex>A : \: n=|Q|</tex> допускающий этот язык. Возьмём <tex>\omega\in L : |\omega|\geqslant n</tex> тогда рассмотрим переходы в автомате <tex>\langle s,\omega\rangle \vdash\langle u_1, \omega[0]^{-1}\omega\dots\vdash\langle u_{l},\epsilon\rangle, \: l\geqslant n</tex>. Так как <tex>l\geqslant n</tex>, то возьмём первое совпадение состояний в автомате <tex>u_i, u_j</tex>. В нашем автомате для <tex>\omega : \: \langle s, xyz\rangle \vdash^*\langle u_i, yz\rangle\vdash^*\langle u_j, z\rangle\vdash^*\langle u_l, \epsilon\rangle</tex>. Тогда <tex>xy^kz</tex> подходит.  
+
Пусть <tex>L</tex> - регулярный язык над алфавитом <tex>\Sigma</tex>, тогда существует <tex>n</tex>, такой что для любого слова <tex> \omega \in L</tex>, длины не меньше <tex> n </tex> найдутся слова <tex> x,y,z \in \Sigma^*</tex>, для которых верно <tex>xyz=\omega, y\neq \varepsilon, |xy|\leqslant n</tex> и <tex>xy^{k}z\in L</tex> для всех <tex>  k \geqslant 0</tex>.
 +
|proof=
 +
<tex>L</tex> - регулярный <tex>\Rightarrow</tex> <tex>\exists</tex> автомат <tex>A : \: n=|Q|</tex> допускающий этот язык. Возьмём <tex>\omega\in L : |\omega|\geqslant n</tex> тогда рассмотрим переходы в автомате <tex>\langle s,\omega\rangle \vdash\langle u_1, \omega[0]^{-1}\omega\dots\vdash\langle u_{l},\epsilon\rangle, \: l\geqslant n</tex>. Так как <tex>l\geqslant n</tex>, то возьмём первое совпадение состояний в автомате <tex>u_i, u_j</tex>. В нашем автомате для <tex>\omega : \: \langle s, xyz\rangle \vdash^*\langle u_i, yz\rangle\vdash^*\langle u_j, z\rangle\vdash^*\langle u_l, \epsilon\rangle</tex>. Тогда <tex>xy^kz</tex> подходит.  
 
}}
 
}}
  

Версия 03:18, 8 октября 2010

Лемма (О разрастании):
Пусть [math]L[/math] - регулярный язык над алфавитом [math]\Sigma[/math], тогда существует [math]n[/math], такой что для любого слова [math] \omega \in L[/math], длины не меньше [math] n [/math] найдутся слова [math] x,y,z \in \Sigma^*[/math], для которых верно [math]xyz=\omega, y\neq \varepsilon, |xy|\leqslant n[/math] и [math]xy^{k}z\in L[/math] для всех [math] k \geqslant 0[/math].
Доказательство:
[math]\triangleright[/math]
[math]L[/math] - регулярный [math]\Rightarrow[/math] [math]\exists[/math] автомат [math]A : \: n=|Q|[/math] допускающий этот язык. Возьмём [math]\omega\in L : |\omega|\geqslant n[/math] тогда рассмотрим переходы в автомате [math]\langle s,\omega\rangle \vdash\langle u_1, \omega[0]^{-1}\omega\dots\vdash\langle u_{l},\epsilon\rangle, \: l\geqslant n[/math]. Так как [math]l\geqslant n[/math], то возьмём первое совпадение состояний в автомате [math]u_i, u_j[/math]. В нашем автомате для [math]\omega : \: \langle s, xyz\rangle \vdash^*\langle u_i, yz\rangle\vdash^*\langle u_j, z\rangle\vdash^*\langle u_l, \epsilon\rangle[/math]. Тогда [math]xy^kz[/math] подходит.
[math]\triangleleft[/math]


Чаще используется отрицание леммы для доказательства нерегулярности языка.


Пример 1 Правильная скобочная последовательность. Для [math]\forall n[/math] мы берём [math]\omega=(^n)^n[/math]. Так как [math]|xy|\leqslant n[/math], то [math]y=(^b[/math]. Берём [math]k=2[/math] и получаем [math]xy^kz=(^{n+b})^n[/math], что не является правильной скобочной последовательностью. Значит правильная скобочная последовательность не регулярный язык.

Пример 2 Язык [math]0^a1^a[/math] Для [math]\forall n[/math] мы берём [math]\omega=0^n1^n[/math]. Так как [math]|xy|\leqslant n[/math], то [math]y=0^b[/math]. Берём [math]k=2[/math] и получаем [math]xy^kz=0^{n+b}1^n[/math], что не является элементом нашего языка, значит наш язык не регулярен.


Интерпретация булевых формул с кванторами как игр для двух игроков

Рассмотрим формулу [math]\exists x_1 \forall x_2 \exists x_3 \dots Q x_n = \Psi(x_1,\dots ,x_n)[/math], где [math]Q[/math] - квантор зависящий от чётности [math]n[/math]. Теперь возьмём двух игроков и первый будет ставить [math]x[/math] с нечётными номерами, а второй с чётными. Если в итоге получается истина, то побеждает первый игрок, если получается ложь, то выигрывает второй. Если [math]\Psi[/math] истинна, то побеждает второй игрок, в противном случае побеждает первый (при правильных ходах). Пусть [math]\Psi[/math] истинно, тогда отделим первый квантор. [math]\exists x_1\Phi(x1)[/math], тогда по предположению есть такой [math]x_1[/math], что [math]\Phi(x_1)[/math] будет истинно. Верно и для любого с предположением для лжи. В итоге получаем, верное утверждение.