Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Introduction `
a la programmation logique et
par contraintes
Pascal Schreck
Universit´e de Strasbourg - LSIIT, UMR CNRS 7005
Contraintes
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un peu d’histoire
RootsCalcul, preuves et automatisme
I calculs
I automates
Contraintes
O x y x+y
(cc). SolsticedHiver (source Wikip´edia)
I automates
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un peu d’histoire
RootsCalcul, preuves et automatisme
I calculs
(cc) Roger McLassus (source Wikip´edia)
(cc). SolsticedHiver (source Wikip´edia)
I automates
Contraintes
I automates
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un peu d’histoire
RootsCalcul, preuves et automatisme
I calculs
I automates
c´el´ebr´ee le 13 octobre
Contraintes
I automates
I preuves
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un peu d’histoire
Apr`es la crise des fondements
Deux questions
I que sait-on prouver ?
Contraintes
I en restant `a l’int´erieur d’un syst`eme formel : pas tout ce qui est “vrai” !
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un peu d’histoire
Apr`es la crise des fondements
Deux questions
I que sait-on prouver ?
I en restant `a l’int´erieur d’un syst`eme formel : pas tout ce qui est “vrai” !
I th´eor`eme d’incompl´etude de G¨odel
G¨odel, Esher et Bach Les brins d’une guirlande ´
eternelle
Douglas Hofstadter
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un peu d’histoire
Apr`es la crise des fondements
Deux questions
I que sait-on prouver ?
I que sait-on calculer ?
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un peu d’histoire
Apr`es la crise des fondements
Deux questions
I que sait-on prouver ?
I que sait-on calculer ?
I pas tout !
I machines de Turing, probl`eme de l’arrˆet : version “automate” de la notion de calcul
I fonctions µ-r´ecursives (Herbrand, Kleene, Church) : version “fonctionnelle” de la notion de calcul
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un peu d’histoire
Apr`es la crise des fondements
Deux questions
I que sait-on prouver ?
I que sait-on calculer ?
I pas tout !
I machines de Turing, probl`eme de l’arrˆet : version “automate” de la notion de calcul
I fonctions µ-r´ecursives (Herbrand, Kleene, Church) : version “fonctionnelle” de la notion de calcul
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un peu d’histoire
Apr`es la crise des fondements
Deux questions
I que sait-on prouver ?
I que sait-on calculer ?
I pas tout !
I machines de Turing, probl`eme de l’arrˆet : version “automate” de la notion de calcul
I fonctions µ-r´ecursives (Herbrand, Kleene, Church) : version “fonctionnelle” de la notion de calcul
Contraintes
I du calculateur `a l’ordinateur
I repr´esentation “logique” des donn´ees
I codage d’un enchaˆınement d’op´erations “en dur”
I codage d’un enchaˆınement d’op´erations en m´emoire avec des 0 et de 1 ... dur `a ´ecrire, `a lire, `a d´ebuger I langages de “haut niveau” et paradigmes de
programmation
I imp´eratif/proc´edural et objets (⇐ Turing)
I fonctionnel (⇐ Church)
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un peu d’histoire
I imp´eratif/proc´edural et objets
I Fortran (1954), Cobol (1959) Algol, Simula
I Pascal, Ada, C
I Smalltalk, C++, Java, C# I fonctionnel
I Lisp (1958), Scheme, Common Lisp
I ML, Ocaml, F# I Erlang, Scala, I logique I Absys (1969) I Prolog (1972), λProlog I CLIPS, CLP(),
Contraintes
I travaux sur des prouveurs automatiques en logique du 1er ordre
I travaux sur les langues naturelles (TAL) Colmerauer, Roussel
I Prolog I d´evelopp´e `a Marseille (72), large diffusion
I Warren : notion de machine virtuelle → Prolog d’Edimbourg.
I Langages de 5`eme g´en´eration, etc. (avatars actuels : langages `a contraintes, ontologies ...)
I Prolog IV, Sictus : programmations par contraintes
I SWI-Prolog : dialecte d’Edimbour + beaucoup de biblioth`eques
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Logique et automatisation
des preuves
Contraintes
I ou : a ∨ b, (a + b en logique combinatoire, graph. )
I non : ¬a, (a en logique combinatoire graph. )
I implique : a ⇒ b
I ´equivalent : a ⇔ b
I formule et valeur de v´erit´e : une variable prop. peut prendre la valeur vrai ou faux (1 ou 0), on peut ainsi interpr´eter une formule (notions de satisfaisable, valide) a ∨ ¬a est valide (tautologie), a ⇒ b est satisfaisable. ¬a ∨ b et a ⇒ b sont ´equivalentes.
I preuve d’une formule logique ?
I table de v´erit´e (“preuve” s´emantique et validit´e )
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un petit exercice
a Si Marie est `a la biblioth`eque (M) alors soit Jean est all´e au cin´ema (J), soit Pierre est rentr´e chez lui (P)
b Soit Marie est `a la biblioth`eque, soit Pierre est rentr´e chez lui (ou les deux)
c si Jean est all´e au cin´ema, alors Marie n’est pas `a la biblioth`eque
d Pierre est rentr´e chez lui Montrer que si a et b et c alors d .
Contraintes
c si Jean est all´e au cin´ema, alors Marie n’est pas `a la biblioth`eque
d Pierre est rentr´e chez lui Montrer que si a et b et c alors d .
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un petit exercice
a M ⇒ J ∨ P b M ∨ Pc si Jean est all´e au cin´ema, alors Marie n’est pas `a la biblioth`eque
d Pierre est rentr´e chez lui Montrer que si a et b et c alors d .
Contraintes
d Pierre est rentr´e chez lui Montrer que si a et b et c alors d .
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un petit exercice
a M ⇒ J ∨ P b M ∨ P c J ⇒ ¬M d PContraintes
d P
Montrer que si a et b et c alors d . (b) supposons que (*) M, alors (a) J ou P,
supposons que (**) J, alors (c) ¬M, contradiction,
reprise (**) supposons que P alors fini, reprise (*) supposons que P alors fini
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un petit exercice
a M ⇒ J ∨ P b M ∨ P c J ⇒ ¬M d PMontrer que si a et b et c alors d . (b) supposons que (*) M, alors (a) J ou P,
supposons que (**) J, alors (c) ¬M, contradiction,
reprise (**) supposons que P alors fini, reprise (*) supposons que P alors fini R`egles :
I raisonnement par cas (´elimination de ∨)
I modus ponens (´elim/intro de ⇒)
Contraintes
d P
Montrer que si a et b et c alors d . R`egles :
I
Hyp, A ` R Hyp, B ` R Hyp, A ∨ B ` R
I modus ponens (´elim/intro de ⇒)
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un petit exercice
a M ⇒ J ∨ P b M ∨ P c J ⇒ ¬M d PMontrer que si a et b et c alors d . R`egles : I Hyp, A ` R Hyp, B ` R Hyp, A ∨ B ` R I Hyp ` A Hyp ` A ⇒ R Hyp ` R Hyp, A ` R Hyp ` A ⇒ R
Contraintes
d P
Montrer que si a et b et c alors d . R`egles : I Hyp, A ` R Hyp, B ` R Hyp, A ∨ B ` R I Hyp ` A Hyp ` A ⇒ R Hyp ` R Hyp, A ` R Hyp ` A ⇒ R I
Hyp ` A Hyp ` ¬A Hyp ` faux
Hyp ` faux Hyp ` R
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un petit exercice (suite)
a M ⇒ J ∨ P
b M ∨ P
c J ⇒ ¬M
d P
Contraintes
d P
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un petit exercice (suite)
a M ⇒ J ∨ P ou ¬M ∨ J ∨ P (1)
b M ∨ P ou M ∨ P (2)
c J ⇒ ¬M
d P
Contraintes
d P
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un petit exercice (suite)
a M ⇒ J ∨ P ou ¬M ∨ J ∨ P (1)
b M ∨ P ou M ∨ P (2)
c J ⇒ ¬M ou ¬J ∨ ¬M (3)
d P r´efutation ¬P (4)
Contraintes
d P r´efutation ¬P (4)
Montrer que si a et b et c alors d .
Preuve par r´efutation : on montre que {a, b, c, ¬d } m`ene `a une contradiction.
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un petit exercice (suite)
a M ⇒ J ∨ P ou ¬M ∨ J ∨ P (1)
b M ∨ P ou M ∨ P (2)
c J ⇒ ¬M ou ¬J ∨ ¬M (3)
d P r´efutation ¬P (4)
Montrer que si a et b et c alors d .
Preuve par r´efutation : on montre que {a, b, c, ¬d } m`ene `a une contradiction. R`egle : C1∨ l ∨ C2 C 0 1∨ ¬l ∨ C20 C1∨ C2∨ C10 ∨ c20 (r´esolution)
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un petit exercice (suite)
a M ⇒ J ∨ P ou ¬M ∨ J ∨ P (1)
b M ∨ P ou M ∨ P (2)
c J ⇒ ¬M ou ¬J ∨ ¬M (3)
d P r´efutation ¬P (4)
Montrer que si a et b et c alors d .
Preuve par r´efutation : on montre que {a, b, c, ¬d } m`ene `a une contradiction. R`egle : C1∨ l ∨ C2 C 0 1∨ ¬l ∨ C20 C1∨ C2∨ C10 ∨ c20 (r´esolution) (5) M (par 2 et 4)
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un petit exercice (suite)
a M ⇒ J ∨ P ou ¬M ∨ J ∨ P (1)
b M ∨ P ou M ∨ P (2)
c J ⇒ ¬M ou ¬J ∨ ¬M (3)
d P r´efutation ¬P (4)
Montrer que si a et b et c alors d .
Preuve par r´efutation : on montre que {a, b, c, ¬d } m`ene `a une contradiction. R`egle : C1∨ l ∨ C2 C 0 1∨ ¬l ∨ C20 C1∨ C2∨ C10 ∨ c20 (r´esolution) (5) M (par 2 et 4) (6) ¬J (par 5 et 3) (7) J ∨ P (par 5 et 1) (8) P (par 7 et 6) (9) (par 8 et 4)
Contraintes
d P r´efutation ¬P (4)
Montrer que si a et b et c alors d .
Preuve par r´efutation : on montre que {a, b, c, ¬d } m`ene `a une contradiction. R`egle : C1∨ l ∨ C2 C 0 1∨ ¬l ∨ C20 C1∨ C2∨ C10 ∨ c20 (r´esolution) (5) M (par 2 et 4) (6) ¬J (par 5 et 3) (7) J ∨ P (par 5 et 1) (8) P (par 7 et 6) (9) (par 8 et 4)
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Vocabulaire
I proposition, variable propositionnelle
I connecteur logique ∧, ∨, ¬, ⇒
I litt´eral : une variable propositionnelle ou sa n´egation
I litt´eral positif : p (p est une proposition.
I litt´eral n´egatif : ¬p
I clause : une disjonction de litt´eraux a ∨ ¬b ∨ ¬c ∨ l
I r´esolution : on “efface” un litt´eral d’une clause avec son oppos´e dans une autre clause en le rempla¸cant par les autres litt´eraux de cette derni`ere.
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Logique des pr´
edicats
La logique des propositions n’est pas tr`es descriptive
“Tout homme finit par trouver son maˆıtre” “le successeur d’un entier n est plus grand que n”
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Logique des pr´
edicats
La logique des propositions n’est pas tr`es descriptive
“Tout homme finit par trouver son maˆıtre” “le successeur d’un entier n est plus grand que n”
I variables et termes pr´edicatifs/relationnels x un homme, y un autre homme : maitre(y , x )
I fonctions et termes fonctionnels
n est un entier s(n) d´esigne son successeur.
I quantifications
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Logique des pr´
edicats
La logique des propositions n’est pas tr`es descriptive
“Tout homme finit par trouver son maˆıtre” “le successeur d’un entier n est plus grand que n”
I variables et termes pr´edicatifs/relationnels x un homme, y un autre homme : maitre(y , x )
I fonctions et termes fonctionnels
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Logique des pr´
edicats
La logique des propositions n’est pas tr`es descriptive
“Tout homme finit par trouver son maˆıtre” “le successeur d’un entier n est plus grand que n”
I variables et termes pr´edicatifs/relationnels x un homme, y un autre homme : maitre(y , x )
I fonctions et termes fonctionnels
n est un entier s(n) d´esigne son successeur.
I quantifications
Contraintes
I variables et termes pr´edicatifs/relationnels x un homme, y un autre homme : maitre(y , x )
I fonctions et termes fonctionnels
n est un entier s(n) d´esigne son successeur.
I quantifications
∀x∃y . maitre(y , x), ∀n. n < s(n)
Une hi´erarchie
I logique des propositions : logique d’ordre 0
I logique des pr´edicats : logique d’ordre 1
I avec des variables pour les fonctions : logiques d’ordre sup´erieur
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Logique des pr´
edicats
I Plus question de faire des tables de v´erit´e pour voir si quelque chose est “vrai” (la notion de “vrai” est aussi plus difficile `a d´efinir)
I Il y a des r`egles d’inf´erence pour faire des preuves (plusieurs syst`emes possibles)
I Remarque : impossibilit´e d’avoir des prouveurs g´en´eraux automatiques ⇒ assistants de preuve.
I La m´ethode par r´esolution marche encore (en ajoutant une r`egle)
I elle est compl`ete pour la r´efutation, mais donne un proc´ed´e de semi d´ecision pour savoir si une formule est un thm.
Contraintes
h2 ∀x∃y . p(x, y )
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un exemple simple
´ Enonc´e h1 ∀x, y , z. p(x, y ) ∧ p(y , z) ⇒ g (x, z) h2 ∀x∃y . p(x, y ) g on veut montrer ∀x ∃z. g (x , z)Mise en forme des formules
h1 ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z)
h2 p(x , f (x )) f fonction de Skolem
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un exemple simple
´ Enonc´e h1 ∀x, y , z. p(x, y ) ∧ p(y , z) ⇒ g (x, z) h2 ∀x∃y . p(x, y ) g on veut montrer ∀x ∃z. g (x , z)Mise en forme des formules
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un exemple simple
´ Enonc´e h1 ∀x, y , z. p(x, y ) ∧ p(y , z) ⇒ g (x, z) h2 ∀x∃y . p(x, y ) g on veut montrer ∀x ∃z. g (x , z)Mise en forme des formules
h1 ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z)
h2 p(x , f (x )) f fonction de Skolem
Contraintes
h2 ∀x∃y . p(x, y )
g on veut montrer ∀x ∃z. g (x , z)
Mise en forme des formules
h1 ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z)
h2 p(x , f (x )) f fonction de Skolem
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un exemple simple
´ Enonc´e h1 ∀x, y , z. p(x, y ) ∧ p(y , z) ⇒ g (x, z) h2 ∀x∃y . p(x, y ) g on veut montrer ∀x ∃z. g (x , z)Mise en forme des formules
h1 ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z)
h2 p(x , f (x )) f fonction de Skolem
¬g ¬g (a, Z ) constante de Skolem
Remarque : toutes les variables sont quantifi´ees universellement.
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un exemple simple (preuve)
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1)
(2) p(x , f (x )) (h2)
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un exemple simple (preuve)
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1) (2) p(x , f (x )) (h2) (3) ¬g (a, Z ) (¬g ) (4) ¬p(a, y ) ∨ ¬p(y , Z ) (3, 1, x = a, z = Z ) (5) ¬p(f (a), Z ) (4, 2, ) (6) (5, 2, x = a, Z = f (f (a)))
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un exemple simple (preuve)
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1)
(2) p(x , f (x )) (h2)
(3) ¬g (a, Z ) (¬g )
(4) ¬p(a, y ) ∨ ¬p(y , Z ) (3, 1, x = a, z = Z ) g (x , z) = g (a, Z ) `a r´esoudre (unification)
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un exemple simple (preuve)
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1) (2) p(x , f (x )) (h2) (3) ¬g (a, Z ) (¬g ) (4) ¬p(a, y ) ∨ ¬p(y , Z ) (3, 1, x = a, z = Z ) (5) ¬p(f (a), Z ) (4, 2, ) p(x , f (x )) = p(a, y ) `a r´esoudre (6) (5, 2, x = a, Z = f (f (a)))
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un exemple simple (preuve)
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1) (2) p(x , f (x )) (h2) (3) ¬g (a, Z ) (¬g ) (4) ¬p(a, y ) ∨ ¬p(y , Z ) (3, 1, x = a, z = Z ) (5) ¬p(f (a), Z ) (4, 2,x = a, f (x ) = y ) p(x , f (x )) = p(a, y ) `a r´esoudre
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Un exemple simple (preuve)
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1) (2) p(x , f (x )) (h2) (3) ¬g (a, Z ) (¬g ) (4) ¬p(a, y ) ∨ ¬p(y , Z ) (3, 1, x = a, z = Z ) (5) ¬p(f (a), Z ) (4, 2, x = a, f (x ) = y ) (6) (5, 2, x = a, Z = f (f (a)))
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
D´
efinitions
I terme fonctionnel : quelque chose de la forme f (t1, ...tm) qui repr´esente un objet (f est un symbole
fonctionnel).
I une clause est une disjonction de litt´eraux. Une clause de Horn est une clause qui contient au plus 1 litt´eral positif :
I la r`egle de r´esolution fonctionne de la mˆeme mani`ere qu’en logique des propositions en consid´erant des litt´eraux oppos´es et unifiables (l’unificateur le plus g´en´eral est appliqu´e aux clauses unifi´ees).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
D´
efinitions
I terme fonctionnel : quelque chose de la forme f (t1, ...tm) qui repr´esente un objet (f est un symbole
fonctionnel).
I terme pr´edicatif : quelque chose de la forme
r (t1, t2, ..., tk) qui repr´esente une relation entre objets
(r est un symbole pr´edicatif).
I un litt´eral est un terme pr´edicatif (litt´eral positif) ou la n´egation d’un terme pr´edicatif (litt´eral n´egatif).
I une clause est une disjonction de litt´eraux. Une clause de Horn est une clause qui contient au plus 1 litt´eral positif :
I la r`egle de r´esolution fonctionne de la mˆeme mani`ere qu’en logique des propositions en consid´erant des litt´eraux oppos´es et unifiables (l’unificateur le plus g´en´eral est appliqu´e aux clauses unifi´ees).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
D´
efinitions
I terme fonctionnel : quelque chose de la forme f (t1, ...tm) qui repr´esente un objet (f est un symbole
fonctionnel).
I terme pr´edicatif : quelque chose de la forme
r (t1, t2, ..., tk) qui repr´esente une relation entre objets
(r est un symbole pr´edicatif).
I un litt´eral est un terme pr´edicatif (litt´eral positif) ou la n´egation d’un terme pr´edicatif (litt´eral n´egatif).
litt´eraux oppos´es et unifiables (l’unificateur le plus g´en´eral est appliqu´e aux clauses unifi´ees).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
D´
efinitions
I terme fonctionnel : quelque chose de la forme f (t1, ...tm) qui repr´esente un objet (f est un symbole
fonctionnel).
I terme pr´edicatif : quelque chose de la forme
r (t1, t2, ..., tk) qui repr´esente une relation entre objets
(r est un symbole pr´edicatif).
I un litt´eral est un terme pr´edicatif (litt´eral positif) ou la n´egation d’un terme pr´edicatif (litt´eral n´egatif).
I une clause est une disjonction de litt´eraux. Une clause de Horn est une clause qui contient au plus 1 litt´eral positif :
I la r`egle de r´esolution fonctionne de la mˆeme mani`ere qu’en logique des propositions en consid´erant des litt´eraux oppos´es et unifiables (l’unificateur le plus g´en´eral est appliqu´e aux clauses unifi´ees).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
D´
efinitions
I terme fonctionnel : quelque chose de la forme f (t1, ...tm) qui repr´esente un objet (f est un symbole
fonctionnel).
I terme pr´edicatif : quelque chose de la forme
r (t1, t2, ..., tk) qui repr´esente une relation entre objets
(r est un symbole pr´edicatif).
I un litt´eral est un terme pr´edicatif (litt´eral positif) ou la n´egation d’un terme pr´edicatif (litt´eral n´egatif).
I une clause est une disjonction de litt´eraux. Une clause de Horn est une clause qui contient au plus 1 litt´eral positif :
I l (clause r´eduite `a un litt´eral positif) = fait
litt´eraux oppos´es et unifiables (l’unificateur le plus g´en´eral est appliqu´e aux clauses unifi´ees).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
D´
efinitions
I terme fonctionnel : quelque chose de la forme f (t1, ...tm) qui repr´esente un objet (f est un symbole
fonctionnel).
I terme pr´edicatif : quelque chose de la forme
r (t1, t2, ..., tk) qui repr´esente une relation entre objets
(r est un symbole pr´edicatif).
I un litt´eral est un terme pr´edicatif (litt´eral positif) ou la n´egation d’un terme pr´edicatif (litt´eral n´egatif).
I une clause est une disjonction de litt´eraux. Une clause de Horn est une clause qui contient au plus 1 litt´eral positif :
I l (clause r´eduite `a un litt´eral positif) = fait
I t ∨ ¬h1∨ ¬h2... ∨ ¬hk est une r`egle
(souvenez-vous, c’est ´equivalent `a : h1∧ ... ∧ hk ⇒ t)
I une clause avec que des litt´eraux n´egatifs est une “liste” de buts
I la r`egle de r´esolution fonctionne de la mˆeme mani`ere qu’en logique des propositions en consid´erant des litt´eraux oppos´es et unifiables (l’unificateur le plus g´en´eral est appliqu´e aux clauses unifi´ees).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
D´
efinitions
I terme fonctionnel : quelque chose de la forme f (t1, ...tm) qui repr´esente un objet (f est un symbole
fonctionnel).
I terme pr´edicatif : quelque chose de la forme
r (t1, t2, ..., tk) qui repr´esente une relation entre objets
(r est un symbole pr´edicatif).
I un litt´eral est un terme pr´edicatif (litt´eral positif) ou la n´egation d’un terme pr´edicatif (litt´eral n´egatif).
I une clause est une disjonction de litt´eraux. Une clause de Horn est une clause qui contient au plus 1 litt´eral positif :
I l (clause r´eduite `a un litt´eral positif) = fait
I t ∨ ¬h1∨ ¬h2... ∨ ¬hk est une r`egle
(souvenez-vous, c’est ´equivalent `a : h1∧ ... ∧ hk ⇒ t)
I une clause avec que des litt´eraux n´egatifs est une “liste” de buts
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
D´
efinitions
I terme fonctionnel : quelque chose de la forme f (t1, ...tm) qui repr´esente un objet (f est un symbole
fonctionnel).
I terme pr´edicatif : quelque chose de la forme
r (t1, t2, ..., tk) qui repr´esente une relation entre objets
(r est un symbole pr´edicatif).
I un litt´eral est un terme pr´edicatif (litt´eral positif) ou la n´egation d’un terme pr´edicatif (litt´eral n´egatif).
I une clause est une disjonction de litt´eraux. Une clause de Horn est une clause qui contient au plus 1 litt´eral positif :
I la r`egle de r´esolution fonctionne de la mˆeme mani`ere qu’en logique des propositions en consid´erant des litt´eraux oppos´es et unifiables (l’unificateur le plus g´en´eral est appliqu´e aux clauses unifi´ees).
Contraintes
I terme pr´edicatif : quelque chose de la forme
r (t1, t2, ..., tk) qui repr´esente une relation entre objets
(r est un symbole pr´edicatif).
I un litt´eral est un terme pr´edicatif (litt´eral positif) ou la n´egation d’un terme pr´edicatif (litt´eral n´egatif).
I une clause est une disjonction de litt´eraux. Une clause de Horn est une clause qui contient au plus 1 litt´eral positif :
I la r`egle de r´esolution fonctionne de la mˆeme mani`ere qu’en logique des propositions en consid´erant des litt´eraux oppos´es et unifiables (l’unificateur le plus g´en´eral est appliqu´e aux clauses unifi´ees).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Prolog
Contraintes parent(tom,bob). parent(tom, liz). parent(bob,ann). parent(bob,pat). parent(pat,jim). Questions ?- parent(tom, liz). ?- parent(pat,ben). ?- parent(X,bob). ?- parent(X,Y),parent(Y,ann). bob liz ann jim pat
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Premier exemple compl´
et´
e
Programme
grand_parent(X,Y) :- parent(X,Z), parent(Z,Y). fos(X,Y) :- parent(X,Z), parent(Y,Z).
ancetre(X,Y) :- parent(X,Y).
ancetre(X,Y) :- parent(X,Z), ancetre(Z,Y).
Questions
?- grand_parent(X,ann). ?- fos(ann, pat).
Contraintes
I fait
I r`egle
I but
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Remarque - exercice
Wissembourg Hagenau Strasbourg Sarre−Union Schirmeck Molsheim Colmar Sélestat Saverne MonswillerContraintes
h2 ∀x∃y . p(x, y )
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Retour sur le deuxi`
eme exemple
Formules mises en forme
h1 ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z)
h2 p(x , f (x )) f fonction de Skolem
Contraintes
h2 p(x , f (x )) f fonction de Skolem
¬g ¬g (a, Z ) constante de Skolem
Programme
g(X,Z) :- p(X,Y), p(Y,Z). p(X,f(X)).
Question
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Retour sur le deuxi`
eme exemple
Formules mises en forme
h1 ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z)
h2 p(x , f (x )) f fonction de Skolem
¬g ¬g (a, Z ) constante de Skolem
Programme g(X,Z) :- p(X,Y), p(Y,Z). p(X,f(X)). Question ?- g(a,Z). Question : statut de f ?
f ne d´esigne pas une fonction, c’est un symbole fonctionnel, appel´e foncteur en Prolog
Contraintes ?- X = 3. ?- X. ?- 3 = X, X = Y. ? X = 4 + 1. ? X = 3 + Y, Y = 2. ? X = truc(4, bidule). ? X = "toto".
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Exemple 3 : le singe et les bananes
le régime de bananes au centre au plafond le singe à la porte et la caisse à le fenêtre
Contraintes grimper, etat(P, surlaboite,P,H)). move(etat(P1, surlesol, P1, H), pousser(P1,P2), etat(P2, surlesol, P2, H)). move(etat(P1, surlesol, B, H), marcher(P1, P2), etat(P2, surlesol, B, H)). peutprendre(etat(_,_,_,possede)).
peutprendre(E1) :- move(Etat1, Act, E2),peutprendre(E2).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Exemple 4 : circuits
ev_and(1,1,1). ev_and(X, Y, 0) :- X = 0; Y=0. ev_or(0, 0, 0). ev_or(X,Y,1) :- X=1 ; Y=1. ev_xor(X,Y,0) :- X=Y. ev_xor(X,Y,1) :- X\=Y.
ev_neg(1,0). ev_neg(0,1).
add(A, B, C, xor(A,xor(B,C))). eval(0,0). eval(1,1).
eval(and(X,Y),R) :- eval(X,R1), eval(Y,R2), ev_and(R1,R2,R). eval(or(X,Y), R) :- eval(X,R1), eval(Y,R2), ev_or(R1,R2,R). eval(neg(X), R) :- eval(X,R1), ev_neg(R1,R).
eval(xor(X,Y), R) :- eval(X,R1), eval(Y,R2), ev_xor(R1,R2,R). bin(0). bin(1).
---?- add(1,0,0, Addi), eval(Addi,R).
Contraintes
I liste premier ´el´ement + liste des suivants : [prem | liste_suivants]
I sucre syntaxique : [7, 42, toto, f(a)] [ 7 | [ 42 | [ toto | [ f(a) | []]]]]
Premiers pr´edicats sur les listes
estvide([]). premier([P|_],P). suivants[_|L], L).
appartient(X, [X|_]).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Listes et op´
erateurs
:- op(550, xfx, in). X in [X|_]. X in [_|L] :- X in L. :- op(550, xfx, estdans). :- op(500, xfx, reste). X estdans [X|L] reste L.
X estdans [Y|L] reste [Y|L1] :- X estdans L reste L1.
:-op(550, xfx, [estinclus, >=<]). [] estinclus _.
[X|L] estinclus L1 :- X estdans L1 reste L2, L estinclus L2.
[] >=< [].
[X|L] >=< L1 :- X estdans L1 reste L2, L >=< L2.
Contraintes
?- 1+4 = 2+3.
Programmes
somme(A,B,S) :- S is A+B. % somme(1,X,5) ?
facto(0,1).
facto(N,F) :- N1 is N-1,
facto(N1,F1), F is N*F1.
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Exemple : Crypto-arithm´
etique
TEN TEN TEN TEN FORTY ---SIXTY
Contraintes FORTY ---SIXTY ttf(T,E,N,F,O,R,Y,S,I,X) :-[T,E,N,F,O,R,Y,S,I,X] >=< [0,1,2,3,4,5,6,7,8,9], 4*(T*100+E*10+N) + F*10000+O*1000+R*100+T*10+Y =:= S*10000+I*1000+X*100+T*10+Y.
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Exemple : Crypto-arithm´
etique
ttf2 :-[T,E,N,F,O,R,Y,S,I,X] >=< [0,1,2,3,4,5,6,7,8,9], T1 is (T*100+E*10+N), T2 is F*10000+O*1000+R*100+T*10+Y , T3 is S*10000+I*1000+X*100+T*10+Y, 4*T1+T2 =:= T3,
put(’ ’), put(’ ’),writeln(T1), put(’ ’), put(’ ’),writeln(T1), put(’ ’), put(’ ’),writeln(T1), put(’ ’), put(’ ’),writeln(T1), writeln(T2),
writeln(’---’), writeln(T3).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Comparaison avec des langages classiques
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Comparaison avec des langages classiques
I th`ese de Church-Turing
I programmation ? : oui
I efficacit´e en espace
I efficacit´e en temps
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Comparaison avec des langages classiques
I th`ese de Church-Turing
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Comparaison avec des langages classiques
I th`ese de Church-Turing
I programmation ? : oui
I efficacit´e en espace
I efficacit´e en temps
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Comparaison avec des langages classiques
I th`ese de Church-Turing
I programmation ? : oui
I efficacit´e en espace
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Comparaison avec des langages classiques
I th`ese de Church-Turing
I programmation ? : oui
I efficacit´e en espace
I efficacit´e en temps
Contraintes
Programmation par
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Programmation par contraintes
paradigme et exemples de langages
D´ecrire une situation avec des contraintes et employer un solveur pour trouver toutes les instances possibles
I CHIP, ILOG, python-constraint
I Verilog
I ECLIPSe, CLP(R), SWI-Prolog, SICSTus ...
Contraintes et logiques
I l’unification est un cas particulier de r´esolution de contraintes
I la paradigme d´eclaratif est celui de Prolog
I les premi`eres int´egrations des contraintes dans un langage viennent de techniques Prolog
Contraintes ?- use_module(library(clpfd)). ?- 5 = 3 + X. ?- 5 #= 3 + X ----somme(A,B,S) :- S #= A + B.
Techniques efficaces de r´esolution de contraintes dans des domaines particuliers (par exemple, consistance d’arc et r´eduction d’intervalles).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Carr´
e magique
:- use_module(library(clpfd)). carre(Vars):-Vars = [A1, A2,A3,B1,B2,B3,C1,C2,C3], Vars ins 0..9, all_different(Vars), A1+A2+A3 #= B1+B2+B3, A1+A2+A3 #= C1+C2+C3, A1+A2+A3 #= A1+B1+C1, A1+A2+A3 #= A2+B2+C2, A1+A2+A3 #= A3+B3+C3, A1+A2+A3 #= A1+B2+C3, A1+A2+A3 #= A3+B2+C1. % label(Vars).
Contraintes puzzle([S,E,N,D,M,O,R,Y]) :-Vars = [S,E,N,D,M,O,R,Y], Vars ins 0..9, all_different(Vars), S*1000 + E*100 + N*10 + D + M*1000 + O*100 + R*10 + E #= M*10000 + O*1000 + N*100 + E*10 + Y, M #> 0, S #> 0. % label(Vars).
Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes
Sudoku
sudoku(Grid, Vars) :- Vars = [ A1,A2,A3,A4,A5,A6,A7,A8,A9, B1,B2,B3,B4,B5,B6,B7,B8,B9, C1,C2,C3,C4,C5,C6,C7,C8,C9, D1,D2,D3,D4,D5,D6,D7,D8,D9, E1,E2,E3,E4,E5,E6,E7,E8,E9, F1,F2,F3,F4,F5,F6,F7,F8,F9, G1,G2,G3,G4,G5,G6,G7,G8,G9, H1,H2,H3,H4,H5,H6,H7,H8,H9, I1,I2,I3,I4,I5,I6,I7,I8,I9 ], Vars ins 1..9 , all_different([A1,A2,A3,A4,A5,A6,A7,A8,A9]), % lignes ... all_different([A1,B1,C1,D1,E1,F1,G1,H1,I1]),% colonnes ...
all_different([A1,B1,C1,A2, B2, C2, A3, B3, C3]), % carres ...