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


48

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

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

L:={wL: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 LLLLLLL


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 LLLL

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

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


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

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

1
L

1
LLLLLLLLL

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


4

L1SL2={x1y1xnynΣ:x1xnL1,y1ynL2}
Ai=Σ,Qi,Fi,δi,q0iLii=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Σ}.
(w1wn)R=wnw1LΣ,Q,F,δ,q0Σ,Q,F,δ,q0
  • Q=Q{q0}
  • q0
  • q0
  • δ(q0,ϵ)=FqQσΣδ(q,σ)={q:δ(q,σ)=q}

q0


R(L)={yxΣ:xyL}.
LΣ,Q,F,δ,q0Σ,Q,F,δ,q0q=δ(q0,x)δ(q,y)Fδ(q0,x)=qyx
  • Q={q0}Q×Q×{1,2}q0q,qcurr,sqqcurrsyx
  • F={q,q,2:qQ}δ(q0,x)=q
  • δ(q0,ϵ)={q,q,1:qQ}q
  • δ(q,qcurr,s,σ)=q,δ(qcurr,σ),sq,qcurrQs{1,2}
  • δ(q,qf,1,ϵ)=q,q0,2qQqfFyxy

Ek(L)={xΣ: there exists yL whose edit distance from x is at most k}.
Σ,Q,F,δ,q0LΣ,Q,F,δ,q0Ek(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(01)R=10rRLR

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


0

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


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