Как доказать, что язык не является регулярным?


76

Мы узнали о классе обычных языков . Он характеризуется каким-либо одним понятием среди регулярных выражений, конечных автоматов и леволинейных грамматик, поэтому легко показать, что данный язык является регулярным.REG

Как мне показать обратное, хотя? Мой ТА был непреклонен, что для этого нам нужно было бы показать для всех регулярных выражений (или для всех конечных автоматов, или для всех леволинейных грамматик), что они не могут описать язык под рукой. Это кажется большой задачей!

Я читал о какой-то лемме прокачки, но она выглядит действительно сложной.

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

Ответы:


60

Доказательство от противоречия часто используется, чтобы показать, что язык не является регулярным: пусть свойство true для всех обычных языков, если ваш конкретный язык не проверяет , то он не является регулярным. Можно использовать следующие свойства:PP

  1. Насосная лемма, как показано в ответе Дейва ;
  2. Свойства замыкания регулярных языков (операции над множествами, конкатенация, звезда Клини, зеркало, гомоморфизмы);
  3. Регулярный язык имеет конечное число префиксных классов эквивалентности, теорема Майхилла – Нерода .

Чтобы доказать, что язык не является регулярным с использованием свойств замыкания, метод состоит в том, чтобы комбинировать с регулярными языками с помощью операций, которые сохраняют регулярность, чтобы получить язык, о котором известно, что он не является регулярным, например, архетипический язык . Например, пусть . Пусть является регулярным, как и обычные языки закрыты под комплементарности так «s дополнение . Теперь возьмем пересечение и которое является регулярным, мы получим которое не является регулярным.LLI={anbnnN}L={apbqpq}LLLcLcabI

Теорема Майхилла – Нерода может быть использована для доказательства того, что не регулярна. Для , . Все классы различны и существует счетная бесконечность таких классов. Поскольку обычный язык должен иметь конечное число классов, не являюсь регулярным.Ip0I/ap={arbrbprN}=I.{bp}I


3
Не знал о теореме Майхилла-Нероде, круто!
Даниил

В Википедии также есть раздел о количестве слов на обычном языке: если вы можете доказать, что ваш язык не соответствует характеристике, то ваш язык не является регулярным: en.wikipedia.org/wiki/…
Alex ten Brink

@Daniil, регулярные выражения не могут сосчитать , мне кажется популярной неформальной формулировкой теоремы Майхилла-Нероде.
AProgrammer

@AlextenBrink: это аккуратно. Я предполагаю, что константы в утверждении являются собственными значениями лапласиана автомата? Это было бы хорошим дополнением к ответам здесь.
Луи

@Louis: на самом деле, мы вообще не нашли ссылки на эту теорему, поэтому, если вы знаете больше об этом ... Также см .: cs.stackexchange.com/questions/1045/…
Alex ten Brink

37

Основываясь на ответе Дэйва, вот пошаговое «руководство» по использованию леммы прокачки.

Вспомните лемму прокачки (взято из ответа Дэйва, взято из Википедии):

Пусть обычный язык. Тогда существует целое число (зависящее только от ), такое, что каждая строка в длиной не менее ( называется «длиной накачки») может быть записана как (т. может быть делится на три подстроки), удовлетворяющих следующим условиям:Ln1LwLnnw=xyzw

  1. |y|1
  2. |xy|n и
  3. А «накачкой» еще в : для всех , . wLi0xyizL

Предположим, что вам дан какой-то язык и вы хотите показать, что он не является регулярным с помощью леммы прокачки. Доказательство выглядит так:L

  1. Предположим , что является регулярным.L
  2. Если это регулярно, то лемма о накачке говорит, что существует некоторое число которое является длиной накачки.n
  3. Выберите конкретное слово длина которого больше . Трудно понять, какое слово взять.wLn
  4. Рассмотрим ВСЕ способы разбиения на 3 части, , где и не пусто. Для каждого из этих способов, показать , что она не может быть накачан: всегда существует некоторый такое , что .ww=xyz|xy|nyi0xyizL
  5. Вывод: слово не может быть «накачано» (независимо от того, как мы разбиваем его наwxyz ), что противоречит лемме о накачке, т. Е. Наше предположение (шаг 1) неверно:L не является регулярным.

