Пересечение двух регулярных выражений

Спасибо за любую помощь заранее!

Я беру курс автоматов в школе и для жизни не могу решить пересечение двух регулярных выражений. Я посмотрел в Интернете и здесь и обнаружил, что могу создать NFA для обоих языков, дополнить их по отдельности, а затем объединить (ise) - здесь не уверен на английском языке.

После этого я затем дополняю объединение, чтобы найти последующий DFA и найти регулярное выражение из него, которое будет регулярным выражением пересечения. Однако именно с расчетом всего этого я борюсь.

У меня есть вопрос ниже, где я изменил выражения, чтобы не просто задать учебный вопрос. Оба находятся над одним и тем же алфавитом: {a,b,c,d}.

Пусть R1 = (a(a+d))* и R2 = ((a+b)+a+(a+d))*

Я расширил языки, чтобы попытаться понять их лучше.

Мысли: R1 содержит пустое слово (эпсилон) и слова длины 2 и 4 R2 содержит пустое слово и слова длины 3

Последующий язык пересечения должен делиться на 6?

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

Спасибо!


person user62622    schedule 26.02.2017    source источник
comment
Разве R1 не эквивалентен (a(a+d))*? Кроме того, это дополнение.   -  person melpomene    schedule 26.02.2017
comment
Ах, хорошая мысль. Я удалю последнее объявление сейчас. Спасибо.   -  person user62622    schedule 26.02.2017
comment
Я только что понял, что не понимаю ваших обозначений. Что означает +?   -  person melpomene    schedule 26.02.2017
comment
Я считаю, что (a+b) эквивалентно (a|b).   -  person user62622    schedule 26.02.2017
comment
Тогда R2 равно (a+b+d)*.   -  person melpomene    schedule 26.02.2017


Ответы (1)


Существует простой DFA для R1:

DFA для R1

R2=(a|b|d)*, как сказал @melpomene в своем комментарии, что означает любое слово с буквами a, b или d, поэтому DFA для R2 очевидно:

eDFA для R2

Пересечение - это R1 (поскольку R2 - это каждое тело с a, b или d)

Мы можем завершить этот DFA следующим образом:

DFA для пересечения

person Gerard Rozsavolgyi    schedule 01.03.2017