Содержит ли данный регулярный язык бесконечное подмножество без префиксов?


11

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

Вопрос в том:

В чем сложность проверки, содержит ли обычный язык, заданный как NFA, бесконечное подмножество без префиксов?

Ответ (благодаря Михаилу Рудой, здесь ниже) : Это можно сделать за полиномиальное время, и я думаю, что даже в НЛ.

Перефразируя ответ Михаила, пусть (Σ,q0,F,δ) будет входной NFA в нормальной форме (без эпсилон-переходов, тримминг), и пусть L[p,r] (соответственно L[p,R] ) будет язык, полученный с помощью состояния p качестве начального состояния и {r} качестве конечного состояния (соответственно, состояние p качестве начального и набор R качестве конечного). За слово u позволишь uωбыть бесконечным словом, полученным путем итерации 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 N , состояние q и непустая строка s . Следующая подпрограмма позволит нам оценить значение истинности следующего утверждения: «каждый путь в N от состояния q до состояния принятия соответствует строке, которая является префиксом строки sn для некоторого n ». Кроме того, эта подпрограмма будет выполняться за полиномиальное время.

S|s|+1snn|s|sssssNNqN L ( N ) L ( S ) L ( N )чей язык - используя стандартную конструкцию пересечения NFA. Обратите внимание, что все эти конструкции являются полиномиальными по размеру входных данных.L(N)L(S)L(N)

Затем просто проверьте, является ли язык пустым (что можно сделать за полиномиальное время с помощью простого поиска в графе). тогда и только тогда, когда , или, другими словами, каждая строка в отсутствует в . Другими словами, язык пуст тогда и только тогда, когда принимает только строки, которые являются префиксами для некоторого . Это можно перефразировать так, как если бы мы пытались оценить следующее выражение: «каждый путь в от состояния до состояния принятия соответствует строке, которая является префиксом строки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 является префиксом . Но мы знаем по выводу подпрограммы, что не является префиксом для любого . Таким образом, не может быть префиксом , и при желании набор строк не имеет префиксов.(sm)yx=sm(yx)tsnnr(sm)xtr(sm)yt

Таким образом, я показал, что если основной алгоритм выводит, что данный язык NFA содержит бесконечное подмножество без префиксов, то это действительно так.

Правильность (вторая половина)

Далее я покажу другую половину: если язык данного NFA содержит бесконечное подмножество без префиксов, то главный алгоритм выведет этот факт.

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

Скажем, что в NFA состояние «зацикливается», если в NFA существует петля, и в противном случае «зацикливается». Рассмотрим все пути от начального состояния до любого состояния зацикливания, которое проходит только через состояния без зацикливания (за исключением одного состояния зацикливания, в котором они заканчиваются). Пусть будет множеством этих путей. Каждый путь не может иметь цикл, так как тогда состояния в этом цикле были бы состояниями цикла, и поэтому проходил бы через состояние цикла. Таким образом, длины путей в ограничены сверху числом состояний в NFA, и поэтому конечно (например, если начальное состояние является состоянием цикла, то единственным таким путем является пустой путь).PpPpPP

Мы можем разбить на подмножества, основываясь на том, как начинаются эти пути вычисления вВ частности, для , пусть множество всех путей вычисления в , которые начинаются с путем и пусть множество всех других путей в . Ясно, что все с и не пересекаются и их объединение всего набора . Кроме того, содержит только пути, которые никогда не проходят через состояние зацикливания и, следовательно, никогда не зацикливаются; таким образом, конечно. Мы можем заключить, что некоторыеA|P|+1ApPApApBAApBABBApдолжно быть бесконечным (иначе будет объединением конечного числа конечных множеств).A

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

Во время основного алгоритма мы запускаем подпрограмму в состоянии и некоторой строке . Эта подпрограмма сообщает нам, соответствует ли каждый принимающий путь, начинающийся с , строке, которая является префиксом для некоторого . Если бы это было так, то все бесконечно много принимающих путей в были бы префиксами для различных , что означало бы, что все они являются префиксами друг друга. Это не так, поэтому мы заключаем, что когда основной алгоритм запускает подпрограмму в состоянииqsqsnnAsnnqРезультатом является другой возможный результат. Это, однако, приводит к тому, что основной алгоритм выводит, что язык NFA содержит бесконечное подмножество без префиксов.