Прежде чем перейти к примеру, позвольте мне повторить Шаг 3 и Шаг 4 (именно здесь большинство людей ошибаются). На шаге 3 вы должны выбрать одно конкретное слово в L . запишите это явно, как «00001111» или « anbn ». Примеры для вещей, которые не являются определенным словом: « w » или «слово с префиксом 000».

С другой стороны, на шаге 4 вам нужно рассмотреть более одного случая. Например, если w=000111 недостаточно сказать x=00,y=01,z=00 , а затем достичь противоречия. Вы также должны проверить x=0,y=0,z=0111 и x=ϵ,y=000,z=111 и все другие возможные варианты.


Теперь давайте проделаем шаги и докажем, что L={0k12kk>0} не является регулярным.

  1. Предположим, что L регулярно.
  2. Пусть n будет длиной накачки, определенной леммой накачки.
  3. Пусть w=0n12n .
    (проверка здравомыслия: |w|>n мере необходимости. Почему это слово? другие слова могут работать так же хорошо. Требуется некоторый опыт, чтобы придумать правильное w ). Опять же, обратите внимание, что w - это конкретное слово: 0000n times11112n times .
  4. Теперь давайте начнем рассматривать различные случаи разбиения w на xyz с помощью |xy|n и |y|>0 . Так как |xy|<n независимо от того, как мы разделим w , x будет состоять только из 0, и y будет состоять из y . Предположим, что |x|=s и |y|=k . Мы должны рассмотреть все варианты, то есть все возможные s,k таких, чтоs0,k1 иs+kn . ДЛЯ ЭТОГОL доказательство для всех этих случаев одно и то же, но в целом оно может быть другим.
    возьмемi=0 и рассмотримxyiz=xz . это слово НЕ вL так как оно имеет вид0nk12n (независимо от того, чтоs иkбыли), и поскольку k1 , это слово отсутствует в L и мы получаем противоречие.
  5. Таким образом, наше предположение неверно, и L не является регулярным.

Клип на YouTube, который объясняет, как использовать лемму накачки в том же духе, можно найти здесь


1
Это н, что длина накачки в этом определении!
saadtaame

Основанием для этого является то, что любая строка, которая достаточно длинна, должна пройти цикл в автомате, и если вы пройдете этот цикл один раз, вы можете пройти его любое количество раз.
gnasher729

28

Из Википедии, язык прокачки для обычных языков выглядит следующим образом:

Пусть обычный язык. Тогда существует целое число p 1 (в зависимости только от L ), такое, что каждая строка w в L длиной не менее p ( p называется «длиной накачки») может быть записана как w = x y z (т. Е. W может разделить на три подстроки), удовлетворяя следующим условиям:Lp1LwLppw=xyzw

  1. |y|1
  2. и |xy|p
  3. для всех , х у я г L . y - подстрока, которую можно перекачать (удалить или повторить любое количество раз, а полученная строка всегда находится в L ). i0xyizL
    yL

(1) означает, что перекачиваемая петля y должна иметь длину не менее одной; (2) означает, что цикл должен происходить в пределах первых p символов. Нет ограничений по x и z.

Проще говоря, для любого регулярного языка L любое достаточно длинное слово можно разбить на 3 части. т.е. ш = х у г , таким образом, что все строки х у к г для к 0 также находятся в L .wLw=xyzxykzk0L

Теперь давайте рассмотрим пример . Пусть .L={(01)n2nn0}

Чтобы показать, что это не регулярно, вам нужно рассмотреть, как выглядят все разложения , так что можно определить все возможные вещи x, y и z, что x y z = ( 01 ) p 2 p (мы решили посмотреть на это конкретное слово длиной 3 p , где p - длина накачки). Нам нужно рассмотреть, где находится часть y строки. Он может пересекаться с первой частью и, следовательно, будет равен ( 01 ) k + 1 , ( 10 )w=xyzxyz=(01)p2p3ppy(01)k+1 ,1(01 ) k или0(10 ) k для некоторогоk0(не забывайте, что | y |1). Он может пересекаться со второй частью, что означает, чтоy= 2 k , для некоторогоk>0. Или он может перекрывать две части слова и будет иметь вид(01 ) k + 1 2 l ,(10 ) k(10)k+11(01)k0(10)kk0|y|1y=2kk>0(01)k+12l ,1(01 ) k 2 l или0(10 ) k 2 l , дляk0иl1.(10)k+12l1(01)k2l0(10)k2lk0l1

