Como autômatos XOR?

7

Digamos que temos três DFAs. Nós sabemos como OR, AND, ou NOT eles. Mas como alguém os XOR? Não há uma única menção a isso online.

xXORyXORz=((x|y)(¬x|y)|z)(¬((x|y)(¬x|y))|z) . Isso é muito complicado e demorado para desenhar. Não existe outro caminho?

Obrigado por tomar o tempo!

Xpl0
fonte
11
Nota: xor é a diferença simétrica do conjunto .
Raphael
11
Obrigado Raphael! O que acabei fazendo foi o fechamento ε, mas definir um estado como aceitável se o número de estados aceitantes incluidos fosse estranho. Se um estado não tinha transição para um símbolo, apenas assumi a rejeição por esse estado, mas não pelos outros com os quais ele estava agrupado.
Xpl0

Respostas:

10

Observe que a construção para a interseção e união ("e" e "ou") de dois autômatos é exatamente a mesma, exceto pela definição de quais estados estão aceitando. O mesmo princípio se aplica a qualquer combinação booleana de qualquer conjunto finito de linguagens: use a construção do produto e a definição apropriada de quais estados devem ser aceitos.

David Richerby
fonte
Muito útil, tudo fez sentido imediatamente. Obrigado!
Xpl0
6

Como as três máquinas são todas determinísticas, a operação combinada não é nada complicada. Execute as máquinas em paralelo, usando uma construção direta do produto como a que também é usada para interseção e, em cada XOR de três estados, a presença de estados finais para verificar se o novo estado do produto XOR deve ser aceito.

Hendrik Jan
fonte
Não há muita diferença entre sua resposta e a de David, mas eu tive que escolher uma. Estou muito grato por sua ajuda!
Xpl0
Verdadeiro: nossas respostas foram escritas um minuto depois da outra. Ainda bem que poderíamos ajudar. Seus agradecimentos valem mais do que os créditos que estão em jogo aqui.
Jan Hendrik
2

Como você está trabalhando apenas com DFAs, é possível XOR dois autômatos construindo o produto cruzado dos dois autômatos e, em seguida, assumindo como estados de aceitação aqueles pares de estados dos quais um estado é um estado de aceitação, mas não ambos.

Observe que essa construção funciona apenas para DFAs em que cada estado possui exatamente um estado sucessor para cada símbolo do alfabeto. Isso garante que você sempre alcance um estado ao simular o autômato e a aceitação de uma palavra depende apenas se esse estado é um estado final ou não. Às vezes, os DFAs são definidos para que cada estado tenha no máximo um estado sucessor para cada símbolo do alfabeto. Nesse caso, a construção acima não funciona mais, porque agora existe uma segunda razão pela qual uma palavra não é aceita: com algumas palavras, nenhum estado é atingido.

Hoopje
fonte
"Nesse caso, a construção acima não funciona mais" - basicamente funciona. Insira um estado de erro e use a construção padrão ou leve as transições ausentes (ou seja, rejeição) para o autômato do produto.
Raphael
@Raphael. Claro que você pode adicionar um estado de erro. Dessa forma, você garante que cada estado tenha exatamente um estado sucessor e, em seguida, a construção funcionará. O ponto é que este é um passo necessário.
21118 Hoopje
Não, não é. A construção é fácil de adaptar; talvez eu não tenha sido claro o suficiente? Se um dos autômatos de dois componentes não tiver uma transição para a letra, proceda como se ela fosse rejeitada (ou seja, não inclua transição para interseção; inclua um para união e diferença de conjunto simétrico e vá para o autômato original correspondente).
Raphael
Obrigado Hoopje! Eu basicamente segui suas instruções, apenas com o que Raphael adicionou.
Xpl0
@Raphael. Então você precisa saber qual função booleana é aplicada durante a construção dos estados , e não apenas ao selecionar quais estados estão aceitando (como é reivindicado em todas as respostas à pergunta).
21414 Hoopje