Увы, ваша проблема неразрешима. Подход, на который я наткнулся (который может быть перегружен, поэтому любой, кто имеет более целесообразный подход, должен подойти!) Сначала использует диагональный аргумент, чтобы продемонстрировать, что существует одинарный CSL который не является регулярным (в отличие от положительного результата для унарных КЛЛ), а затем уменьшает проблему остановки для машин Тьюринга, создавая для ТМ конструкцию CSG которая имитирует на длине ленты, меньшей длины строки синтаксического анализа , распознавая если останавливается без превышения своих границ и не удалось проанализировать иначе, так что успешно анализирует всеM G M w X M G w ∈ XXMGMwXMGw∈Xдостаточно длинные, если останавливается (так что отличается от только конечным числом строк и, следовательно, не может быть регулярным), в противном случае распознает пустой язык (который явно регулярен).L ( G ) X GML(G)XG
Ключом к этому подходу является наблюдение, что CSG не просто занимаются грамматическими вопросами, такими как структура фраз - действительно, последовательности вывода CSG могут выполнять произвольные недетерминированные вычисления, ограниченные пространством (действительно, естьPSPACE-полные CSL), прежде чем приступить к выравниванию со строкой разбора. Это легче всего наблюдать с помощью стандартных преобразований между CSG и монотонными грамматиками (которые продолжают работать, если они ограничены унарными алфавитами) и использованием простых монотонных производств для моделирования машинных переходов Тьюринга на строках деривации, которые представляют этапы в истории вычислений. В этом ответе я собираюсь предположить, что читатель может интуитивно понять большинство деталей, когда требуется CSG для имитации данного вычисления. (Я полагаю, что спрашивающему все это удобно, но я рассмотрю его для полноты. Тем не менее, не стесняйтесь просить разъяснения в комментариях.)
Во-первых, нам нужна нерегулярная унарная РГС. ( РЕДАКТИРОВАТЬ: так, это было излишним - нерегулярные унарные CSL могут быть легко продемонстрированы, например, с помощью накачки леммы на любом языке, который демонстрирует самые основные нерегулярности. См. Комментарии для примеров. Оглядываясь назад, используя диагональный аргумент было похоже на то, как ядерная боеголовка вступила в бой с ножом. Просматривайте эту конструкцию, если вам интересно, иначе переходите к сокращению.)
Пусть будет перечислением DFA по алфавиту , так что число состояний в увеличивается в . Мы описываем CSG с точки зрения его поведения при разборе строки :{ 1 } D i i G X 1 n ∈ { 1 } ∗D1,D2,...{1}DiiGX1n∈{1}∗
- Недетерминированные генерируют строку из «пустых» нетерминалов, которые мы считаем «лентой». Один из пустых нетерминалов должен быть отдельным нетерминалом «пусто + головка чтения-записи + начальное состояние». Если строка синтаксического анализа не то эта деривация закончится неудачей. Мы опишем остальную часть процесса в терминах детерминированных вычислений, смоделированных единственным возможным выводом.1 nn1n
- Напечатайте на ленте кодировку за которой следует число , где и выбраны так, чтобы на нашей ленте всегда было достаточно места, чтобы сделать то, что нам нужно. (Это возможно, поскольку пространство, необходимое для кодирования как и логарифмически увеличивается в .) i i = n - c c D i i iDiii=n−ccDiii
- Оцените на входе . Это не требует представления - вы можете просто сохранить одно состояние, которое вы меняете в соответствии с переходами при уменьшении .1 я Д я Д я яDi1iDiDii
- Если отклоняет , перезаписать всю ленту нетерминалами, которые выдают . Иначе не получится.1 I 1Di 1i1
Мы берем . Ясно, что для любого , поскольку .X ≠ L ( D i ) i 1 i + c ∈ X ⇔ 1 i + c ∉ L ( D i )X=L(GX)X≠L(Di)i1i+c∈X⇔1i+c∉L(Di)
Следующим шагом является разработка сокращения от проблемы остановки до проблемы задающего. (Если вы пропустили раздел, пусть будет произвольным нерегулярным унарным CSL, сгенерированным CSG .)G XXGX
Пусть произвольный TM. Мы конвертируем в CSG который ведет себя следующим образом при разборе строки :M G 1 nMMG1n
- Создайте пустых нетерминалов, крайний левый - отдельный нетерминал + нетерминал головки чтения-записи, а также сгенерируйте «граничный» нетерминал на каждой стороне. Опять же, если мы сгенерируем неправильное количество нетерминалов, мы потерпим неудачу.n−2
- Смоделируйте в пространстве между граничными нетерминалами. Если когда-либо переключается на одно из граничных состояний, мы прекращаем моделирование и предполагаем, что никогда не останавливается.М МMMM
- Если останавливается, себя как . Если мы должны были прекратить симуляцию, то потерпели неудачу.G XMGX
Обратите внимание, что если удастся вечно работать в границах, то никогда не сможет сгенерировать строку разбора, и поэтому потерпит неудачу. Если останавливается, то существует некоторое количество пространства которого достаточно, чтобы вместить все вычисления , следовательно, анализирует всякий раз, когда и , и, следовательно, является объединением и конечный язык, поэтому не является регулярным. С другой стороны, если никогда не останавливается, то явно регулярно.G M n M G 1 m m ≥ n + 2 1 m ∈ X X L ( G ) L ( G ) M L ( G ) = ∅MGMnMG1mm≥n+21m∈XXL(G)L(G)ML(G)=∅
Алгоритм для определения того, является ли регулярным или нет, будет определять, останавливается ли на чистой ленте, что неразрешимо. Отсюда следует, что проблема Аскера неразрешима.ML(G)M