В вычислении, если два произвольных регулярных выражения имеют перекрывающиеся решения (при условии, что это возможно).
Например, можно показать, что эти два регулярных выражения не имеют пересечений методом грубой силы, потому что два набора решений вычислимы, потому что они конечны.
^1(11){0,1000}$ ∩ ^(11){0,1000}$ = {}
{1,111, ..., ..111} ∩ {11,1111, ..., ...11} = {}
{} = {}
Но замена {0,1000}
на *
исключает возможность грубого решения, поэтому должен быть создан более умный алгоритм.
^1(11)*$ ∩ ^(11)*$ = {}
{1,^1(11)*$} ∩ {^(11)*$} = {}
{1,^1(11)*$} ∩ {11,^11(11)*$} = {}
{1,111,^111(11)*$} ∩ {11,^(11)*$} = {}
.....
В другом подобном вопросе один ответ должен был вычислить регулярное выражение пересечения. Это возможно сделать? Если так, то как написать алгоритм, чтобы сделать такую вещь?
Я думаю, что эта проблема может быть областью проблемы остановки .
EDIT:
Я использовал принятое решение для создания DFA для примера проблемы. Довольно просто увидеть, как вы можете использовать BFS или DFS на графике состояний для M_3
, чтобы определить, достижимо ли конечное состояние из M_3
.