Як довести, що мова не є регулярною?


75

Ми дізналися про клас регулярних мов . Він характеризується будь-яким одним поняттям серед регулярних виразів, кінцевих автоматів та ліволінійних граматик, тому легко показати, що дана мова є регулярною.REG

Як я показую протилежне? Мій ТА твердо переконаний, що для цього нам доведеться показати для всіх регулярних виразів (або для всіх кінцевих автоматів, або для всіх ліволінійних граматик), що вони не можуть описати мову, що існує. Це здається великим завданням!

Я читав про деякі насосні леми, але це виглядає дуже складно.

Це покликане бути еталонним питанням, що збирає звичні методи доказування та приклади застосування. Дивіться тут те саме запитання про без контекстних мов.

Відповіді:


60

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

  1. Лемма накачування, як показано у відповіді Дейва ;
  2. Властивості закриття регулярних мов (задані операції, конкатенація, зірка Клінова, дзеркало, гомоморфізми);
  3. У звичайній мові є кінцева кількість класу еквівалентності префіксів, теорема Міхілла-Нерода .

Щоб довести, що мова не є регулярною, використовуючи властивості закриття, методика полягає в поєднанні з регулярними мовами операціями, що зберігають регулярність, щоб отримати мову, яка, як відомо, не є регулярною, наприклад, архетипічна мова . Наприклад, нехай . Нехай є регулярним, як і звичайні мови закриті під комплементарності так L «s доповнення L з . Тепер візьмемо перетин L з і в б , регулярної, ми отримуємо ILLI={anbn|nN}L={apbq|pq}LLLcLcabI що не є регулярним.

Теорема Міхілла-Нерода може бути використана для доведення того, що не є регулярним. Для p 0 , I / a p = { a r b r b p | г N } = Я . { b p } . Усі класи різні, і є незліченна безмежність таких класів. Оскільки звичайна мова повинна мати обмежену кількість класів, я не є регулярною.Ip0I/ap={arbrbp|rN}=I.{bp}I


3
Не знав про теорему Міхіл-Нерода, класно!
Даніїл

У Вікіпедії також є розділ про кількість слів у звичайній мові: якщо ви можете довести, що ваша мова не відповідає характеристиці, то ваша мова не є регулярною: en.wikipedia.org/wiki/…
Alex ten Brink

@Daniil, регулярні вирази не можна вважати , мені здається популярною неформальною формуляцією теореми Міхілла-Нерода.
AProgrammer

@AlextenBrink: Це акуратно. Я припускаю, що константи у викладі є власними значеннями лаплаціанського автомата? Це було б приємним доповненням до відповідей тут.
Луї

@Louis: насправді ми взагалі не знайшли посилання на цю теорему, тому, якщо ви знаєте більше про неї ... Також дивіться: cs.stackexchange.com/questions/1045/…
Алекс десять Бринк

37

Виходячи з відповіді Дейва, ось покрокове "посібник" по використанню насосної леми.

Нагадаємо, накачана лема (взята з відповіді Дейва, взята з Вікіпедії):

