Добавлю ещё, что термин "эквивалентность" применительно к вашему алгоритму явно неудачен. "Эквивалентность", даже если её понимать неформально, всё же предполагает некоторую транзитивность. А у Вас с этим может быть плохо.
Допустим, что
и
--- состояния первого автомата, а
и
--- состояния второго. Допустим, оба автомата приходят по слову
в состояния
и
, по слову
--- в состояния
и
, а по слову
--- в состояния
и
. Тогда
,
и
. Имея эти три "эквивалентности", логично было бы ожидать, что
. Однако я не вижу резонов, по которым должно было бы найтись слово, переводящее первый автомат в
, а второй --- в
.
Конечно, если состояния
и
имеют разные типы (конечное/не конечное), то исходные автоматы не эквивалентны, ибо, в связи с наличием слов
,
и
, тип состояния должен сохраняться вдоль всей цепочки
. Но всё же говорить про эквивалентность тут как-то неловко.
Я бы предпочёл всё излагать в терминах соответствий. Пусть
--- множество состояний первого автомата, а
--- множество состояний второго. Нас интересует соответствие
, такое что
Индуктивно
можно задать так:
Легко показать, что для некоторого
справедливо
и
для этого
. Остаётся только найти требуемое
, что довольно просто сделать, пользуясь формулой перехода от
к
. Это произойдёт довольно быстро, так как справедлива оценка
.
На а далее всё просто: автоматы эквивалентны тогда и только тогда, когда состояния из любой пары, входящей в
, имеют один и тот же тип.
Программируется всё довольно легко. Если хотите, можете реализовывать этот, свой алгоритм. По сложности он такой же, как и мой, основанный на минимизации и сравнении двух минимальных автоматов.