Почему {a ^ nb ^ n | n ›= 0} не регулярно?

В курсе CS, который я изучаю, есть пример нестандартного языка:

{a^nb^n | n >= 0}

Я могу понять, что это не регулярно, поскольку нельзя написать конечный автомат / машину, которая проверяет и принимает этот ввод, поскольку в нем отсутствует компонент памяти. (Пожалуйста, поправьте меня, если я ошибаюсь)

В википедии о регулярном языке также приводится этот пример, но не приводится (математическое) доказательство того, почему это не регулярно.

Может ли кто-нибудь просветить меня по этому поводу и предоставить доказательства этого или указать мне тоже на хороший ресурс?


person Christophe Herreman    schedule 22.02.2010    source источник


Ответы (5)


Вы ищете лемму о перекачке для обычных языков.

Вот пример с вашей конкретной проблемой:

Примеры:
Пусть L = {a m b m | m ≥ 1}.
Тогда L не является регулярным.
Доказательство: Пусть n такое же, как в лемме о накачке.
Пусть w = a n b n .
Пусть w = xyz такое же, как в лемме о накачке.
Таким образом, xy 2 z ∈ L, однако xy 2 z содержит больше a, чем b .

person cletus    schedule 22.02.2010
comment
Спасибо, именно то, что я искал. - person Christophe Herreman; 22.02.2010
comment
последнее утверждение требует более подробных объяснений. Слово x2yz либо будет содержать больше букв одного вида (если y имеет больше a, чем b, или наоборот), либо его дублирование нарушит порядок букв, в котором b должны стоять после всех a. - person P Shved; 22.02.2010
comment
неполное доказательство. вы не определили x, y, z. x имеет только ограничение | ху | ‹= P, где p - длина откачки. вам нужно разделить ваше доказательство на три случая, с y строками на основе (a | ab | b), чтобы оно было полным. xy вполне может состоять из большего количества b, чем a: x = a, y = b ^ n, z = b - person oligofren; 05.06.2014
comment
В доказательстве отсутствуют некоторые части, поэтому оно неверно. Плюс ссылка битая. - person 6infinity8; 21.03.2018

Потому что вы не можете написать конечный автомат, который будет «считать» идентичные последовательности символов «a» и «b». Короче говоря, конечные автоматы не могут «считаться». Попробуйте представить себе такой автомат: сколько состояний вы бы дали символу «а»? Сколько до "б"? Что, если в вашей входной последовательности больше?

Обратите внимание, что если бы у вас было n ‹= X с целочисленным X, вы могли бы подготовить такой автомат (имея один с большим количеством состояний, но все же с конечным числом); такой язык был бы регулярным.

person lorenzog    schedule 22.02.2010

Причина в том, что вы должны достичь конечного состояния только тогда, когда нет. из «а» и нет. из 'b' во входной строке равны. А для этого нужно посчитать и то, и другое - нет. как "а", так и "нет". из 'b', но поскольку значение 'n' может достигать бесконечности, невозможно считать до бесконечности с помощью конечных автоматов.

Так вот почему {a ^ n b ^ n | n> = 0} не является регулярным.

person Ravi Panchal    schedule 16.09.2019

Конечный автомат не имеет структуры данных (стека) - памяти, как в случае с нажимающим автоматом. Да, он может дать вам несколько «а», за которыми следует несколько «б», но не точное количество «а», за которым следует «нет».

person Rohit Pratap    schedule 26.02.2015

Предположим, L = {a n b n | n ≥ 0} является регулярным. Тогда мы можем воспользоваться леммой о накачке.

Пусть n номер леммы о накачке. Рассмотрим w = a n b n ∈L. Лемма о накачке утверждает, что вы можете разделить w на xyz так, чтобы xy ≤ n, y ≥ 1 и < strong> ∀ i∈ℕ 0: xy i z∈L.

Используя первые два правила, мы легко видим, что независимо от того, как мы делим w на xyz, y всегда будет состоять только из a s и что он будет содержать хотя бы одну такую ​​букву. С помощью правила 3 ​​заключаем, что a n-k b n ∈L, где k = | y | ≥ 1. Но nk ≠ n нарушает определение L, поэтому a nk b n ∉L < / сильный>. Получили противоречие ????, и мы заключаем, что предположение о регулярности L неверно.

person Niki    schedule 14.07.2020