Soit une formule CNF satisfaisante avec n variables et m clauses. Soit S F 1 l'espace de solution de F 1 .
Considérons le problème de déterminer, étant donné , une autre formule CNF F 2 avec le même ensemble de variables que F 1 , avec S F 2 = S F 1 (même espace de solution que F 1 ), mais avec le moins de clauses possible ( le seul objectif est de minimiser le nombre de clauses, donc le nombre de littéraux que chaque clause peut avoir n'est pas pertinent).
Question
Quelqu'un a-t-il déjà étudié ce problème? Y a-t-il des résultats dans la littérature à ce sujet?
À titre d'exemple, considérons la formule CNF (chaque ligne est une clause):
x 2 ∨ x 3 ∨ x 4 ¬ x 1 ∨ x 2 ∨ x 4 ¬ x 1 ∨ x 2 ∨ ¬ x 3 ¬ x 1 ∨ x 3 ∨ x 5 ¬ x 1 ∨ x 2 ∨ ¬ x 5
et la formule :
x 2 ∨ x 3 ∨ x 4 ¬ x 1 ∨ x 3 ∨ x 5 ¬ x 1 ∨ x 2
les deux ont le même espace de solution, mais alors que a 6 clauses, F 2 n'en a que 4 .
Enfin, considérons la formule :
¬ x 1 ∨ x 3 ∨ x 5 ¬ x 1 ∨ x 2
L'espace de solution est à nouveau le même, mais avec seulement clauses.
la source
Réponses:
Le problème de déterminer s'il existe une formule CNF équivalente avec au plus un nombre donné de littéraux est -complet. La version minimisant le nombre de clauses est dans un facteur de n de la taille de la formule, où n est le nombre de variables. Voir section 6 de:Πp2 n n
Un résultat récent montre que le calcul d'une borne inférieure particulière pour la taille de la formule CNF équivalente la plus courte (mesurée par le nombre de clauses, comme vous le spécifiez) est NP-complet. Ce document indique également que votre problème de minimiser le nombre de clauses est -complete ainsi, en citant le document Umans ci - dessus, bien pourquoi ce qui suit est pas immédiatement évident pour moi.Πp2
la source
Le problème de minalisation du circuit est insoluble (voir les commentaires ci-dessous). De plus, ce qui pourrait vous intéresser, c'est la technique que certains solveurs SAT appliquent (au moins dans une certaine mesure) qui est appelée prétraitement SAT. Par exemple, le solveur MiniSAT bien connu utilise un minimiseur CNF SatELite pour prétraiter une instance. Google Scholar donne également de nombreux résultats pour le "prétraitement sat".
la source
la principale solution std / connue pour la minimisation CNF dans EE est l' algorithme Quine-McCluskey qui existe de nombreuses implémentations, certaines du domaine public. cependant, je crois comprendre que (non mentionné dans l'article actuel de wikipedia) la plupart reviennent à l'heuristique et aux algorithmes gourmands pour trouver des solutions, en particulier pour les grandes formules, c'est-à-dire qu'elles ne sont pas nca. trouver la solution optimale esp. pour les grandes instances d'entrée.
Quine-MCluskey est une généralisation du travail avec les cartes de Karnough dont les diagrammes peuvent réussir pour de petites instances.
et notez qu'il peut y avoir plusieurs solutions optimales en termes de formules équivalentes avec la même taille de clause (minimale), cela sera souligné dans une bonne référence sur le subj. trouver le minimum se résume apparemment à lister tous les principaux implicits qui peuvent impliquer une explosion exponentielle massive dans la mémoire / "espace" par rapport à la taille de la formule originale.
la source