Чи містить дана звичайна мова нескінченна підмножина без префіксу?


11

Набір слів над обмеженим алфавітом не містить префіксів, якщо немає двох чітких слів, де одне є префіксом іншого.

Питання:

У чому полягає складність перевірки, чи звичайна мова, що подається як NFA, містить нескінченну підмножину без префікса?

Відповідь (завдяки Михайлу Рудому, тут нижче) : Це можна зробити за багаточлен, і я думаю, навіть у NL.

Перефразовуючи відповідь Михайла, нехай буде вхідним NFA у нормальній формі (відсутність переходів епсілона, обрізка), і нехай (відповідно ) бути мовою, отриманою, маючи стан як початковий стан і \ {r \} як кінцевий стан (відповідно стан p як первісний, а множину R як остаточну). Для слова u нехай u ^ \ omega - це нескінченне слово, отримане повторенням u .(Σ,q0,F,δ)L[p,r]L[p,R]p{r}pRuuωu

Наступні:

  1. Мова L[q0,F] містить нескінченну множину префіксів.
  2. qQ ,uL[q,q]{ε} vL[q,F] так щоv не є префіксомuω .
  3. qQ L[q,q]{ε} uL[q,q] vL[q,F] так щоv не є префіксомuω .

Доказ:

3 2 тривіальний.

Для 2 1 достатньо бачити, що для будь-якого wL[q0,q] нас є те, що w(u|v|)v - нескінченна підмножина без префіксу L[q0,F] .

Нарешті, 1 3 - доказ «правильності» у відповіді Михайла.

Відповіді:


7

Вашу проблему можна вирішити за многочлен.

Для початку перетворіть задану NFA в еквівалентну NFA з такими додатковими властивостями:

  • Епсилонних переходів немає
  • Всі стани доступні з початкового стану

Корисна підпрограма

Припустимо, у нас є NFA , стан і не порожній рядок . Наступна підпрограма дозволить оцінити значення істинності наступного твердження: "кожен шлях у від стану до стану прийняття відповідає рядку, який є префіксом рядка для деякого ". Крім того, ця підпрограма буде запущена в поліноміальний час.NqsNqsnn

Спочатку побудуйте NFA допомогою стан, який приймає всі рядки, які не є префіксамиS|s|+1snN L ( N ) L ( S ) L ( N )n|s|sssssNNqNL(N)L(S)L(N) використовуючи стандартну конструкцію перетину NFA. Зауважимо, що всі ці конструкції є поліномами за розміром вхідних даних.

Потім просто перевірте, чи мова порожня (що можна зробити в поліноміальний час за допомогою простого пошуку графіка). тоді і тільки тоді, коли , або іншими словами, кожен рядок у відсутній у . Іншими словами, мова порожня, якщо і лише тоді, коли приймає лише рядки, які є префіксами для деякого . Це можна перефразовувати як саме твердження, яке ми намагалися оцінити: "кожен шлях у від стану до стану прийняття відповідає рядку, який є префіксом рядкаNL(N)=L(S)L(N)=L(N)L(S)NNsnnNqsn nдля якогось . "n

Основний алгоритм

Розглянемо набір станів у NFA, які знаходяться в певній петлі. Для кожного такого стану, , виконайте наступне:q

Нехай - будь-яка проста петля, що містить . Нехай - рядок, що відповідає циклу . Оскільки NFA не має епсилонних переходів, не є порожнім. Потім застосуйте підпрограму до NFA, стану та рядка . Якщо підпрограма повідомляє нам, що кожен шлях, що починається з в NFA і закінчується в стані прийняття, відповідає префіксу для деякого тоді переходимо до наступного стану . В іншому випадку виведіть, що мова даної мови NFA містить нескінченну підмножину без префіксу.P2qsP2sqsqsnnq

Якщо ми спробуємо кожен стан який знаходиться в циклі, і алгоритм ніколи не виводить, то виводимо, що мова даної мови NFA не містить нескінченного підмножини без префіксу.q

Правильність (перший тайм)

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

Нехай - шлях, існування якого підтверджується підпрограмою: шлях від до стану прийняття таким чином, що відповідна рядок не є префіксом для будь-якого .P3qtsnn

Нехай складається з копій де достатньо великий, ніж. Оскільки є циклом через , може розглядатися як шлях від до . Рядок, що відповідає єP2mP2mm|s|>|t|P2qP2qqP2sm