Теперь прокачайте каждое из них, чтобы получить противоречие, которое будет словом не на вашем языке. Например, если мы возьмем , лемма прокачки говорит, например, что x y 2 z = x 0 ( 10 ) k 2 l 0 ( 10 ) k 2 l z должно быть в языка, при соответствующем выборе х и г . Но это слово не может быть в языке, так как 2 стоит перед 1 .y=0(10)k2lxy2z=x0(10)k2l0(10)k2lzxz21

В других случаях число будет больше, чем число 2 или наоборот, или приведет к тому, что слова не будут иметь структуру ( 01 ) n 2 n , например, имея два 0 подряд.(01)2(01)n2n0

Не забывай это . Здесь полезно сократить доказательство: многие из приведенных выше разложений невозможны, поскольку они могут сделать часть z слишком длинной.|xy|pz

Каждый из приведенных выше случаев должен приводить к такому противоречию, которое тогда будет противоречить лемме о накачке. Вуаля! Язык не будет регулярным.


|xy|p

@ Жиль: Я даже не уверен, что означает добавленное вами предложение.
Дейв Кларк

kz

kl

1
(01)2p22py2

14

LΣ

SL(z)=n0|LΣn|zn

L

Следующее утверждение верно [ FlSe09 , p52]:

LREGSL rational

SL(z)=P(z)Q(z)P,Q

SL

Пример. Рассмотрим язык правильно вложенных слов в скобках, т.е. язык Дейка . Генерируется однозначной грамматикой

S[S]Sε

который можно перевести в уравнение

S(z)=z2S2(z)+1

одно решение (одно со всеми положительными коэффициентами) из которых

S(z)=114z22z2

SL=SS


  1. Доказательство утверждения для регулярных языков работает через грамматики и немедленно переходит к линейным грамматикам (коммутативность умножения).

  [FlSe09] Аналитическая комбинаторика П. Флайолета и Р. Седжвика (2009) [Kuic70] Об энтропии контекстно-свободных языков . У. Куйч (1970)
  


13

L={(01)m2mm0}

Итак, вы думаете, лемма прокачки выглядит сложной? Не беспокойся Вот немного другой подход, который также скрыт в ответе @ Romuald. (Тест: где?)

Давайте начнем с того, что помним, что каждый регулярный язык принимается детерминированным автоматом конечных состояний (DFA). DFA - это конечный ориентированный граф, в котором каждая вершина имеет ровно одно ребро на каждую букву в алфавите. Строки дают вам обход в графе, основанном на вершине, помеченной как «начало», и DFA принимает, если этот обход заканчивается в вершине, помеченной как «принять». (Вершины называются «состояниями», потому что разные области математики любят составлять свою собственную терминологию для одного и того же.)

abcacbc

LabcacbcL

abcacbcm{(01)i:0im+1}a=(01)pb=(01)qpqa2pb2p

Приятно то, что пример действительно является шаблоном для доказательства того, что языки не являются регулярными:

  • {ai:iN}tiaitiaitjij
  • ai

Есть и другие приемы, но этот поможет легко справиться с большинством домашних заданий.

Редактировать: более ранняя версия имела некоторое обсуждение того, как эта идея связана с леммой прокачки.


Я не думаю, что воспроизведение доказательства леммы прокачки в целом полезно, но YMMV. Понимание доказательства хорошо в любом случае; это непосредственно связано с рядом замыканий и другими интересными свойствами конечных автоматов и регулярных языков. Однако я категорически не согласен с последним предложением: теория автоматов совсем не скучная и, конечно, не самая скучная часть теоретических занятий.
Рафаэль

@ Луис В своем ответе, как вы пришли с этим утверждением we see that a2p is in the language and b2p is not, so this language can't be regular.в прошлом. Пожалуйста, не могли бы вы привести пример
Химаншу

