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


48

Існує багато методів, щоб довести, що мова не є регулярною , але що мені потрібно зробити, щоб довести, що якась мова є регулярною?

Наприклад, якщо мені дано, що є регулярним, як я можу довести, що наступний є регулярним?L 'LL′

L′:={w∈L:uv=w for u∈Σ∗∖L and v∈Σ+}

Чи можу я намалювати недетермінований кінцевий автомат, щоб довести це?


1
є друкарська помилка у визначенні вашого , відредагуйте його, щоб виправити. L′
— Ран Г.

2
"Малювання" - це не доказ; ви повинні дати NFA і довести, що він приймає мову.
— Рафаель

Я думаю, що визначення мови досі не має сенсу ...
— hugomg

2
у будь-якому разі, конкретна мова не має значення, якщо питання "чи можу я зробити НФА, щоб довести, що це регулярно". @corium, чи можемо ми відредагувати питання так, щоб відобразити більш загальне запитання: "як довести, що конкретна регулярна"? L
— Ран Г.

Відповіді:


48

Так, якщо ви можете придумати що-небудь із наступного:

для деякої мови , то регулярна. Є більш еквівалентні моделі , але перераховані вище є найбільш поширеними.LLL

Також є корисні властивості поза «обчислювальним» світом. також регулярно, якщоL

  • це скінченно,
  • Ви можете побудувати його, виконавши певні операції на звичайних мовах, і ці операції закриті для звичайних мов , таких як

    • перехрестя,
    • доповнення,
    • гомоморфізм,
    • розворот,
    • лівий або правий коефіцієнт,
    • регулярна трансдукція

    і більше , або

  • використовуючи теорему Міхілла-Нерода, якщо число класів еквівалентності для є кінцевим.L

У наведеному прикладі ми маємо деякий (звичайний) багаж як основу і хочемо сказати щось про мову похідну від нього. Дотримуючись першого підходу - побудуйте відповідну модель для - ми можемо припустити, яку еквівалентну модель для ми так хочемо; це, звичайно, залишатиметься абстрактним, оскільки невідомий. У другому підході ми можемо використовувати безпосередньо і застосувати до нього властивості закриття, щоб дійти до опису для .L ′ L ′ L L L L ′LL′L′LLLL′


4
Можливо, варто також зазначити, що доведення мови є обмеженим, щоб показати, що це регулярно. Це може бути корисним, особливо в неконструктивних доказів по справах.
— Patrick87

2
regexp, як це знайдено в мовах програмування, може зробити набагато більше, ніж звичайні мови. Вам доведеться обмежитися "класичними" конструкціями.
— Девід Льюїс

4
@DavidLewis: На цьому сайті ви можете припустити, що під "регулярним вираженням" розуміється класичне поняття.
— Рафаель

@DavidLewis Я погоджуюся, слід уникати "повторного" в контексті теорії, щоб уникнути плутанини.
— Рафаель

Зауважте, що для будь-якої з перших чотирьох куль вам знадобиться доказ, що свідчить про те, що ваше представлення справді правильне.
— Рафаель

10

Елементарні методи

  1. Кінцеві автомати (можливо, недетерміновані, з порожніми переходами).
  2. Регулярні вирази.
  3. Праві (або зліва, але не обидва) лінійні рівняння, як де і є правильними.K LX=KX+LKL
  4. Регулярні (3 тип) граматики.
  5. Операції із збереженням регулярних мов (булеві операції, продукт, зірка, переміщення, морфізми, обертання морфізмів, перетворення тощо)
  6. Розпізнається кінцевим моноїдом.

Логічні методи (часто використовуються в офіційній верифікації)

  1. Монадична логіка другого порядку (теорема Бючі).
  2. Лінійна часова логіка (теорема Кампа).
  3. Теорема дерева Рабіна (логіка Монадика другого порядку з двома наступниками). Дуже потужний.

Передові методи

  1. Витончені накачані леми. Див., Наприклад,
    [1] Дж. Джефф, необхідна і достатня насосна лема для звичайних мов, Sigact News - SIGACT 10 (1978) 48-49.
    [2] А. Еренфехт, Р. Парих, Г. Розенберг, Насосні леми для регулярних множин, SIAM J. Comput. 10 (1981), 536–541.
    [3] S. Varricchio, Умова перекачування для регулярних наборів, SIAM J. Comput. 26 (1997) 764-771.

  2. Ну квазі замовлення. Див.
    [4] У. Бюхер, А. Еренфехт, Д. Гауслер, Про загальні регулятори, породжені дериваційними відносинами, Теор. Обчислення. Наук. 40 (1985) 131–148.
    [5] М. Кунц, Регулярні рішення нерівностей мови та квазіпорядки .

  3. Підтримка -раціональних рядів.N

  4. Алгебраїчні методи, засновані на трансдукції (див. Також Операції зі збереженням звичайних мов ).


4