Нехай L - звичайна мова. Тоді існує ціле число n1 ( в залежності тільки від L ) таке , що кожен рядок w в L довжиною по щонайменше n ( n називається «довжиною накачування») можна записати в вигляді w=xyz (т, w банки розділити на три підрядки), що відповідають наступним умовам:

  1. |y|1
  2. |xy|n і
  3. А «накачуванням» w ще перебуває в L : для всіх i0 , xyizL .

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

  1. Припустимо , що L є регулярним.
  2. Якщо вона регулярна, то накачана лема говорить про те, що існує деяка кількість n яка є довжиною накачування.
  3. Виберіть конкретне слово wL довжиною більше n . Важка частина - знати, яке слово взяти.
  4. Розглянемо ВСІ способи розподілу w на 3 частини, w=xyz , з |xy|n і y не порожні. Для кожного з цих способів, показати , що вона не може бути створений відповідний: завжди існує деякий i0 таке , що xyizL .
  5. Зробіть висновок: слово w не може бути «накачане» (як би ми не розділили його на xyz ) всупереч леммі накачки, тобто наше припущення (крок 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 . Давайте припустимо |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

28

З Вікіпедії викачаною мовою для звичайних мов є наступна:

Нехай - звичайна мова. Тоді існує ціле число P 1 ( в залежності тільки від L ) такого , що кожна рядок ш в L довжиною по щонайменше , р ( р називається «довжиною накачування») можна записати в вигляді ш = х у г (тобто, ш банки розділити на три підрядки), що відповідають наступним умовам: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 ) +(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 має бути в мови, для відповідного вибору x і 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
Жиль

@Gilles: Я навіть не впевнений, що означає додане вами речення.
Дейв Кларк

@Gilles: Я думаю, що всі розклади можливі, тільки що буде обмежено. Я не впевнений, що це стосується довжини z . kz
Дейв Кларк

Да! Я це зараз бачу. Дякую. Однак це не виключає жодної із форм декомпозиції, згаданої у відповіді; це обмежує лише те, які значення і l я можу прийняти. kl
Дейв Кларк

1
Обсяг редагування, який було зроблено для відповіді на таке просте запитання, змушує мене замислитись, чому всі вчать накачувати лему як "спосіб" довести нерегулярність. З цікавості, чому б просто не взяти свою струну на щось на зразок ? Нагасна лема говорить вам, що у y немає 2 с у ній, звідки протиріччя більш прямолінійне. (01)2p22py2
Луї

14

Для даної мови , нехайLΣ

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

(Звичайна) виробляє функція з , тобто його послідовність імпульсів слів в довжину.L

Наступне твердження містить [ FlSe09 , p52]:

LREGSL rational

Тобто зполіномамиP,Q.SL(z)=P(z)Q(z)P,Q

Отже, будь-яка мова, функція генерації якої не є раціональною, не є регулярною. На жаль, всі лінійні мови також мають раціональні функції генерування¹, тому цей метод не працюватиме для більш простих нестандартних мов. Ще один недолік полягає в тому, що отримати (і показати, що це не раціонально) може бути важким.SL

Приклад: Розгляньте мову правильно вкладених дужок слів, тобто мову Dyck . Він породжений однозначною граматикою

S[S]Sε

які можна перевести у рівняння

S(z)=z2S2(z)+1

одне рішення (те, що має всі позитивні коефіцієнти), яке

.S(z)=114z22z2

Оскільки [ Kuic70 ] і S не раціонально, мова Діка не є регулярною.SL=SS


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

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


13

Це розгорнута версія моєї відповіді звідси. Використання насосної леми для доведення мови не є регулярним,L={(01)m2mm0} оскільки це повинно бути еталонним питанням.

Отже, ви вважаєте, що накачана лема виглядає складною? Не хвилюйся. Ось дещо інший підхід, який прихований і у відповіді @ Romuald. (Вікторина: куди?)

Почнемо з пам’яті, що кожна звичайна мова приймається детермінованим автоматичним кінцевим станом (DFA). DFA - це кінцево-спрямований графік, де кожна вершина має рівно один край для кожної літери алфавіту. Рядки дають вам пройтися по графіку на основі вершини з позначкою "початок", і DFA приймає, якщо ця прогулянка закінчується вершиною, позначеною "прийняти". (Вершини називають "станами", тому що різні області математики люблять складати власну термінологію для одного і того ж.)

З допомогою цього способу мислення, то зрозуміло , що: Якщо рядки і б приводу DFA в тому ж стані, то для будь-якої іншої рядки з , з і б з приводу DFA в тому ж стані. abcacbcЧому? Тому що точка констатування прогулянки та рядок, що визначає її, визначають ціль повністю.

Вміщені трохи по- іншому: якщо є регулярним і натягує і б вбити розпізнає автомат в тому ж стан, то для всіх рядків з , або з і б з обома в L або ні їсти.LabcacbcL

Ми можемо використовувати це , щоб показати мови не є регулярними, представляючи це , а потім придумують і б водіння DFA в тому ж стані, і з тим щоб з в мові та б з ні. Візьміть мову прикладу з відповіді @ Дейва. Уявіть, що це регулярно, тому воно має певне розпізнавання DFA з m станами. Принцип Голубного отвору говорить, що принаймні два з { ( 01 ) i : 0 i m + 1 } надсилають DFA в той самий стан, скажімо a = ( 01abcacbcm{(01)i:0im+1} і b = ( 01 ) q . Так як р д , ми бачимощо 2 р в мові і Ь 2 р не є, такця мова не може бути регулярним.a=(01)pb=(01)qpqa2pb2p

Приємно те, що приклад справді є шаблоном доведення того, що мови не є регулярними:

  • Знайдіть сімейство рядків із властивістю того, що кожен з них має "хвіст" t i, щоб a i t i був у мові, а a i t j , бо i j не є.{ai:iN}tiaitiaitjij
  • Застосуйте аргумент вище дослівно. (Це допускається, так як завжди є досить я , щоб ви викличте Приймальний принцип.)ai

Є й інші хитрощі, але ця допоможе легко працювати над більшістю проблем із домашнім завданням.

Редагувати: Більш рання версія обговорювала, як ця ідея стосується накачувальної леми.


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

@Louis У своїй відповіді, як ви придумали we see that a2p is in the language and b2p is not, so this language can't be regular.останнє твердження . Надайте, будь ласка, приклад
Хіманшу

@Himanshu і b приводять вас в один і той же стан q 1 . Таким чином, все, що ви прочитали після цього ( 2 p тут), приведе вас до того ж стану q 2 , незалежно від того, з чого ви починали - a або b . abq12pq2ab
Ал.Г.

7

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

Такий підхід обговорюється в «Новому підході до теорії формальної мови через складність Колмогорова» , Мін Лі та Павла М. Б. Вітанія (див. Розділ 3.1).

Нехай позначає складність Колмогорова рядка x , тобто довжину найкоротшого кодування машини Тюрінга M , таку, що M ( ϵ ) = x (буде виконано будь-яке звичайне визначення). Потім можна використовувати таку лему для доказу невідповідності:K(x)xMM(ϵ)=x

KC-регулярність : Нехай є звичайною мовою, тоді існує константа c, яка залежить лише від L , така що для всіх x Σ , якщо y - n t h рядка (відносно лексикографічного впорядкування ) в L x = { y Σ | x y L } , тоді K ( y ) O ( log n )LΣcLxΣynthLx={yΣ|xyL} .K(y)O(logn)+c

Можна зрозуміти (і довести) вищевказану лему так, для будь-якого для опису n t h рядка в L x потрібно вказати:xΣnthLx

  • Автомат, який приймає L
  • Стан в автоматі після обробки префікса x
  • Індекс n

Так як нам потрібно тільки пам'ятати , стан після обробки , а не х сам, ми можемо приховати цей фактор в постійній залежності від L . Індекс n вимагає журналу n бітів для опису, і ми отримуємо вищезазначений результат (для повноти потрібно додати конкретні інструкції, необхідні для генерації y , але це лише додає постійний коефіцієнт до остаточного опису).xxLnlogny

Ця лема показує, як пов'язати складність Колмогорова всіх рядків, які є членами для деякої регулярної мови L і x Σ . Щоб показати нерегулярність, можна припустити, що L є регулярним, і довести, що межі є занадто обмежуючими (наприклад, обмежена складність Колмогрова для нескінченного набору рядків).LxLxΣL

Відповідь, зв'язана вище, містить приклад того, як використовувати цю лему для показу не є регулярним, ще кілька прикладів наведено в роботі. Для повноти ми покажемо тут, як довести L = { 0 n 1 n | n 0 } не є регулярним.L={1p|p is prime}L={0n1n|n0}

З огляду на деякий , ми позначимо через у й я я ' т ч слово в L х . Зауважимо, що y 0 i 1 = 1 i . Використовуючи вищевказану лему, орієнтуючись на префікси x форми x = 0 i та фіксуючи n = 1 , отримуємо i 0 : K ( y 0 i 1x{0,1}yixithLxy10i=1ixx=0in=1 . Оскільки y 0 i 1 = 1 i , це означає, що ми можемо зв'язати складність Колмогорова всіх рядків форми 1 i постійною, яка, очевидно, помилкова. Варто зазначити, що ми могли дослідити один x , наприклад x = 0 n для досить великого n, який задовольняє K ( 0 n ) log n (ми починаємо з префікса високої складності). Оскільки y x 1 = 1 n , отримуємоi0:K(y10i)cy10i=1i1ixx=0nnK(0n)logny1x=1n , протиріччя (припустимо, n > 2 c ).K(1n)<cn>2c


7

Що стосується одинарних мов (мови над алфавітом розміром 1), існує простий критерій. Зафіксуємо алфавіт , а для A N визначимо L ( A ) = { σ n : n A } .{σ}AN

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

Теорема. Нехай . Наступні:AN

  1. регулярний.L(A)

  2. без контексту.L(A)

  3. Там існують , що для всіх п п 0 , то справедливо , що п тоді і тільки тоді п + т . (Ми говоримо, що з часом A є періодичним .)n0,m1nn0nAn+mAA

  4. Нехай я = 1 я . Тоді 0. a 0 a 1 a 2 раціонально.ai=1iA0.a0a1a2

  5. Функція, що генерує є раціональною функцією.iAxi

Теорему можна довести багатьма способами, наприклад, використовуючи насосну лему, теорію Міхілла-Нерода, теорему Париха, структуру ДФА на одинарних мовах (вони схожі на " ", як у ρ алгоритмі Полларда ) тощо . Ось корисний слід.ρρ

Наслідок Нехай , і припустимо, що L ( A ) регулярний.ANL(A)

  1. Межа існує. (Цеасимптотична щільністьвідА.)ρ=limn|A{1,,n}|nA

  2. Якщо то A кінцевий.ρ=0A

  3. Якщо то A - кофініт (тобто ¯ A - кінцевий).ρ=1AA¯

Наприклад, мова не є регулярною, оскільки множина втрачає асимптотичну щільність, але нескінченна.L({2n:n0})


4

Клас регулярних мов підпадає під різні операції закриття, такі як об'єднання, перехрестя, доповнення, гомоморфізм, регулярна підміна, зворотний гомоморфізм тощо. Це можна використати для доведення того, що дана мова не є регулярною через скорочення до мови, яка, як відомо, є нерегулярною.

Як дуже простий приклад, припустимо, що ми знаємо, що мова {anbn:n0} не є регулярною. Тоді ми можемо довести, що мова {w{a,b}:#a(w)=#b(w)} (мова всіх слів з однаковою кількістю a s і b s) не є регулярною, як слід:

Припустимо, що L={w{a,b}:#a(w)=#b(w)} були регулярними. Тоді Lab також буде регулярним. Але Lab={anbn:n0} , що, як відомо, не є регулярним.

Ось більш складний приклад. Покажемо, що мова L={(0+1)n2(0+1)n:n0} не є регулярною.

Нехай h - відображення гомоморфізму, задане h(0)=0 , h(1)=1 , h(2)=ϵ . Якщо L були регулярними , то так би наступне формулювання: h(L021)={0n1n:n0} . Однак ми знаємо, що остання не є регулярною.

Нарешті, ось приклад використання зворотного гомоморфізму. Покажемо, що мова L={0n10n:n0} не є регулярною.

Нехай k - гомоморфізм, заданий k(0)=0 , k(1)=0 , k(2)=1 . Якби L були регулярними, то так би k1(L) , але це лише мова L з попереднього прикладу.


3

Використовуйте теорію Міхілла-Нерода.

Нехай L - мова. Ми говоримо , що два слово x,y є нееквівалентним по модулю L (або: по відношенню до L ) , якщо існує слово z таке , що саме один з xz,yz в L . У будь-якому DFA для L , δ(q0,x)δ(q0,y) (вправа). Це означає наступний критерій:

Нехай L - мова. Припустимо, існує нескінченна множина парних нееквівалентних слів (тобто нескінченна множина S така, що будь-які два нерівні x,yS є нееквівалентним модулем L ). Тоді L не є регулярним.

Ось простий приклад застосування цього критерію:

Мова L={anbn:n0} не є регулярною.

Доказ. Нехай S={an:n0} . Покажемо , що будь-які два різних слова в S нееквівалентний по модулю L . Дійсно, нехай ai,ajS , де ij . Тоді я б яL , але а я б JL .aibiLaibjL

Важливою особливістю цього методу є те, що він гарантується успіхом: якщо L не є регулярним, то існує нескінченна безліч парних нееквівалентних слів. Це є наслідком теореми Міхілла-Нерода . Якщо коротко, то по модулю еквівалентності L (заперечення нееквівалентності по модулю L , визначений вище) є відношенням еквівалентності, і мова L є регулярним тоді і тільки тоді число класу еквівалентності по модулю еквівалентності L звичайно. Якщо L не є регулярним, виведення одного слова з кожного класу еквівалентності становитиме нескінченний набір нееквівалентних слів.


1

З урахуванням мови L , для кожного рядка x існує безліч рядків y таких , що xyL . Кожен такий набір може бути використаний як стан у машині стану.

Все, що вам потрібно зробити - це показати, що кількість таких наборів не є кінцевою.

Як приклад, нехай L=anbn:n0 . З огляду на x=anb для деякого n1 , єдиний рядок y такий, що xyL є y=bn1 . Отже, для кожного n ми маємо різний набір, що означає, що L не є регулярним.

Отже, якщо ви знайдете нескінченний набір рядків x таким, що кожен x дає інший набір {y:xyL} мова не може бути розпізнана машиною з кінцевим станом, і тому не є регулярною.


Хіба це не просто Міхіл-Нерод?
Девід Річербі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.