La satisfiabilité générale (à quelques exceptions telles que les clauses de Horn) ne semble pas avoir de solution algorithmique. Cependant, l'algorithme suivant semble être une solution pour la satisfiabilité générale. Quel est exactement le défaut de l'algorithme suivant?
- Laisser être un ensemble vide qui contiendra toutes les variables qui doivent nécessairement être vraies ou fausses.
- Laisser être l'ensemble des clauses.
- Boucle à travers .
- Chaque fois qu'une variable non conditionnelle † est trouvée, supprimez-la de et l'insérer dans .
- Si ce qui laisse un vide et l' implication ‡ , supprimer toutes les variables de cette implication vide de et l' insérer dans .
- Si cela laisse une implication OU vide ‡ , créez de nouvelles instances de l'algorithme, où chaque instance traite une variable dans l'implication (c'est-à-dire si l'implication est: , créez une instance où est inséré dans , un où est inséré dans et un où et sont insérés dans ).
- Définissez toutes les variables dans à la valeur qu'ils doivent nécessairement être.
- Réinsérez les variables dans dans avec leurs valeurs modifiées et vérifiez si toutes les clauses sont satisfaites.
- Si la satisfiabilité est satisfaite, retournez , sinon retournez "Not Satisfiable".
† Une variable non conditionnelle est définie comme une variable nécessaire vraie ou fausse, par exemple ou .
‡ Une implication vide est définie comme une implication où un côté est vide (par ex.) ou l'autre côté est nécessairement vrai (par exemple .
Pour obtenir une compréhension plus intuitive de l'algorithme, considérez l'ensemble de clauses suivant :
L'algorithme fera ce qui suit:
1) Depuis , , sont des variables non conditionnelles, l'algorithme les insérera dans . .
2) Suppression , et laissera les clauses vides: . Ceux-ci seront ajoutés à. .
3) Réinsérer les variables dans entraînera la violation des premières clauses: . Depuis c'est faux, est faux, ce qui signifie que la clause (v) est violée. L'algorithme renverra "Non satisfaisant"
Je suis conscient que l'algorithme semble déroutant. N'hésitez pas à demander des éclaircissements.
D'après les commentaires, je me rends compte maintenant qu'il n'y a pas d' algorithme de satisfiabilité générale efficace connu . Je suis toujours intéressé par les commentaires sur mon algorithme. Est-ce que ça marche? Comment se compare-t-il aux algorithmes courants?