Мне было интересно, когда языки, которые содержат одинаковое количество экземпляров двух подстрок, будут регулярными. Я знаю, что язык, содержащий равное количество единиц и нулей, не является регулярным, но является языком, таким как , где = число экземпляров подстроки "001" равно числу экземпляров подстроки " 100 " обычный? Обратите внимание, что строка «00100» будет принята.
Моя интуиция говорит мне, что это не так, но я не могу доказать это; Я не могу превратить его в форму, которую можно прокачать через лемму прокачки, так как я могу это доказать? С другой стороны, я пытался создать DFA, NFA или регулярное выражение и потерпел неудачу на этих фронтах, так что же мне делать дальше? Я хотел бы понять это в целом, а не только для предлагаемого языка.
Ответы:
Ответ извлечен из вопроса.
Как указывает Хендрик Ян, в q5 должна быть дополнительная нулевая петля.
источник
Это вопрос с подвохом. Попробуйте создать строку, которая содержит два 001 и не содержит 100, и посмотрите, почему вы не можете это сделать. Если X = «число 001» и Y = «число 100», то X = Y или X = Y ± 1.
Как только вы поймете хитрость, очень маловероятно, что язык будет неправильным, и тогда создание DFA будет довольно простым. Есть только 8 состояний с их переходами, если следующий символ 0/1:
Начальное состояние - S0, а S0, S1, C0, C1, C2 - принимающие состояния.
источник