Відповідь Ran G. дає досить широкий перелік еквівалентних моделей, які можна використовувати для визначення звичайних мов (і список продовжується, двосторонні автомати, логіка MSO, але це охоплене посиланням у розділі "більш еквівалентні моделі" '). І як наголошує Рафаель, нам потрібен аргумент, щоб переконати аудиторію, що обране представництво справді правильне.

Переглядаючи питання, він додає "Наприклад ". Це означає, що ми повинні дати дійсну конструкцію, яка, з огляду на будь-яку з перерахованих вище моделей, ми вважаємо, що вказана мова , перетворює цю модель в одну для . Це, як правило, буде однотипним моделем, але цього не потрібно: ми можемо, наприклад, почати з детермінованої FSA для і закінчити з недетермінованою для .L L ′ L L ′…LL′LL′

Сюди входить можливість використовувати операції закриття: в явно заданій операції в прикладі маємо .L′=(Σ∗∖L)⋅Σ∗

Отже, моя думка полягає в тому, що відповідь чудова, але нам слід додати "від до конструкцію ", коли не будувати конкретної мови з нуля.L 'LL′


1
Я не зовсім впевнений, у що ви потрапляєте. Якщо у мене є якась модель для , я можу перетворити її в будь-яку з інших еквівалентних. L′
— Рафаель

@Raphael Вибачте, я зробив свою думку. Раніше відповіді, здається, пояснюють, що ми можемо побудувати опис мови (як автомат, операції тощо). Я згоден. Однак питання, схоже, стосується властивостей закриття, див. Наведений приклад. Цей пункт я пропускаю в інших відповідях: щоб довести властивість закриття, ви вважаєте, що у вас є опис, і побудувати нову.
— Гендрик Ян

1
L′

1
L′LL′LLL′LL′L′

1
О, добре. Насправді я б скоріше відредагував це питання та видалив частину "для прикладу", зробивши це питання загальнішим та посиланням на майбутні подібні запитання .. (:
— Ran G.


4

L1S⁡L2={x1y1…xnyn∈Σ∗:x1…xn∈L1,y1…yn∈L2}
Ai=⟨Σ,Qi,Fi,δi,q0i⟩Lii=1,2⟨Σ,Q,F,δ,q0⟩
  • Q1×Q2×{1,2}xiyi
  • q0=⟨q01,q02,1⟩
  • F=F1×F2×{1}
  • δ(⟨q1,q2,1⟩,σ)=⟨δ1(q1,σ),q2,2⟩δ(⟨q1,q2,2⟩,σ)=⟨q1,δ2(q2,σ),1⟩

LR={wR:w∈Σ∗}.
(w1…wn)R=wn…w1L⟨Σ,Q,F,δ,q0⟩⟨Σ,Q′,F′,δ′,q0′⟩
  • Q′=Q∪{q0′}
  • q0′
  • q0
  • δ′(q0′,ϵ)=Fq∈Qσ∈Σδ(q′,σ)={q:δ(q,σ)=q′}

q0′


R(L)={yx∈Σ∗:xy∈L}.
L⟨Σ,Q,F,δ,q0⟩⟨Σ,Q′,F′,δ′,q0′⟩q=δ(q0,x)δ(q,y)∈Fδ(q0,x)=qyx
  • Q′={q0′}∪Q×Q×{1,2}q0′⟨q,qcurr,s⟩qqcurrsyx
  • F′={⟨q,q,2⟩:q∈Q}δ(q0,x)=q
  • δ′(q0′,ϵ)={⟨q,q,1⟩:q∈Q}q
  • δ′(⟨q,qcurr,s⟩,σ)=⟨q,δ(qcurr,σ),s⟩q,qcurr∈Qs∈{1,2}
  • δ′(⟨q,qf,1⟩,ϵ)=⟨q,q0,2⟩q∈Qqf∈Fyxy

Ek(L)={x∈Σ∗: there exists y∈L whose edit distance from x is at most k}.
⟨Σ,Q,F,δ,q0⟩L⟨Σ,Q′,F′,δ′,q0′⟩Ek(L)
  • Q′=Q×{0,…,k}
  • q0′=⟨q0,0⟩
  • F′=F×{0,…,k}
  • q,σ,i⟨δ(q,σ),i⟩∈δ′(⟨q,i⟩,σ)
  • ⟨q,i+1⟩∈δ′(⟨q,i⟩,σ)q,σ,ii<k
  • ⟨δ(q,σ),i+1⟩∈δ′(⟨q,i⟩,ϵ)q,σ,ii<k
  • ⟨δ(q,σ),i+1⟩∈δ′(⟨q,i⟩,τ)q,σ,τ,ii<k

3

Мова є звичайним, якщо ви можете написати сканер, який визначає довільні рядки, належать вони чи ні до мови, використовуючи не більше фіксованого обсягу пам'яті, тобто розпізнавання може здійснюватися в просторі O (1) .


O (1) простір, ти маєш на увазі? У будь-якому випадку, це покривається тим, що DFA вистачає; можливо, варто чітко зазначити цю еквівалентність з точки зору програмування.
— Рафаель

Так, це просто інша перспектива.
— reinierpost

3

Регулярне перетворення виразів - один із способів довести закриття під певними операціями. Два найпростіші приклади - це закриття під час розвороту та закриття під гомоморфізмом .

rLLRL

  • ϵR=ϵσR=σ∅R=∅
  • (r1+r2)R=(r1R+r2R)(r∗)R=(rR)∗(r1r2)R=r2Rr1R

(r1r2)R=r2Rr1R(0∗1∗)R=1∗0∗rRLR

h:Σ→Δ∗rLh(L)σrh(σ)


0

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


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