Это завершает доказательство правильности.


Я не понимаю, как работает обработка циклов, поскольку данное состояние может быть частью (экспоненциально) многих циклов. Конечно, если любые два из этих циклов можно использовать для генерации непериодической последовательности, то все готово. q
Джап

Что вы подразумеваете под обработкой цикла? В основном алгоритме для каждого состояния вы выбираете только один цикл, проходящий через (любой цикл из потенциально экспоненциального множества), и вызываете этот цикл (после вы запускаете подпрограмму в состоянии и строку где - строка связано с ). Подпрограмма по существу обрабатывает проверку того, возможно ли генерировать непериодическую последовательность, используя этот цикл. Если да, то мы закончили. Если нет (и, кроме того, нет для каждого ), то весь ваш язык представляет собой объединение периодических последовательностей, поэтому мы также закончили. q P 2 q s s P 2 qqqP2qssP2q
Михаил Рудой

Чтобы сделать мой вопрос более понятным, вот простой NFA с начальным состоянием , конечным состоянием и тремя переходами: , , . Цикл для не будет генерировать строки без префиксов, но цикл для будет. T q a q q b q q a T a bqTqaqqbqqaTab
января

На самом деле, петля для делает генерировать префикс свободный набор: множество строк все использовать петлю. В моем алгоритме, если цикл вы выбираете для является цикл , то подпрограмма будет определять , что нет, не каждого принимающего пути , начиная с не имеет строки вида , и поэтому основной алгоритм будет сказать , что бесконечная Подмножество без префиксов существует. Если цикл, используемый алгоритмом для , вместо этого является циклом то подпрограмма определяет, что не каждый принимающий путь, начинающийся с имеет строку видаa b a a q a q a q b q b aabaaqaqaqbqbИ в этом случае алгоритм имеет тот же результат.
Михаил Рудой

Спасибо Михаил! Я думаю, что ваш ответ решает вопрос.
Гугло

2

Определения

Определение 1 : Пусть - набор слов. Мы говорим , что является хорошо бесконечны префиксы бесплатно (составлены названием для целей этого ответа) , если есть слова и , такие , что:SSu 0 , , u n , v 1 , , v n , u0,,un,v1,,vn,

  • Для каждого , и непустые и начать с различными буквами;n1unvn

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

Интуиция заключается в том, что вы можете поместить все эти слова в бесконечное корневое дерево ( это корень, листья и оставшиеся внутренние узлы) следующей формы, так что слова в точно обозначают пути от корня до листа:S

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

Предложение 1.1 . Красиво бесконечное множество без префиксов не имеет префиксов.

Доказательство предложения 1.1 . Предположим, что является строгим префиксом . Есть два случая:u0unvn+1u0umvm+1

  • Если то является префиксом . Это невозможно, потому что и имеют разные первые буквы.n<mvn+1un+1umvm+1un+1vn+1

  • Если то является префиксом . Это невозможно, потому что и имеют разные первые буквы.n>mum+1unvn+1vm+1um+1vm+1

Предложение 1.2 . Красиво бесконечное множество без префиксов бесконечно.

Доказательство предложения 1.2 . В доказательстве 1.1 мы показали, что если то и несопоставимы для порядка префиксов. Поэтому они не равны.nmu0unvn+1u0umvm+1


Основное доказательство

Предложение 2 : Любое бесконечное множество без префиксов содержит хорошее бесконечное множество без префиксов.

Предложение 3 : язык содержит бесконечное множество без префиксов тогда и только тогда, когда оно содержит красиво бесконечное множество без префиксов.

Доказательство ниже.

Доказательство предложения 3 : по предложению 2. по предложениям 1.1 и 1.2.

