Это обычный язык? Если да, то что это за регулярное выражение?

B = {1^k y | k >= 1, y in {0, 1}* and y contains at least k 1's }

Является ли этот язык нормальным? Если да, то как вы это доказываете и как бы вы представили это с помощью регулярного выражения в Python?

Это для работы в классе, поэтому, если бы вы могли объяснить причины и процессы, лежащие в основе вашего ответа, это было бы очень признательно.


person camdroid    schedule 19.02.2013    source источник
comment
Мы еще не изучали контекстно-свободные языки — откуда вы это знаете?   -  person camdroid    schedule 19.02.2013
comment
Это не регулярно, потому что вы не можете хранить произвольный размер k в конечном числе состояний. Для формального доказательства воспользуемся леммой о накачке.   -  person starblue    schedule 19.02.2013
comment
@starblue - Разве лемма о прокачке не необходима, но недостаточна?   -  person camdroid    schedule 19.02.2013
comment
@camdroid: Доказательство от противного. Если необходимое условие не выполняется, то это не регулярное выражение.   -  person nhahtdh    schedule 19.02.2013
comment
@nhahtdh: Доказательство от противного с использованием леммы о накачке докажет, что язык неправильный, но я хочу доказать, что он правильный, а обратная лемма накачки неверна.   -  person camdroid    schedule 19.02.2013
comment
@nhahtdh: Это регулярно - я знаю ответ, я пытаюсь понять, как к нему прийти.   -  person camdroid    schedule 19.02.2013
comment
Неправильно прочитал вопрос (по крайней мере, не читал). Если равно, то, скорее всего, нерегулярно.   -  person nhahtdh    schedule 19.02.2013
comment
Извините, мой предыдущий комментарий был неправильным. Хитрость в том, что между двумя частями нет однозначной границы, поэтому вы можете перемещать единицы в часть y.   -  person starblue    schedule 19.02.2013
comment
Можете пояснить обозначения? Очевидно, что y — двоичное число, что такое 1^k? ::: Мои университетские дни давно прошли, но по определению, если вы можете представить набор регулярным выражением, он является регулярным (отсюда и название «регулярный» в регулярном выражении)   -  person ilomambo    schedule 19.02.2013


Ответы (1)


Ваш язык эквивалентен этому языку:

B' = {1 y | y in {0, 1}* and y contains at least one 1}

Вы можете доказать, что B' является подмножеством B, так как условие в B' такое же, как B, но с k, равным 1.

Доказательство того, что B является подмножеством B', включает в себя доказательство того, что все слова в B, где k >= 1, также принадлежат B', что легко, поскольку мы можем убрать первую 1 во всех словах в B и установить y как остальную часть строка, то y всегда будет содержать хотя бы одну единицу.

Таким образом, мы можем сделать вывод, что B = B'.


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

Регулярное выражение (нотация CS) будет таким:

10*1(0 + 1)*

В обозначениях, используемых распространенными механизмами регулярных выражений:

10*1[01]*

ЦФА:

DFA

Здесь q2 — конечное состояние.

"По крайней мере" является ключом к решению этого вопроса. Если слово станет «равным», то история будет другой.

person nhahtdh    schedule 19.02.2013
comment
@GrjeshChauhan: Какой у вас контрпример? - person ibid; 19.02.2013
comment
@nhahtdh обновите свой ответ, чтобы я мог проголосовать. вы правы, здесь есть еще один вопрос, связанный с . - person Grijesh Chauhan; 19.02.2013
comment
@GrjeshChauhan: Обновить что? - person nhahtdh; 19.02.2013
comment
@nhahtdh Я по ошибке проголосовал за вас, но я не могу вернуться, пока вы не обновите свой ответ :( - person Grijesh Chauhan; 19.02.2013