Учитывая язык , как я могу прямо сказать, не глядя на правила производства, что этот язык не является регулярным?
Я мог бы использовать лемму прокачки, но некоторые парни говорят, просто глядя на грамматику, что это не совсем так. Как это возможно?
Учитывая язык , как я могу прямо сказать, не глядя на правила производства, что этот язык не является регулярным?
Я мог бы использовать лемму прокачки, но некоторые парни говорят, просто глядя на грамматику, что это не совсем так. Как это возможно?
Ответы:
Основным свойством DFA's / NFA's является отсутствие неограниченной памяти. Если вы посмотрите на язык и единственный алгоритм (который позже должен быть переведен в конечный автомат), о котором вы можете подумать, требует это свойство, то есть вы чувствуете, что любой алгоритм, который его распознает, должен будет помнить произвольное большое количество вещей. (как в вашем примере) , то , что язык, вероятно , не регулярно.
Конечно, вы всегда должны помнить, что математическая интуиция может быть неправильной, и единственный способ убедиться в ней - это доказать.
РЕДАКТИРОВАТЬ: я отвечу на последний вопрос в комментариях здесь, из-за нехватки места.
Вы, ребята, говорите о неограниченной памяти, которая, как вы подразумеваете, является причиной, почему она не является регулярной. но ^ nb ^ m также может иметь неограниченную память, если я хочу, не так ли? это все еще не дает мне покоя.
Вопрос не в том, насколько большими могут быть слова (вы обычно сталкиваетесь с бесконечными регулярными языками, потому что каждый конечный язык является регулярным, и это довольно скучно), а в том, сколько DFA нужно запомнить.
В примере нет необходимости запоминать m , n . Алгоритм просто должен убедиться, что они положительны и что слово правильно упорядочено. Это конечный список, и каждый из элементов в списке требует постоянного объема памяти.
Сравните это с a n b n , для которого требуется простой алогрит, чтобы помнить, что число a равно числу
«S. Это потребует неограниченной памяти. Когда я смотрю на язык и вижу, что любой алгоритм, который я могу придумать, нуждается в неограниченной памяти, моя интуиция о том, что язык не является регулярным, становится сильнее. Если я не смогу найти «умный» алгоритм (тот, который требует постоянного объема памяти) за разумное количество времени (сколько времени разумно зависит от вас), я постараюсь доказать, что язык не является регулярным.
Надеюсь, это немного прояснит ситуацию.
Я мог бы использовать насосную лемму
Точно. После того, как вы использовали лемму Pumping или любую другую технику пару (десятки) раз, вы начнете видеть шаблоны на языках, которые не позволяют им быть регулярными. является очень простым, который вы, вероятно, уже освоили. Так что это тоже вопрос опыта, а не только интуиции.
Хороший способ проверить свою интуицию - взглянуть на следующие языки:
Какие из них не зависят от контекста?
Вы можете решить, является ли язык регулярным, используя довольно простые вычисления, а не делать полное доказательство. Вам просто нужно применить один очень мощный критерий: язык является регулярным тогда и только тогда, когда он имеет конечное число факторов.