Предложение 4 : набор подмножеств без регулярных префиксов обычного языка (закодированный как бесконечное слово ) является регулярным (и размер автомата Бучи, распознающего его, является полиномиальным по сравнению с размером NFA, распознающего обычный язык).u0¯v1^u1¯v2^u2¯ω

Доказательство ниже.

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

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


Доказательство предложения 2

Лемма 2.1 : Если - множество без префиксов, то (для любого слова ).Sw1Sw

Доказательство 2.1 . По определению.

Лемма 2.2 . Пусть бесконечное множество слов. Пусть самый длинный префикс , общие для всех слов в . и имеют одинаковый кардинал.Sw:=lcp(Sn)SSw1S

Доказательство 2.2 . Определите как . Он хорошо определяется по определению , инъективен по определению и сюръективен по определению .f:w1SSf(x)=wxw1Sfw

Доказательство предложения 2 : Мы строим и по индукции по , причем гипотеза индукции состоит из следующих частей:unvnnHn

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

  • (P2) Для всех , и не пусты и начинаются с разных букв;k{1,,n}ukvk

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

  • (P4) Нет непустого префикса, общего для всех слов в . Другими словами: нет такой буквы , что .SnaSnaΣ

Замечание 2.3 : Если у нас есть последовательности, которые проверяют без , мы можем изменить чтобы они также удовлетворяли . Действительно, достаточно заменить на . без изменений. тривиально. по конструкции. по лемме 3.Hn(P4)un(P4)ununlcp(Sn)(P1)(P2)(P4)(P3)

Теперь мы построим последовательности по индукции по :n

  • Инициализация: верен, взяв (т.е. взяв и применив замечание 3.1).H0u0:=lcp(S)u0:=ε

  • Шаг индукции: предположим, что у нас есть слова и такие что для некоторого . Мы построим и , что .u1,,unv1,,vnHnnun+1vn+1Hn+1

Поскольку бесконечен и не содержит префиксов (по лемме 1), он не содержит поэтому . Поскольку бесконечен, существует буква такая, что бесконечна. К , есть буква отличается от таким образом, что не пусто. Выберите . Принятие в качестве будет удовлетворять , иSnεSn=aΣ(SnaΣ)SnaSnaΣ(P4)baSnbΣvn+1SnbΣun+1a(P1)(P2)(P3)поэтому мы применяем замечание 3.1 для получения : .(P4)un+1:=alcp(a1Sn)

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

(P2) По определению и .un+1vn+1

(P3) a1Sn бесконечно по определению , и поэтому бесконечно по лемме 3.aSn+1

(P4) По определению .un+1


Доказательство предложения 4

Доказательство предложения 4 : Пусть - NFA.A=(Q,,Δ,q0,F)

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

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

Мы устанавливаем , где подчеркнутые символы будут использоваться для описания s и символов со шляпами для s.Σ:=Σ¯Σ^ukvk

Мы устанавливаем , где:Q:=Q×({}(Q×Σ))

  • (q,) означает, что вы читаете некоторые ;un

  • (q,(p,a)) означает, что вы закончили чтение некоторого в состоянии , что вы сейчас читаете который начинается с , и что, как только вы закончите, вы вернетесь к чтобы прочитать , который не начинается с .unpvn+1apun+1a

Мы устанавливаем потому что мы начинаем с чтения .q0:=(q0,)u0

Мы определяем как .FF×Q×Σ

Набор переходов определяется следующим образом:

  • " " Для каждого перехода добавьте ;unqaq(q,)a¯(q,)

  • " to " Для каждого перехода добавьте ;unvn+1qaq(q,)a^(q,(q,a))

  • " " Для каждого перехода добавить ;vnqaq(q,(p,a))a^(q,(p,a))

  • " to " Для каждого перехода где является окончательным и буква отличается от , добавьте ;vnunpappba(q,(p,b))a¯(p,)

Лемма 4.1 : принимается тогда и только тогда, когда для каждого , и не пусты и начать с различными буквами, и для каждого , .u0¯v1^u1¯v2^un¯vn+1^ 'п1упVпп0U0...упVп+1L()An1unvnn0u0unvn+1L(A)

Доказательство леммы 4.1 : оставлено читателю.

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