Distinguer la procédure de décision vs le solveur SMT vs le prouveur de théorème vs le solveur de contraintes

24

Ces terminologies me confondent. Tel que je le comprend

  • Solveur SAT: décider de la satisfiabilité de la logique propositionnelle (en utilisant DPLL ou Local Search).
  • La procédure de décision est une procédure pour décider de la satisfiabilité d'une certaine théorie décidable du premier ordre.
  • Le solveur SMT est un solveur SAT + une procédure de décision.
  • Le prouveur de théorèmes indique quelque chose comme Dynamic Logic, par exemple l'outil KeY
  • Solveur de contraintes: je ne sais pas.

Mais je vois des gens appeler Z3 un prouveur de théorème. Je ne sais donc pas comment mépriser ces termes. Et quel est le terme le plus général pour tous? Merci.

qsp
la source

Réponses:

19

Le solveur SMT est un solveur SAT + une procédure de décision

Un solveur SAT est un solveur pour un problème de décision: le problème SAT est un problème de décision. De plus, ce problème de décision est "auto-réductible":

Le problème SAT est auto-réductible, c'est-à-dire que chaque algorithme qui répond correctement si une instance de SAT est résoluble peut être utilisé pour trouver une affectation satisfaisante

- ( wikipedia )

Cela signifie que les solveurs SAT peuvent également donner l'affectation satisfaisante, en plus de décider du problème.

Les solveurs TL; DR SMT résolvent une généralisation du problème SAT, en fonction des types / contraintes autorisés dans la théorie. En outre, ils permettent également le codage de relations de type de niveau supérieur à ce que permettent les codages SAT.

(UNE=B)(B=C)(UNE=C)

  1. Voir le solveur Beaver SMT qui peut même générer le problème SAT équivalent qui devrait être résolu.

Bien que le solveur QF_BV SMT ait cet avantage sur un solveur SAT, je ne pense pas que ce soit un avantage de complexité: ils sont tous deux essentiellement équivalents et prennent un temps exponentiel pour résoudre leurs pires problèmes. Mais en pratique, un solveur SMT QF_BV pourrait être beaucoup plus rapide en raison de cette connaissance supplémentaire. Voir ma réponse aux Limites des solveurs SMT , pour un exemple de quelque chose considéré comme "dur" que les solveurs SMT QF_BV (actuels) et les solveurs SAT étoufferaient tous les deux.

Il existe également des solveurs SMT qui tentent de résoudre des problèmes encore plus difficiles que la satisfaction booléenne (par exemple, autoriser des types et des contraintes sur des réels ou autoriser des quantificateurs); évidemment, ceux-ci sont théoriquement au moins aussi lents qu'un solveur SAT. Ces solveurs SMT permettent de résoudre une généralisation du problème SAT; au lieu d'utiliser des variables binaires, chaque "théorie" permet des relations / contraintes sur différents domaines, tels que des réels, ou des contraintes quantifiées (pour tous).

Prouveur de théorème

Un prouveur de théorème automatisé est un solveur qui, étant donné une sorte de système de preuve, certaines hypothèses et un objectif à prouver, "comblera les lacunes" entre les hypothèses et l'objectif. Il aura également une sorte de vérificateur pour vérifier les preuves (qui s'exécute rapidement). Un prouveur de théorème peut s'appuyer sur un solveur SAT pour remplir les blancs; en fait, siP=NP et il existe un algorithme pratique pour résoudre les problèmes NP-complets, on peut potentiellement prouver presque toutes les choses prouvables utiles (dans un délai raisonnable):

Mais ces changements peuvent avoir une signification pâle par rapport à la révolution qu'une méthode efficace pour résoudre les problèmes NP-complets entraînerait en mathématiques elle-même. Selon Stephen Cook, [19]

... il transformerait les mathématiques en permettant à un ordinateur de trouver une preuve formelle de tout théorème qui a une preuve d'une longueur raisonnable, car les preuves formelles peuvent facilement être reconnues en temps polynomial. Les exemples de problèmes peuvent inclure tous les problèmes de prix CMI.

- ( wikipedia )

[19]: Cook, Stephen (avril 2000). Le problème P versus NP. Clay Mathematics Institute (PDF) .

La raison pour laquelle cela fonctionnerait est que "les preuves formelles peuvent facilement être reconnues en temps polynomial" via le vérificateur, et P=NP impliquerait que les problèmes qui peuvent être vérifiés en temps polynomial peuvent également être résolus en temps polynomial.

Mais pour l'instant, les théoriciens automatisés utilisent principalement des heuristiques ou des algorithmes de temps exponentiels (mais sont toujours utiles).

Solveur de contraintes

Il s'agit généralement de reformulations des solveurs SAT / SMT dans d'autres langues. Si vous avez déjà utilisé des solveurs SAT / SMT pour résoudre un problème, vous pouvez vraiment aimer la capacité non déterministe des solveurs. Autrement dit, au lieu de dire à l'ordinateur comment faire quelque chose, vous lui dites ce que vous voulez , c'est-à-dire. quelles propriétés vous voulez que la sortie ait, et un solveur SAT / SMT le fera dans un "remplissage" non déterministe, sans vous déranger avec les détails d'implémentation. Ce type de paradigme de programmation est très attrayant, et s'appelle la programmation par contraintes , et pour fonctionner, il doit utiliser un solveur de contraintes (qui pourrait utiliser un solveur SAT / SMT dans le backend, selon les types et les contraintes qu'il vous permet d'utiliser) .

Mais je vois des gens appeler Z3 un prouveur de théorème. Je ne sais donc pas comment mépriser ces termes.

AFAIK, Z3 est une suite de nombreux outils, y compris un solveur SMT, plusieurs langages de vérification de modèle / vérification de modèle, et plus encore.

Et quel est le terme le plus général pour tous?

Je pense que la généralisation du problème de satisfiabilité est les Théories de Modulo de Satisfaisabilité , et donc le "solveur SMT" serait le plus général de tous. Cependant, toutes les implémentations de solveurs SMT ne résolvent pas toutes les théories, ce qui ne signifie pas que tous les solveurs SMT sont également généraux.

Realz Slaw
la source
1
Merci pour votre réponse. Mais je ne pense pas que le solveur SMT soit le terme le plus général. Comme les gens comparent souvent le solveur SMT au solveur de contraintes, voir par exemple stackoverflow.com/questions/10584990/…
qsp
@qsp Je me trompe peut-être, mais je ne sais pas comment cette comparaison implique cela. Quoi qu'il en soit, je ne suis tout simplement pas suffisamment informé pour savoir si CSP est en quelque sorte plus puissant / général que tous les SMT; si vous trouvez une référence pour cela, n'hésitez pas à modifier la réponse.
Realz Slaw