Доказательство нерегулярности языков: лемма о разрастании — различия между версиями
(oops) |
|||
Строка 21: | Строка 21: | ||
=== Пример доказательства без использования леммы === | === Пример доказательства без использования леммы === | ||
− | Докажем нерегулярность языка <tex>0^a 1^b 2^b, a \geqslant 1, b \geqslant 0</tex>. Заметим, что здесь условие леммы о накачке выполнено <tex>(n = 1, x = \varepsilon, y = 0)</tex>. Докажем нерегулярность языка с помощью свойств ДКА. Пусть для языка существует автомат <tex>A</tex> c <tex>k</tex> состояниями. Пусть после <tex>a</tex> нулей на вход поступило <tex>k</tex> единиц. При помощи рассуждений, аналогичных приведенным в доказательстве леммы, получаем, что с момента завершения считывания нулей до последнего считывания единицы автомат посетит <tex>k + 1</tex> состояние, т. е. хотя бы в одном из них он окажется дважды. Пусть при первом посещении этого состояния автомат считал <tex>i</tex> единиц, при втором — <tex>j</tex>. Поскольку <tex>0^a 1^i 2^i</tex> принимается автоматом, а <tex>0^a 1^j 2^i</tex> — не принимается, то при подаче автомату, находящемуся в этом состоянии, <tex>i</tex> двоек, автомат, с одной стороны, должен оказаться в допускающем состоянии, с другой — в недопускающем. | + | Докажем нерегулярность языка <tex>0^a 1^b 2^b, a \geqslant 1, b \geqslant 0</tex>. Заметим, что здесь условие леммы о накачке выполнено <tex>(n = 1, x = \varepsilon, y = 0)</tex>. {{TODO|t=предыдущее утверждение — неправда, возьмем <tex>k=0</tex>, получим <tex>1^b2^b</tex> не в языке}} |
+ | |||
+ | Докажем нерегулярность языка с помощью свойств ДКА. Пусть для языка существует автомат <tex>A</tex> c <tex>k</tex> состояниями. Пусть после <tex>a</tex> нулей на вход поступило <tex>k</tex> единиц. При помощи рассуждений, аналогичных приведенным в доказательстве леммы, получаем, что с момента завершения считывания нулей до последнего считывания единицы автомат посетит <tex>k + 1</tex> состояние, т. е. хотя бы в одном из них он окажется дважды. Пусть при первом посещении этого состояния автомат считал <tex>i</tex> единиц, при втором — <tex>j</tex>. Поскольку <tex>0^a 1^i 2^i</tex> принимается автоматом, а <tex>0^a 1^j 2^i</tex> — не принимается, то при подаче автомату, находящемуся в этом состоянии, <tex>i</tex> двоек, автомат, с одной стороны, должен оказаться в допускающем состоянии, с другой — в недопускающем. | ||
== См. также == | == См. также == |
Версия 16:24, 19 сентября 2012
Лемма о разрастании[1] — лемма, позволяющая во многих случаях проверить, является ли данный язык регулярным.
Содержание
Лемма (о разрастании, о накачке): |
Пусть регулярный язык над алфавитом , тогда существует такое , что для любого слова длины не меньше найдутся слова , для которых верно: и . — |
Доказательство: |
Пусть — регулярный язык над алфавитом . Поскольку регулярный язык является автоматным, то найдётся автомат , допускающий язык . Пусть — размер автомата. Докажем, что удовлетворяет условию леммы.
|
Замечание. Условие леммы не является достаточным для регулярности языка. (См. пример 2)
Доказательства нерегулярности языков
Для доказательства нерегулярности языка можно использовать свойства регулярных и автоматных языков.
Часто удобно использовать отрицание леммы о разрастании. Пусть
— язык над алфавитом . Если для любого натурального найдётся такое слово из данного языка, что его длина будет не меньше и при любом разбиении на три слова такие, что непустое и длина не больше , существует такое , что , то язык нерегулярный.Пример доказательства с использованием леммы
Рассмотрим язык правильных скобочных последовательностей. Для фиксированного
предъявляем слово . Пусть как-то разбили на . Так как , то , где . Для любого такого разбиения берём и получаем , что не является правильной скобочной последовательностью. Значит, язык правильных скобочных последовательностей нерегулярен.Пример доказательства без использования леммы
Докажем нерегулярность языка TODO: предыдущее утверждение — неправда, возьмем , получим не в языке
. Заметим, что здесь условие леммы о накачке выполнено .Докажем нерегулярность языка с помощью свойств ДКА. Пусть для языка существует автомат
c состояниями. Пусть после нулей на вход поступило единиц. При помощи рассуждений, аналогичных приведенным в доказательстве леммы, получаем, что с момента завершения считывания нулей до последнего считывания единицы автомат посетит состояние, т. е. хотя бы в одном из них он окажется дважды. Пусть при первом посещении этого состояния автомат считал единиц, при втором — . Поскольку принимается автоматом, а — не принимается, то при подаче автомату, находящемуся в этом состоянии, двоек, автомат, с одной стороны, должен оказаться в допускающем состоянии, с другой — в недопускающем.См. также
- Лемма о разрастании для КС-грамматик
- Интерпретация булевых формул с кванторами как игр для двух игроков
Примечания
- ↑ Лемму также часто называют леммой о накачке.
Литература
- Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 144. — ISBN 5-8459-0261-4