Laisser et être -vecteurs de variables booléennes. J'ai un prédicat booléen sur . Je donne mon ami Priscilla. En réponse, elle me donne, un prédicat booléen sur et elle prétend que
ou en d'autres termes, que
Je voudrais vérifier sa réclamation en quelque sorte. Comment Priscilla peut-elle m'aider à vérifier cette affirmation?
Vous pouvez supposer que les deux et sont représentés comme des formules CNF, et qu'ils ne sont pas trop grands (taille polynomiale, ou quelque chose).
Dans un monde idéal, ce serait génial si je pouvais réduire le problème de vérification de cette réclamation auprès de SAT: j'ai un solveur SAT, et ce serait génial si je pouvais utiliser le solveur SAT pour vérifier cette réclamation. Cependant, je suis à peu près sûr qu'il ne sera pas possible de formuler le problème de la vérification de cette revendication directement en tant qu'instance SAT; tester la validité d'une formule 2QBF est presque certainement plus difficile que SAT. (Le la direction est facile à formuler comme une instance SAT, mais la la direction est difficile car elle implique intrinsèquement deux quantificateurs alternés.)
Mais supposons que Priscilla puisse me fournir des preuves supplémentaires pour étayer sa demande. Y a-t-il des preuves supplémentaires ou un témoin que Priscilla pourrait me donner, ce qui me permettrait de vérifier facilement sa demande? En particulier, y a-t-il des preuves ou des témoins supplémentaires qu'elle pourrait me fournir, qui me permettraient de formuler facilement le problème de la vérification de sa réclamation en tant qu'instance de SAT (à laquelle je peux ensuite appliquer mon solveur SAT)?
Un aspect inhabituel de mon environnement est que je suppose (heuristiquement) que j'ai un oracle pour SAT. Si vous aimez la théorie de la complexité, vous pouvez y penser de cette façon: je prends le rôle d'une machine capable de calculer des choses dans (c.-à-d. ), et je cherche à vérifier l'affirmation de Priscilla à l'aide d'un algorithme . Merci à mdx pour cette façon de penser les choses.
Ma motivation / application: je cherche à faire une vérification formelle d'un système (par exemple, vérification de modèle symbolique), et une étape clé du raisonnement implique l'élimination du quantificateur (c'est-à-dire, à partir de , obtenez ). J'espère un moyen propre de vérifier que l'élimination du quantificateur a été effectuée correctement.
S'il n'y a pas de solution qui fonctionne pour tous les possibles , n'hésitez pas à suggérer une solution "saine mais pas complète", c'est-à-dire une technique qui, pour me permet de vérifier l'équivalence revendiquée. (Même s'il ne parvient pas à vérifier la réclamation sur certainsqui satisfont la demande, je peux toujours essayer cela comme une heuristique, tant qu'il ne prétend jamais à tort avoir vérifié une fausse demande. Sur tout donné, cela pourrait fonctionner ou non; si cela ne fonctionne pas, je ne suis pas pire que là où j'ai commencé.)
first-order-logic
tag soit justifié. La question porte sur les formules booléennes quantifiées.Réponses:
Voici deux techniques que j'ai pu identifier:
Identifiez une fonction Skolem explicite. Supposons que Priscilla puisse identifier une fonction explicitef tel que
tient. Il s'ensuit ensuite que la prétention de Priscilla est correcte.
Cela signifie que Priscilla peut nous aider à vérifier sa demande en fournissant une fonctionf de sorte que la proposition ci-dessus est valable. Nous pouvons confirmer que la proposition ci-dessus est vraie en testant la formule suivante pour la satisfiabilité:
Si cette formule n'est pas satisfaisante, la réclamation de Priscilla a été vérifiée.
Une mise en garde est que Priscilla doit être en mesure d'identifier une fonction appropriéef . Une autre mise en garde est que nous avons besoinf être concrètement représentable sous une forme concise, disons, comme un circuit booléen de taille polynomiale. Cependant, si ces conditions sont remplies, cette technique devrait fonctionner.
Un argument hybride. Considérons le cas particulier de ce problème, où nous quantifions sur une variable d'un bit (plutôt qu'unn -bit variable); il s'avère que le problème est facile à résoudre dans ce cas. Cela suggère que nous essayons d'enchaîner cette techniquen fois, chaque fois en supprimant un bit de plus y . Il s'avère que cette idée fonctionnera parfois, mais pas toujours.
Permettez-moi d'expliquer comment vérifier la réclamation de Priscilla dans le cas oùy=(y1) est une variable d'un bit. alors∃y.Q(x,y) est équivalent à Q(x,False)∨Q(x,True) . Cette dernière formule est au plus deux fois plus grande queQ , donc toujours de taille polynomiale. Maintenant, nous pouvons utiliser notre solveur SAT pour tester siQ(x,False)∨Q(x,True) est équivalent à P(x) ; l'équivalence est exacte si la formule suivante n'est pas satisfaisable:
Donc, si nous quantifions sur un seul bit, cela donne un moyen de vérifier que l'élimination du quantificateur a été effectuée correctement.
Pour résoudre le problème d'origine, appliquez ceci plusieurs fois. Le travail de Priscilla sera de nous donnern+1 prédicats booléens R0,R1,R2,…,Rn tel que
Notre tâche sera de vérifier si tous ces prédicats booléens ont été correctement générés. Nous pouvons le faire en testant siQ(x,y)≡R0(x,y) , P(x)≡Rn(x) ,
Notez que ce dernier est une instance d'élimination de quantificateur avec un seul bit, nous avons donc déjà décrit comment tester qu'il a été fait correctement en utilisant un solveur SAT. Nous pouvons également tester siQ≡R0 et P≡R en utilisant un solveur SAT directement. Ainsi, nous pouvons vérifier si Priscilla a généréR0,…,Rn correctement. Si c'est le cas, nous avons vérifié queP a été généré correctement.
Une mise en garde est que Priscilla doit être en mesure de générer leRi 's. Une mise en garde plus importante est que la taille de tous lesRi doit être raisonnable (par exemple, de taille polynomiale). Si Priscilla génère leRi naïvement, leur taille pourrait croître de façon exponentielle avec i , ce qui n'est pas bon. Ainsi, Priscilla aura besoin d'un moyen de simplifier à chaque étape; il doit exister une séquence deR0,…,Rn qui sont tous de taille polynomiale, et Priscilla doit pouvoir trouver une telle séquence. Ce n'est nullement garanti. Cela dit, si Priscilla peut le faire, cette technique devrait fonctionner.
Je ne suis pas entièrement satisfait de ces techniques - ce sont des heuristiques incomplètes, et elles peuvent échouer sur certains / nombreux exemples de problèmes - donc je serais toujours intéressé de voir d'autres façons d'aborder ce problème.
la source