Нехай - шлях від стартового стану до (який існує, оскільки кожен стан доступний з самого початку), і нехай - рядок, відповідний цьому шляху.P1qr

Тоді шлях, що складається з , копій , і - це прийнятий шлях обчислення. Рядок, що відповідає цьому шляху, є . Таким чином, NFA приймає кожну рядок форми . Це нескінченний набір рядків, прийнятих NFA, і я стверджую, що цей набір рядків не містить префіксів. Зокрема, припустимо, є префіксом з . Іншими словами, - префікс . Оскільки має довжину, це означає, що цеP1xP2P3r(sm)xtr(sm)xtr(sm)xtr(sm)yty>xt(sm)yxt(sm)yxm(yx)|s|m|s|>|t|t( s m ) y - x = s m ( y - x ) t s n n r ( s m ) x t r ( s m ) y t - префікс . Але за результатами підпрограми ми знаємо, що не є префіксом для жодного . Таким чином, не може бути префіксом , і за бажанням набір рядків не містить префіксів.(sm)yx=sm(yx)tsnnr(sm)xtr(sm)yt

Таким чином, я показав, що якщо основний алгоритм виводить, що мова даної мови NFA містить нескінченну підмножину без префіксу, то це насправді так.

Коректність (друга половина)

Далі я покажу другу половину: якщо мова даної NFA містить нескінченну підмножину без префіксу, то основний алгоритм виведе цей факт.

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

Скажіть, що стан "циклічно" в NFA, якщо існує цикл в NFA через цей стан, а "не циклічно" в іншому випадку. Розглянемо всі шляхи від стартового стану до будь-якого циклічного стану, які проходять лише через нециклирующиеся стани (за винятком одного стану циклу, де вони опиняються). Нехай P - сукупність цих шляхів. Кожен шлях pP не може мати цикл, оскільки тоді стани в цьому циклі були б циклічними станами, і тому p проходив би через циклічний стан. Таким чином, довжини шляхів у P обмежуються вище числом станів у NFA, і тому P є кінцевим (наприклад, якщо стартовий стан є циклічним станом, єдиний такий шлях - порожній шлях).

Ми можемо розділити A на |P|+1 підмножина на основі того, як починаються ті обчислювальні шляхи в AЗокрема, для pP , нехай р безліч всіх шляхів обчислення в А , які починаються з шляхом р і нехай Б безліч всіх інших шляхів в A . Ясно, що все р з і В не перетинаються і їх об'єднання всього набору . Крім того, BApApBAApBABмістить лише контури, які ніколи не проходять через циклічний стан, і тому ніколи не циклічно; таким чином, B є кінцевим. Тоді ми можемо зробити висновок, що деякий Ap повинен бути нескінченним (інакше A було б об'єднанням кінцево багатьох кінцевих множин).

Оскільки Ap нескінченний, існує нескінченно багато контурів обчислень, жоден з яких рядків не є префіксами один одного, які приймають шляхи, починаючи з p . Нехай q - стан, досягнутий в кінці шляху p . Можна зробити висновок, що існує нескінченно багато приймаючих шляхів, називаємо цей набір A , починаючи з q всі відповідають рядкам, які не є префіксами один одного.

Під час основного алгоритму ми запускаємо підпрограму на стан q та деякі рядки s . Ця підпрограма повідомляє нам, чи відповідає кожен шлях, що починається з q рядок, який є префіксом sn для деякого n . Якби це було так, то всі нескінченно багато прийнятих шляхів в A були б префіксами sn для різних n , що означало б, що вони всі префікси один одного. Це не так, тому ми робимо висновок, що коли основний алгоритм виконує підпрограму на стан q, результат - інший можливий результат. Це, однак, призводить головний алгоритм до висновку, що мова NFA містить нескінченну підмножину без префіксу.

Це завершує доказ коректності.


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

