Eu tenho tentado implementar o algoritmo de Brzozowski, mas acabei de descobrir que ele cria autômatos abaixo do ideal para uma determinada classe de entradas, tendo mais um estado do que o que é realmente necessário no resultado. Eu posso mostrá-lo em um autômato trivial:
a b a b a b a b a b
>0 0 1 rev *0 0,2 - det >0 - 1 rev *0 - - det >0 1 2
1 1 2 --> 1 1 0 --> 1 2 5 --> 1 - 0,4 --> 1 1 2
*2 0 2 >2 - 1,2 2 2 3 2 1,2 - 2 2 3
*3 4 - 3 - 2 *3 1 3
*4 4 1 4 3,4 -
*5 5 5 5 5 1,5
>6 3,4,5 1,2,5
Aqui rev é a parte de reversão da borda, onde eu já havia removido as transições no epsilon, e det é a determinação através da construção do conjunto de potências, criando novos estados assim que os descobre, recursivamente.
O problema aqui é o seguinte: quando adiciono o estado extra para compensar os três estados iniciais diferentes após a primeira reversão da borda e construção do conjunto de potências, nada volta a esse estado e, portanto, não consigo me livrar dele mais tarde por ser equivalente para o estado inicial original.
Existe algo errado com a maneira como estou fazendo isso? Estou esquecendo de algo?