Dans le passé, j'ai implémenté des modèles de coordination utilisant SAT et la satisfaction des contraintes régulières comme cheval de bataille principal dans leurs moteurs. Poursuivant dans cette ligne de travail, je voudrais rendre les modèles plus interactifs, et la meilleure façon que je vois de le faire est d'ouvrir le solveur de contraintes afin qu'il ne soit plus une boîte noire.
Ainsi, je souhaite en savoir plus sur la satisfaction des contraintes lorsque les contraintes ont ce que j'appellerai des variables externes , des prédicats et des fonctions , c'est-à-dire que le langage de contraintes peut avoir des prédicats tels que qui ne peuvent être que satisfait en consultant un agent extérieur au solveur, et seulement lorsque est à la masse. Un scénario où cela est utile est chaque fois que correspond à un processus de décision externe qui ne peut pas être incorporé dans le solveur de contraintes. De tels solveurs de contraintes pourraient être appelés ouverts (car les contraintes ne sont pas entièrement connues) ou interactifs. (car une interaction est nécessaire pour procéder avec satisfaction aux contraintes).
Je voudrais connaître les deux:
- recherches théoriques effectuées dans ce sens
- des outils ou des bibliothèques qui implémentent des solveurs de contraintes qui permettent une interaction avec le monde extérieur pendant le processus de résolution de contraintes.
En lisant votre question, je suis également d'accord pour dire que les théories de Modulo sur la satisfaction sont étroitement liées à vos besoins. Je suggérerais de lire le livre Decision Procedures - An Algorithmic Point of View .
la source
la source
Je suis un peu confus au sujet du terme interactif. Je vais carillon avec les autres et ajouter qu'un solveur SMT pourrait être utile. Pour ajouter au commentaire de Walter Bishop, des diapositives pour le livre sur les procédures de décision (Kroening et Strichman) sont disponibles. Le traitement approfondi de John Harrison dans Handbook of Practical Logic and Automated Reasoning peut également vous intéresser. Un exemple de code est disponible en ligne.
La princesse de Philipp Ruemmer prend en charge l'arithmétique avec des prédicats non interprétés, qui pourraient correspondre à ce que vous entendez par ouvert. Il est écrit en Scala, utilise la correspondance E pour gérer la quantification et fournit des interpolants.
la source
Qu'en est-il des outils, si vous décidez de vous Prolog comme langue de choix, je peux vous suggérer quelques approches d'implémentation:
Prolog est un langage de programmation, qui convient à de nombreux types de solveurs (et la plupart d'entre eux ont leurs solveurs à domaine fini).
la source