Когда объединение и объединение дают одинаковое регулярное выражение - PullRequest
1 голос
/ 26 января 2020

{w∈ {0,1} ∗ | w содержит ровно одно вхождение 01}

Я получаю результат как объединением, так и конкатенацией

1 * 0 * 011 * 0 *

ИЛИ

(1 * U 0 *) 01 (1 * U 0 *)

как получилось?

1 Ответ

1 голос
/ 27 января 2020

Ваши два регулярных выражения не эквивалентны. Первый правильный, а второй нет. Чтобы увидеть разницу, используйте дистрибутивное свойство конкатенации:

r1 = 1*0*011*0*

r2 = (1* U 0*)01(1* U 0*)
   = 1*011* U 1*010* U 0*011* U 0*010*

Обратите внимание, что r2 - это объединение четырех подвыражений, каждое из которых описывает язык. Каждый из описанных языков является подмножеством языка r1:

1*0*011*0*    1*0*011*0*    1*0*011*0*    1*0*011*0*    
1*  011*      1*  01  0*      0*011*        0*01  1*

Следовательно, L (r2) является подмножеством L (r1). В комментариях уже указывалось, что L (r1) не является подмножеством L (r2), контрпример (рассмотрим строку 0110).

Чтобы убедиться, что r2 верен, сначала обратите внимание, что любая строка в L (r2) на вашем языке (единственное вхождение 01 находится в середине выражения, и выражение должно его сгенерировать), а затем утверждают, что любая строка с ровно одним 01 должна быть сгенерирована этим выражением. Индуктивный аргумент прост и оставлен в качестве упражнения.

...