Não se acredita que a satisfação geral (com algumas exceções, como Cláusulas de Horn), tenha uma solução algorítmica. No entanto, o algoritmo a seguir parece ser uma solução para satisfação geral. Qual é exatamente a falha com o seguinte algoritmo?
- Deixei seja um conjunto vazio que conterá todas as variáveis que necessariamente precisam ser verdadeiras ou falsas.
- Deixei ser o conjunto de cláusulas.
- Repetir .
- Sempre que uma variável não condicional † for encontrada, remova-a de e insira-o .
- Se isso deixar uma implicação AND vazia ‡ , remova todas as variáveis nessa implicação vazia de e insira no .
- Se isso deixar uma implicação OR vazia ‡ , crie novas instâncias do algoritmo, onde cada instância lida com uma variável na implicação (ou seja, se a implicação for:, crie uma instância em que é inserido em um onde é inserido em e um onde e são inseridos em )
- Defina todas as variáveis em para o valor que eles necessariamente têm que ser.
- Reinsira as variáveis em no com seus valores alterados e verifique se todas as cláusulas foram atendidas.
- Se a satisfação for alcançada, retorne , caso contrário, retorne "Não satisfeito".
† Uma variável não condicional é definida como uma variável necessária verdadeira ou falsa, por exemplo ou .
‡ Uma implicação vazia é definida como uma implicação em que um lado está vazio (por exemplo,) ou o outro lado é necessariamente verdadeiro (por exemplo, .
Para obter uma compreensão mais intuitiva do algoritmo, considere o seguinte conjunto de cláusulas :
O algoritmo fará o seguinte:
1) Desde , , são variáveis não condicionais, o algoritmo irá inseri-las em . .
2) Remoção , e deixará as cláusulas vazias: . Estes serão adicionados a. .
3) Reinserir as variáveis em resultará na violação das primeiras cláusulas: . Desde a é falso, é falso, significando que a cláusula (v) é violada. O algoritmo retornará "Incompatível"
Estou ciente de que o algoritmo parece confuso. Por favor, não hesite em pedir esclarecimentos.
A partir dos comentários, agora percebo que não existe um algoritmo de satisfação geral eficiente e conhecido . Ainda estou interessado em comentários sobre o meu algoritmo. Funciona? Como ele se compara com algoritmos comuns?