Эквивалентность двух автоматов

Какой самый лучший или самый простой метод для определения эквивалентности между двумя автоматами?

То есть, если даны два конечных автомата A и B, как я могу определить, распознают ли они один и тот же язык?

Они оба детерминированы или оба недетерминированы.


person franvergara66    schedule 01.08.2011    source источник
comment
Вы должны пометить свою домашнюю работу как [домашнее задание]. Это облегчает нам оказание соответствующей помощи. Вы должны предоставить ваш лучший ответ, чтобы мы могли его прокомментировать. Пожалуйста, не просите нас сделать домашнее задание за вас. Чему вы тогда научитесь?   -  person S.Lott    schedule 02.08.2011
comment
это должно быть на cstheory.stackexchange.com   -  person Gabriel Ščerbák    schedule 02.08.2011
comment
Что значит эквивалентно? Вы говорите, что они генерируют один и тот же язык. Вы имеете в виду, что графы изоморфны?   -  person Patrick87    schedule 02.08.2011
comment
...и важно сказать, что за автомат мы тут сравниваем   -  person Gabriel Ščerbák    schedule 02.08.2011
comment
@ Патрик87 Патрик87 Как он говорит, два автомата эквивалентны, если они распознают один и тот же язык.   -  person Gabriel Ščerbák    schedule 02.08.2011
comment
@ Габриэль, он сказал детерминированный или недетерминированный. Это сужает его до двух, и они математически эквивалентны. Тада.   -  person riwalk    schedule 02.08.2011
comment
@ Stargazer712 существуют не только автоматы с конечным состоянием (на которые он может ссылаться) - например. ищите автоматы с выталкиванием вниз.   -  person Gabriel Ščerbák    schedule 02.08.2011
comment
@ stargazer712 Я имею в виду, что оба являются детерминированными автоматами или недетерминированными автоматами, хорошо известно, что существует эквивалентность между AFD, AFN и AFN-лямбда   -  person franvergara66    schedule 02.08.2011
comment
DFA = AFD, NFA = AFN, NFA-лямбда = AFN-лямбда   -  person franvergara66    schedule 02.08.2011
comment
@Gabriel: вы неправильно понимаете вопрос. Он спрашивает, как определить, эквивалентны ли автоматы, если известно, что они принимают один и тот же язык. Может быть, он не это имел в виду, но это то, что он написал.   -  person Patrick87    schedule 02.08.2011
comment
@patrick Автоматы не генерируют языки, автоматы распознают языки   -  person franvergara66    schedule 02.08.2011
comment
@Gabriel, я никогда не слышал о том, чтобы недетерминированные конечные автоматы смешивали с недетерминированными автомотами Pushdown. Я очень хорошо знаком с обоими, и мне кажется очень ясным, что он имеет в виду NFA и DFA, а не NPDA.   -  person riwalk    schedule 02.08.2011
comment
КПК распознает контекстно-свободные языки, DFS и NFA не распознают его, поэтому не могут установить эквивалентность между PDA и NFA или DFA.   -  person franvergara66    schedule 02.08.2011
comment
@ Stargazer712 технически, мы оба предположили правильно, но он мог сказать что угодно, однако эквивалентность между PDA и DPDA непростая ... и есть также LBA ...   -  person Gabriel Ščerbák    schedule 02.08.2011
comment
Melkhia66: Я понимаю это. Что вы не понимаете в эквивалентности между конечными автоматами? Ваш вопрос, как написано, не имеет большого смысла.   -  person Patrick87    schedule 02.08.2011


Ответы (3)


Два недетерминированных конечных автомата (НКА) эквивалентны, если они принимают один и тот же язык.

Чтобы определить, принимают ли они один и тот же язык, мы смотрим на тот факт, что каждый НКА имеет минимальный ДКА, в котором нет двух идентичных состояний. Минимальный DFA также уникален. Таким образом, при наличии двух НКА, если вы обнаружите, что соответствующие им минимальные ДКА эквивалентны, то эти два НКА также должны быть эквивалентны.

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

