Является ли язык {⟨A⟩∣A NFA и L(A)={0,1}∗} разрешима? неразрешима?
Как можно доказать / опровергнуть язык {⟩∣A⟩∣A - это NFA, а L(A)={0,1}∗} является / не может быть решено?
Сначала я предположил, что, поскольку это был NFA, это было бы решаемо, но так как нет входной строки для симуляции, это меняет вещи? Если так, то как? Я не могу думать о машине Тьюринга, которая бы решала это. Поскольку {0, 1}* теоретически бесконечно, означает ли машина Тьюринга никогда не останавливаться, поэтому язык неразрешим? Если да, то как мне доказать это?
2 ответа
Менее формально:
- мы можем алгоритмически определить, что вход представляет NFA в соответствии с нашим форматом
- мы можем алгоритмически построить DFA, эквивалентный NFA, используя конструкцию подмножества
- мы можем алгоритмически минимизировать DFA, используя любой из нескольких известных алгоритмов
- мы можем алгоритмически сравнить полученный DFA с DFA с одним состоянием для {0, 1}*
- если равно, выведите да; в противном случае, выход нет.
Поскольку мы можем описать алгоритм для этого, и поскольку мы не предполагаем, что у нас больше вычислительной мощности, чем у машин Тьюринга (по крайней мере, приведенные выше вычисления не требуют такого), проблема должна быть разрешимой.
Говоря неформально, вы можете показать это, построив машину Тьюринга, создающую DFA D_A, эквивалентную NFA A. Затем он создает DFA D_0, который принимает язык {0,1}*, и мы можем смоделировать решающее значение для EQ_DFA.
Формально говоря, построить TM S: S = "На входе:
- Построить DFA D_A эквивалентно A
- Создайте DFA D_0, который принимает {0,1} *
- Имитировать решающее F для EQ_DFA, где EQ_{DFA} = { | A и B - DFA, а L(A)=L(B)} (мы знаем, что EQ_ {DFA} является разрешимым языком).
- Принять, если F принимает; отклонить, если F отклоняет."