Що ви маєте на увазі під керуванням петлею? У головному алгоритмі для кожного стану ви вибираєте лише один цикл, який проходить через q (будь-який цикл із потенційно експоненціально багатьох) і викликуєте цей цикл P 2 (післязаписи ви запускаєте підпрограму на стан q та рядок s, де s є рядок, пов'язаний з P 2 ). Підпрограма по суті обробляє перевірку того, чи можна генерувати неперіодичну послідовність за допомогою цього циклу. Якщо так, то ми закінчили. Якщо ні (і, тим більше, ні для кожного q ), то вся ваша мова є об'єднанням періодичних послідовностей, тому ми також готові. qqP2qssP2q
Михайло Рудой

Для того, щоб зробити моє запитання ясніше, ось простий НКА з початковим станом , кінцевий стан Т і трьох переходів: д з д , д б д , д T . Цикл для a не породжує рядки без префікса, але цикл для b буде. qTqaqqbqqaTab
Джаф

На насправді, петля для робить генерувати префікс вільний набір: набір рядків * б на все використовують петлю. У моєму алгоритмі, якщо цикл ви вибираєте для д є цикл , то підпрограма буде визначати , що ні, не кожного приймаючого шляху , починаючи з д не має рядок виду * , і тому основний алгоритм буде сказати , що нескінченний префікс -вільне підмножина існує. Якщо цикл, який алгоритм використовує для q , замість циклу b, то підпрограма визначає, що не кожен приймаючий шлях, починаючи з q, має рядок форми baabaaqaqaqbq , і в цьому випадку алгоритм має однаковий вихід. b
Михайло Рудой

Дякую, Михайле! Я думаю, що ваша відповідь вирішує питання.
Гугло

2

Визначення

Визначення 1 : Нехай S - це сукупність слів. Ми говоримо, що S - безмежно без префікса (складений ім'ям для цієї відповіді), якщо є слова u0,,un, і v1,,vn, такі, що:

  • Для кожного n1 , un і vn є не порожніми і починаються з різних літер;

  • S={u0v1,,u0unvn+1,} .

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

   u₀    u₁    u₂
■-----•-----•-----•⋅⋅⋅
      |     |     |
      | v₁  | v₂  | v₃
      |     |     |
      ▲     ▲     ▲

Пропозиція 1.1 : Симпатичний нескінченний набір префіксів не містить префіксів.

Доведення пропозиції 1.1 : Припустимо, що u0unvn+1 є суворим префіксом u0umvm+1 . Є два випадки:

  • Якщо n<m то vn+1 є префіксом un+1umvm+1 . Це неможливо, оскільки un+1 і vn+1 мають виразні перші літери.

  • Якщо n>m то um+1unvn+1 - префікс vm+1 . Це неможливо, оскільки um+1 і vm+1 мають виразні перші літери.

Пропозиція 1.2 : Симпатичний нескінченний набір без префіксу - нескінченний.

Доведення пропозиції 1.2 : У доказі 1.1 ми показали, що якщо nm то u0unvn+1 і u0umvm+1 не порівнянні для порядку префікса. Тому вони не рівні.


Основне доказ

Пропозиція 2 : Будь-який набір нескінченних префіксів містить хороший безкінечний набір без префіксів.

Пропозиція 3 : Мова містить нескінченний набір без префіксів, якщо і лише тоді, коли він містить безмежно безліч без префікса.

Доказ нижче.

Доведення пропозиції 3 : пропозицією 2. пропозиціями 1.1 та 1.2.

Пропозиція 4 : Набір підмножин, що не містять префіксів, звичайної мови (закодованих як нескінченне слово u0¯v1^u1¯v2^u2¯ ) є ω -регулярним (і розмір Büchi автомат, що розпізнає його, є поліном за розміром NFA, що розпізнає звичайну мову).

Доказ нижче.

Теорема 5 : Визначення того, чи звичайна мова, описана NFA, містить нескінченну підмножину, що не містить префіксів, може бути зроблена в часі поліном розміром NFA.

Доведення теореми 5 : За пропозицією 3 достатньо перевірити, чи містить вона непогано нескінченну підмножину без префіксів, що можна зробити в поліноміальний час, побудувавши автомат Бючі, заданий пропозицією 4, і перевірити не порожнечу його мова (що може бути виконано у лінійному часі за розміром автомата Бючі).


Доведення пропозиції 2

Лема 2.1 : Якщо S - без префікса, то w1S (для будь-якого слова w ).

Доказ 2.1 : За визначенням.

Лема 2.2 : Нехай S - нескінченний набір слів. Нехай w:=lcp(Sn) найдовший префікс , загальний для всіх слів в S . S і w1S мають однаковий кардинал.

Доведення 2.2 : Визначте f:w1SS по f(x)=wx . Він добре визначений за визначенням w1S , ін'єктивним за визначенням f і сур'єктивним за визначенням w .

Доведення пропозиції 2 : Ми будуємо un і vn шляхом індукції на n , причому гіпотеза про індукцію Hn складається з таких частин:

  • (P1) Для всіхk{1,,n} ,u0uk1vkS ;

  • (P2) Для всіхk{1,,n} ,uk іvk не порожні і починаються з чітких літер;

  • (P3) Sn:=(u0un)1S нескінченно;

  • (P4) Немає порожнього префікса, спільного для всіх слів уSn . Іншими словами: Немає літериa такої, щоSnaΣ .

Зауваження 2.3 : Якщо у нас є послідовності, які перевіряють Hn без (P4) , ми можемо модифікувати un щоб вони також задовольняли (P4) . Дійсно, достатньо замінити un на unlcp(Sn) . (P1) не впливає. (P2) тривіально. (P4) знаходиться за конструкцією. (P3) є за лемою 3.

Тепер будуємо послідовності за допомогою індукції на n :

  • Ініціалізація: H0 істинно, приймаючи u0:=lcp(S) (тобто приймаючи u0:=ε і застосовуючи зауваження 3.1).

  • Крок індукції: Припустимо, що у нас є слова u1,,un та v1,,vn такі, що Hn для деякого n . Ми побудуємо un+1 і vn+1 такі, що Hn+1 .

Оскільки Sn є нескінченним і без префіксів (за лемою 1), він не містить ε так, що Sn=aΣ(SnaΣ) . Оскільки Sn нескінченна, є буква a така, що SnaΣ нескінченна. За (P4) , є буква b відміну від таким чином, що S пб ЕaSnbΣ не порожній. Виберітьvn+1SnbΣ . Вважаючи, щоun+1 єa , задовольнимо б(P1) ,(P2) і(P3) тому застосуємо зауваження 3.1, щоб отримати(P4) :un+1:=alcp(a1Sn) .

(P1) u1unvn+1u1un(SnbΣ)S .

(P2) За визначеннямun+1 іvn+1 .

(P3) a1Sn є нескінченним за визначеннямa , іSn+1 , таким чином, є нескінченним лемою 3.

(P4) За визначеннямun+1 .


Доведення пропозиції 4

Доведення пропозиції 4 : Нехай A=(Q,,Δ,q0,F) - NFA.

Ідея така: ми читаємо u0 , запам’ятовуємо, де ми знаходимося, читаємо v1 , зворотній шлях до того, де ми були після читання u0 , читаємо u1 , пам’ятаємо, де ми є,… Ми також пам'ятаємо першу букву, яка читайте в кожному vn щоб переконатися, що un починається з іншої літери.

Мені сказали, що це може бути простіше з багатоголовими автоматами, але я не дуже знайомий з формалізмом, тому я просто опишу це за допомогою автомата Büchi (з однією головою).

Покладемо Σ:=Σ¯Σ^ , де символи будуть лініями , проведеними зверху використовуватися для описує uk з і символи з капелюхами для vk s.

Встановлюємо Q:=Q×({}(Q×Σ)) , де:

  • (q,) означає, що ви читаєте деякийun ;

  • (q,(p,a)) означає, що ви закінчили читати деякіun у станіp , що ви зараз читаєтеvn+1 що починається зa , і щойно ви закінчите, ви повернетесь доp читатиun+1 що не починається зa .

Встановлюємо q0:=(q0,) оскільки починаємо з читання u0 .

Визначимо F як F×Q×Σ .

Сукупність переходів визначається так:

  • " un " Для кожного переходу qaq додати (q,)a¯(q,) ;

  • " un до vn+1 " Для кожного переходу qaq , додати (q,)a^(q,(q,a)) ;

  • " vn " Для кожного переходу qaq , додайте (q,(p,a))a^(q,(p,a)) ;

  • " vn to un " Для кожного переходу pap де p є остаточним, а літера b відрізняється від a , додайте (q,(p,b))a¯(p,) ;

Лема 4.1 : u0¯v1^u1¯v2^un¯vn+1^ приймається A iff для кожного n1 , un і vn є не порожніми і починаються з чітких літер , і для кожного n0 , u0unvn+1L(A) .

Доведення леми 4.1 : Ліворуч до читача.

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