Les solveurs SAT offrent un moyen puissant de vérifier la validité d'une formule booléenne avec un quantificateur.
Par exemple, pour vérifier la validité de , nous pouvons utiliser un solveur SAT pour déterminer si φ ( x ) est satisfaisable. Pour vérifier la validité de ∀ x . φ ( x ) , nous pouvons utiliser un solveur SAT pour déterminer si ¬ φ ( x ) est satisfaisable. (Ici x = ( x 1 , … , x n ) est un vecteur n de variables booléennes, et φ est une formule booléenne.)
Les solveurs QBF sont conçus pour vérifier la validité d'une formule booléenne avec un nombre arbitraire de quantificateurs.
Et si nous avons une formule avec deux quantificateurs? Existe-t-il des algorithmes efficaces pour vérifier la validité: ceux qui sont meilleurs que de simplement utiliser des algorithmes génériques pour QBF? Pour être plus précis, j'ai une formule de la forme (ou ∃ x . ∀ y . ψ ( x , y ) ), et souhaitez vérifier sa validité. Existe-t-il de bons algorithmes pour cela? Edit 4/8: J'ai appris que cette classe de formules est parfois connue sous le nom de 2QBF, donc je recherche de bons algorithmes pour 2QBF.
Spécialisation supplémentaire: dans mon cas particulier, j'ai une formule de la forme dont je veux vérifier la validité, où f , g sont des fonctions qui produisent une sortie à k bits. Existe-t-il des algorithmes pour vérifier la validité de ce type particulier de formule, plus efficacement que les algorithmes génériques pour QBF?
PS Je ne demande pas la dureté du pire des cas, en théorie de la complexité. Je pose des questions sur les algorithmes pratiquement utiles (tout comme les solveurs SAT modernes sont pratiquement utiles sur de nombreux problèmes, même si SAT est NP-complet).
Réponses:
Si vous me le permettez, de manière assez flagrante, nous avons écrit un article sur l' algorithme basé sur l'abstraction pour l' an dernier pour 2QBF . J'ai une implémentation pour qdimacs, que je peux fournir si vous le souhaitez mais d'après mon expérience, on peut grandement bénéficier de la spécialisation de l'algorithme pour un problème particulier. Il existe également un article plus ancien intitulé A Comparative Study of 2QBF Algorithms , qui présente également des algorithmes assez facilement implémentables.
la source
J'ai lu deux articles à ce sujet, un spécifiquement lié au 2QBF. Les articles sont les suivants:
Détermination incrémentale , Markus N. Rabe et Sanjit Seshia, Théorie et applications des tests de satisfaction (SAT 2016).
Ils ont implémenté leur algorithme dans un outil nommé CADET . L'idée de base est d'ajouter progressivement de nouvelles contraintes à la formule jusqu'à ce que les contraintes décrivent une fonction Skolem unique ou jusqu'à ce que l'absence soit confirmée.
Le deuxième est la résolution incrémentielle du QBF , Florian Lonsing et Uwe Egly.
Implémenté dans un outil nommé DepQBF . Il n'impose aucune contrainte sur le nombre d'alternances quantifiantes. Cela commence par l'hypothèse que nous avons des formules qbf étroitement liées. Il est basé sur une résolution incrémentielle et ne renvoie pas les clauses apprises lors de la dernière résolution. Il ajoute des clauses et des cubes à la formule actuelle et s'arrête si les clauses ou les cubes sont vides, représentant insat ou sat.
Edit : Juste pour une perspective à quel point ces approches fonctionnent pour les repères 2QBF. Veuillez consulter les résultats de QBFEVal-2018 pour les résultats du concours annuel QBF QBFEVAL . En 2019, il n'y avait pas de piste 2QBF.
Ces deux approches fonctionnent donc très bien en pratique (au moins sur les benchmarks QBFEVAL).
la source
la source