abq12pq2ab

7

После ответа здесь я опишу метод доказательства нерегулярности, основанный на колмогоровской сложности.

Этот подход обсуждается в статье «Новый подход к теории формального языка по колмогоровской сложности» , Ming Li и Paul MB Vitanyi (см. Раздел 3.1).

K(x)xMM(ϵ)=x

LΣcLxΣynthLx={yΣ|xyL}K(y)O(logn)+c

xΣnthLx

  • L
  • x
  • n

xxLnlogny

LxLxΣL

L={1p|p is prime}L={0n1n|n0}

x{0,1}yixithLxy10i=1ixx=0in=1i0:K(y10i)cy10i=1i1ixx=0nnK(0n)logny1x=1nK(1n)<cn>2c


7

{σ}AN

L(A)={σn:nA}.

AN

  1. L(A)

  2. L(A)

  3. n0,m1nn0nAn+mAA

  4. ai=1iA0.a0a1a2

  5. iAxi

ρρ

ANL(A)

  1. ρ=limn|A{1,,n}|nA

  2. ρ=0A

  3. ρ=1AA¯

L({2n:n0})


4

Класс регулярных языков замыкается различными операциями замыкания, такими как объединение, пересечение, дополнение, гомоморфизм, регулярное замещение, обратный гомоморфизм и другие. Это может быть использовано для доказательства того, что данный язык не является регулярным путем сокращения до языка, который, как известно, является нерегулярным.

{anbn:n0}{w{a,b}:#a(w)=#b(w)}ab

L={w{a,b}:#a(w)=#b(w)}LabLab={anbn:n0}

L={(0+1)n2(0+1)n:n0}

hh(0)=0h(1)=1h(2)=ϵLh(L021)={0n1n:n0}

L={0n10n:n0}

Пусть - гомоморфизм, заданный , , . Если бы были регулярными, то и бы, но это только язык из предыдущего примера.kk(0)=0k(1)=0k(2)=1Lk1(L)L


3

Используйте теорию Михилла – Нерода.

Пусть будет языком. Мы говорим , что два слова являются неэквивалентных по модулю (или: по отношению к ) , если существует слово такое , что именно один из в . В любом DFA для , (упражнение). Это предполагает следующий критерий:Lx,yLLzxz,yzLLδ(q0,x)δ(q0,y)

Пусть будет языком. Предположим, что существует бесконечное множество попарно неэквивалентных слов (то есть бесконечное множество такое, что любые два неравных неэквивалентны по модулю ). Тогда не является регулярным.LSx,ySLL

Вот простой пример применения этого критерия:

Язык не является регулярным.L={anbn:n0}

Доказательство. Пусть . Покажем , что любые два разных слова в неэквивалентны по модулю . Действительно, пусть , где . Тогда , но .S={an:n0}SLai,ajSijaibiLaibjL

Важной особенностью этого метода является то, что он гарантированно будет успешным: если не является регулярным, то существует бесконечное множество попарно неэквивалентных слов. Это является следствием теоремы Майхилла – Нерода . Вкратце, эквивалентность по модулю (отрицание неэквивалентности по модулю определенное выше) является отношением эквивалентности, и язык регулярен тогда и только тогда, когда число классов эквивалентности по модулю конечно. Если не является регулярным, взятие одного слова из каждого класса эквивалентности составило бы бесконечный набор неэквивалентных слов.LLLLLL


1

С учетом языка , для каждой строки существует множество строк таких , что . Каждый такой набор может использоваться как состояние в конечном автомате.LxyxyL

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

В качестве примера, пусть . Учитывая для некоторого , единственная строка такая, что является . Таким образом, для каждого у нас есть различное множество, что означает, что не является регулярным.L=anbn:n0x=anbn1yxyLy=bn1nL

Таким образом, в общем, если вы найдете бесконечный набор строк такой, что каждый дает различный набор то язык не может быть распознан конечным автоматом и, следовательно, не является регулярным.xx{y:xyL}


Разве это не просто Myhill-Nerode?
Дэвид Ричерби
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.