person riwalk    schedule 01.08.2011
comment
Альтернативой может быть генерация любых DFA для NFA (например, путем построения подмножества), вычисление дополнения к одному из двух DFA (например, путем создания состояний допуска и наоборот), построение декартовой машины произведения и проверка пересечения для посмотреть, принимает ли он пустой язык (например, проверяя строки длиной до n). Я бы не назвал это эффективным, но вам все равно нужно проверить изоморфизм графа на выходе ответа Stargazer712. - person Patrick87; 02.08.2011
comment
@Patrick87 Патрик87 определить достаточное n может быть непросто, или есть какой-то алгоритм для его вычисления? И что вы подразумеваете под необходимостью проверки изоморфизма графов? - person Gabriel Ščerbák; 02.08.2011
comment
После того, как вы сгенерируете два минимальных DFA для исходных FA, как вы алгоритмически определите, что они одинаковы? Звучит как проблема изоморфизма графа для меня. По лемме о накачке вам нужно только выбрать n = количество состояний в вашей конечной (минимальной, если хотите) FA. В качестве альтернативы вы можете свернуть машину CP и проверить очень простой пример изоморфизма графа (только начальное состояние, без принимающих состояний). - person Patrick87; 02.08.2011
comment
@Patrick: я думаю, что определить эквивалентность двух минимальных DFA должно быть легко, просто выполните BFS через оба в том же порядке. Поскольку соответствующие ребра должны быть помечены одними и теми же символами, просто отсортируйте по ним исходящие ребра из каждого состояния. - person Paŭlo Ebermann; 02.08.2011
comment
@ Патрик87 Патрик87 ах, хорошо, но это во многом зависит от выбранного представления, но вы правы. Так вы предлагаете угадать правильный n, потому что он существует? Какая информатика :) - person Gabriel Ščerbák; 02.08.2011
comment
N — количество состояний в DFA. Чтобы узнать, принимает ли DFA какие-либо строки, вы можете просто проверить строки длиной до n. Если ДКА не принимает ничего из этого, то ДКА ничего не принимает по лемме о накачке. Что касается необходимости изоморфизма графов... Да, если подумать, вы, вероятно, можете сделать это проще, чем общий изоморфизм графов, поскольку DFA имеют уникально помеченные исходящие дуги. Хорошее наблюдение. - person Patrick87; 02.08.2011
comment
@Patrick87: эквивалентность DFA намного проще. Задайте отношение эквивалентности Q[k] состояний, ведущих себя одинаково для всех входных данных не более чем k символов. Два состояния находятся в Q[k+1], если для любого заданного входного символа они оба переходят в состояния, эквивалентные в Q[k]. Если машина имеет n состояний, два состояния, которые нельзя различить в пределах n символов, будут неразличимы для любого ввода и, таким образом, эквивалентны. Даже действительно ужасная наивная реализация этого алгоритма будет в худшем случае O (n ^ 3), так что это явно не NP-сложно. - person supercat; 13.12.2012
comment
Пожалуйста, избегайте ответов, основанных на ссылке на внешний источник. Вместо этого включите в свой ответ соответствующую информацию и предоставьте ссылку в качестве ссылки. cs.oberlin.edu/~jdonalds/331.huh/lecture05 Ссылка .html, которую вы дали, теперь мертва и отсутствует на archive.org, в результате чего ответ сейчас гораздо менее полезен, чем при первоначальной публикации. - person Suzanne Soy; 13.09.2016
comment
@GeorgesDupéron, достаточно честно. Я удалил этот абзац из ответа, так как в нем не было необходимости, и он даже не отвечает на исходный вопрос. Любой, кто изучает эту тему, в любом случае должен быть хорошо знаком с методами сведения NFA к DFA. - person riwalk; 13.09.2016
comment
Если два детерминированных конечных автомата эквивалентны, означает ли это, что они имеют точно такое же количество состояний и одну и ту же расширенную функцию перехода? Предполагая, что недостижимые состояния были устранены. - person 0lt; 12.05.2018

Другой, более простой подход заключается в дополнении и пересечении автоматов. Автомат A эквивалентен B тогда и только тогда, когда L(A) содержится в L(B) и наоборот, то есть тогда и только тогда, когда пересечение между дополнением L(B) и L(A) пусто, и наоборот.

Вот алгоритм проверки, содержится ли L(A) в L(B):

  1. Дополнение: сначала определите B, используя конструкцию подмножества. Затем сделайте каждое принимающее состояние отвергающим и каждое отвергающее состояние принимающим. Вы получаете автомат, который распознает дополнение L(B).
  2. Пересечение: постройте автомат, который распознает язык, являющийся пересечением дополнения L(B) и L(A). То есть построить автомат на пересечении автомата из шага 1 и A. Чтобы пересечь два автомата U и V, вы строите автомат с состояниями U x V. Автомат переходит из состояния (u,v) в (u',v') с буквой a тогда и только тогда, когда есть переходы u --a--> u' в U и v --a--> v' в V. Состояния принятия — это состояния (u,v), где u принимает в U, а v принимает в V.
  3. После построения автомата на шаге 2 остается только проверить пустоту. То есть есть ли слово, которое принимает автомат. Это самая простая часть — найти путь в автомате из начального состояния в принимающее состояние, используя алгоритм BFS.

Если L(A) содержится в L(B), нам нужно запустить тот же алгоритм, чтобы проверить, содержится ли L(B) в L(A).

person Guy    schedule 27.09.2012

Я просто перефразирую ответ @Guy.

Чтобы сравнить языки, принятые обоими, мы должны выяснить, L(A) is equal to L(B) это или нет.

Таким образом, вам нужно выяснить, является ли L(A)-L(B) and L(B)-L(A) нулевым или нет. (Причина 1)

Часть 1:

Чтобы выяснить это, мы строим NFA X из NFA A и NFA B, .

Если X пустой набор, то L(A) = L(B) иначе L(A) != L(B). (Причина 2)

Часть 2:

Теперь нам нужно найти эффективный способ доказать или опровергнуть X is empty set. Когда X станет пустым как DFA или NFA? Ответ: X будет пустым, если нет пути, ведущего из начального состояния в любое из конечных состояний X. Для этого мы можем использовать BFS или DFS.


Reason1: Если оба значения равны нулю, то L(A) = L(B).

Reason2: Мы можем доказать, что множество регулярных языков замкнуто относительно пересечения и объединения. Таким образом, мы сможем эффективно создавать NFA X.

а для наборов:

person foxtrot9    schedule 11.02.2017