Как интуитивно почувствовать, что язык является регулярным

9

Учитывая язык L={anbncn} , как я могу прямо сказать, не глядя на правила производства, что этот язык не является регулярным?

Я мог бы использовать лемму прокачки, но некоторые парни говорят, просто глядя на грамматику, что это не совсем так. Как это возможно?

Doniyor
источник
1
Любой может посмотреть на любой язык и просто сказать, что он не обычный. Я не уверен, что интуиция сама по себе так же важна, как и опыт. Это довольно простой (хотя и нерегулярный) язык, и он неизбежно встречается при изучении формальных языков. Как только вам сказали, что это не регулярно, и вы доказали, что это не регулярно с использованием какой-либо действительной техники доказательства, вам, как правило, не нужно доказательство, чтобы убедить других людей, потому что все они доказали это сами, когда их представляли тема.
Patrick87
да, но иногда в лекциях они просто следуют некоторым сухим математическим доказательствам, но им действительно не хватает интуитивных объяснений с реальными простыми примерами
doniyor
Забудьте . Вы когда-нибудь чувствовали, что не является регулярным? а н б нanbncnanbn
Удай Редди
2
Глядя на грамматику и провозглашать, что грамматика не является регулярной, язык не является регулярным - заблуждение. Есть много нерегулярных грамматик для обычных языков. Осторожно! Тем не менее, решить, является ли грамматика регулярной, легко; просто проверьте производство.
Рафаэль

Ответы:

11

Основным свойством DFA's / NFA's является отсутствие неограниченной памяти. Если вы посмотрите на язык и единственный алгоритм (который позже должен быть переведен в конечный автомат), о котором вы можете подумать, требует это свойство, то есть вы чувствуете, что любой алгоритм, который его распознает, должен будет помнить произвольное большое количество вещей. (как n в вашем примере) , то , что язык, вероятно , не регулярно.

Конечно, вы всегда должны помнить, что математическая интуиция может быть неправильной, и единственный способ убедиться в ней - это доказать.

РЕДАКТИРОВАТЬ: я отвечу на последний вопрос в комментариях здесь, из-за нехватки места.

Вы, ребята, говорите о неограниченной памяти, которая, как вы подразумеваете, является причиной, почему она не является регулярной. но ^ nb ^ m также может иметь неограниченную память, если я хочу, не так ли? это все еще не дает мне покоя.

Вопрос не в том, насколько большими могут быть слова (вы обычно сталкиваетесь с бесконечными регулярными языками, потому что каждый конечный язык является регулярным, и это довольно скучно), а в том, сколько DFA нужно запомнить.
В примере нет необходимости запоминать m , n . Алгоритм просто должен убедиться, что они положительны и что слово правильно упорядочено. Это конечный список, и каждый из элементов в списке требует постоянного объема памяти. Сравните это с a n b n , для которого требуется простой алогрит, чтобы помнить, что число a равно числуambnm,n
anbnab«S. Это потребует неограниченной памяти. Когда я смотрю на язык и вижу, что любой алгоритм, который я могу придумать, нуждается в неограниченной памяти, моя интуиция о том, что язык не является регулярным, становится сильнее. Если я не смогу найти «умный» алгоритм (тот, который требует постоянного объема памяти) за разумное количество времени (сколько времени разумно зависит от вас), я постараюсь доказать, что язык не является регулярным.
Надеюсь, это немного прояснит ситуацию.

Борис Трайвас
источник
спасибо, математические доказательства приносят интуицию, но посмотрите на это производственное правило: S -> ab | ASB. это для ^ NB ^ N, который говорит, что это также не является регулярным. но ^ mb ^ n регулярно с m, n> = 1. почему это? это на самом деле одна и та же форма, верно? я не понимаю разницу между этими двумя языками
doniyor
1
Для ^ nb ^ n вам нужно отслеживать 2 вещи: во-первых, число a равно количеству b (это невозможная часть для DFA), и во-вторых, что за «b» не следует «a» ». Для ^ mb ^ n вас не волнует значение m, n. Вы заботитесь только о том, что есть хотя бы один «а» и хотя бы один «б» и что ни за «б» не стоит «а». Неформально говоря, нужно помнить только 3 вещи.
Борис Трайвас
о хорошо, теперь я получил это.
Донийор
так что порядок тоже важная вещь, верно? вроде aabbcc принят, но не aabcbc только потому, что порядок не в порядке. правильно?
Донийор
1
«Основным свойством обычных языков является отсутствие неограниченной памяти». - Я знаю, что вы имеете в виду, но это предложение не имеет никакого смысла. «Вы чувствуете, что любой алгоритм, который распознает его, должен будет помнить произвольное большое количество вещей» - это действительно единственная интуиция, которую я знаю, но ее вид очень, очень опасен; смотрите здесь .
Рафаэль
5

Я мог бы использовать насосную лемму

Точно. После того, как вы использовали лемму Pumping или любую другую технику пару (десятки) раз, вы начнете видеть шаблоны на языках, которые не позволяют им быть регулярными. является очень простым, который вы, вероятно, уже освоили. Так что это тоже вопрос опыта, а не только интуиции.anbn

Хороший способ проверить свою интуицию - взглянуть на следующие языки:

  1. {xyyzx,y,z{a,b}+}
  2. {xyyzx,y,z{a,b}}
  3. {xyyzx,y,z{a,b,c}+}
  4. {xyyzx,y,z{a,b,c}}

Какие из них не зависят от контекста?

Рафаэль
источник
1
Если кто-то знает такие же хорошие примеры для границы обычных языков, скажите, пожалуйста. Пожалуйста, не портите ответ в комментариях.
Рафаэль
Рафаэль - отличная работа! Спасибо, что привели примеры и за то, что я подробно их протестировал
Дониёр
@doniyor, давайте продолжим эту дискуссию в чате
Рафаэль
4

Вы можете решить, является ли язык регулярным, используя довольно простые вычисления, а не делать полное доказательство. Вам просто нужно применить один очень мощный критерий: язык является регулярным тогда и только тогда, когда он имеет конечное число факторов.

LxxLwxwLL={anbn}aL={an1bn|n1}bL=akL={ankbn|nk}L

DDSaaLDS

Джеймс Коппел
источник
b \ L означает: если я разделю L на b, то получу пустой набор ?. потому что я действительно должен начать читать слово с самого начала? а не сзади?
Doniyor
1
bL=L/b
1
Вот хорошая слайд-колода, в которой объясняются коэффициенты и как создавать из них DFA
Джеймс Коппел
о хорошо, спасибо большое. Теперь я получил немного. ммм ... позвольте мне снова
немного