Upload
dinhnhan
View
227
Download
0
Embed Size (px)
Citation preview
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Introduction a la programmation logique etpar contraintes
Pascal Schreck
Universite de Strasbourg - LSIIT, UMR CNRS 7005
Oct. 2015
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Introduction
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireRoots
Calcul, preuves et automatisme
I calculs
I automates
I preuves
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireRoots
Calcul, preuves et automatisme
I calculs
O x y x+y
(cc). SolsticedHiver (source Wikipedia)
I automates
I preuves
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireRoots
Calcul, preuves et automatisme
I calculs
(cc) Roger McLassus
(source Wikipedia)
(cc). SolsticedHiver (source Wikipedia)
I automates
I preuves
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireRoots
Calcul, preuves et automatisme
I calculs
I automates
I preuves
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireRoots
Calcul, preuves et automatisme
I calculs
I automates
celebree le 13 octobre
I preuves
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireRoots
Calcul, preuves et automatisme
I calculs
I automates
I preuves
Georges Boole Jacques Herbrand
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireApres la crise des fondements
Deux questions
I que sait-on prouver ?
I que sait-on calculer ?
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireApres la crise des fondements
Deux questions
I que sait-on prouver ?I en restant a l’interieur d’un systeme formel : pas tout
ce qui est “vrai” !
I que sait-on calculer ?
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireApres la crise des fondements
Deux questions
I que sait-on prouver ?I en restant a l’interieur d’un systeme formel : pas tout
ce qui est “vrai” !I theoreme d’incompletude de Godel
Godel, Esher et BachLes brins d’une guirlandeeternelleDouglas Hofstadter
I que sait-on calculer ?
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireApres la crise des fondements
Deux questions
I que sait-on prouver ?I que sait-on calculer ?
I pas tout !
I machines de Turing, probleme de l’arret :version “automate” de la notion de calcul
I fonctions µ-recursives (Herbrand, Kleene, Church) :version “fonctionnelle” de la notion de calcul
I Thm de Kleene, et these de Church-Turing
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireApres la crise des fondements
Deux questions
I que sait-on prouver ?I que sait-on calculer ?
I pas tout !I machines de Turing, probleme de l’arret :
version “automate” de la notion de calcul
I fonctions µ-recursives (Herbrand, Kleene, Church) :version “fonctionnelle” de la notion de calcul
I Thm de Kleene, et these de Church-Turing
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireApres la crise des fondements
Deux questions
I que sait-on prouver ?I que sait-on calculer ?
I pas tout !I machines de Turing, probleme de l’arret :
version “automate” de la notion de calculI fonctions µ-recursives (Herbrand, Kleene, Church) :
version “fonctionnelle” de la notion de calcul
I Thm de Kleene, et these de Church-Turing
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireApres la crise des fondements
Deux questions
I que sait-on prouver ?I que sait-on calculer ?
I pas tout !I machines de Turing, probleme de l’arret :
version “automate” de la notion de calculI fonctions µ-recursives (Herbrand, Kleene, Church) :
version “fonctionnelle” de la notion de calculI Thm de Kleene, et these de Church-Turing
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoirePourquoi des langages de haut niveau
Contexte : computers, langages de programmation
I du calculateur a l’ordinateurI representation “logique” des donneesI codage d’un enchaınement d’operations “en dur”I codage d’un enchaınement d’operations en memoire
avec des 0 et de 1 ... dur a ecrire, a lire, a debuger
I langages de “haut niveau” et paradigmes deprogrammation
I imperatif/procedural et objets (⇐ Turing)I fonctionnel (⇐ Church)I logique (⇐ Herbrand)
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoire
I imperatif/procedural et objetsI Fortran (1954), Cobol (1959) Algol, SimulaI Pascal, Ada, CI Smalltalk, C++, Java, C#
I fonctionnelI Lisp (1958), Scheme, Common LispI ML, Ocaml, F#I Erlang, Scala,
I logiqueI Absys (1969)I Prolog (1972), λPrologI CLIPS, CLP(),
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un peu d’histoireProgrammation logique
I travaux theoriques de Boole, Herbrand, Robinson,Kowalski ...
I travaux sur des prouveurs automatiques en logique du1er ordre
I travaux sur les langues naturelles (TAL) Colmerauer,Roussel
I Prolog I developpe a Marseille (72), large diffusion
I Warren : notion de machine virtuelle → Prologd’Edimbourg.
I Langages de 5eme generation, etc. (avatars actuels :langages a contraintes, ontologies ...)
I Prolog IV, Sictus : programmations par contraintes
I SWI-Prolog : dialecte d’Edimbour + beaucoup debibliotheques
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Logique et automatisationdes preuves
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Loqique des propositions
I variable propositionnelles a, b, ..., p, qI des operations (connecteurs logiques)
I et : a ∧ b, (a.b en logique combinatoire, graph. )I ou : a ∨ b, (a + b en logique combinatoire, graph. )I non : ¬a, (a en logique combinatoire graph. )I implique : a ⇒ bI equivalent : a ⇔ b
I formule et valeur de verite : une variable prop. peutprendre la valeur vrai ou faux (1 ou 0), on peut ainsiinterpreter 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 verite (“preuve” semantique et validite )I systeme axiomatique (preuves et theoremes)
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice
a Si Marie est a la bibliotheque (M) alors soit Jean estalle au cinema (J), soit Pierre est rentre chez lui (P)
b Soit Marie est a la bibliotheque, soit Pierre est rentrechez lui (ou les deux)
c si Jean est alle au cinema, alors Marie n’est pas a labibliotheque
d Pierre est rentre chez lui
Montrer que si a et b et c alors d .
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice
a M ⇒ J ∨ P
b Soit Marie est a la bibliotheque, soit Pierre est rentrechez lui (ou les deux)
c si Jean est alle au cinema, alors Marie n’est pas a labibliotheque
d Pierre est rentre chez lui
Montrer que si a et b et c alors d .
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice
a M ⇒ J ∨ P
b M ∨ P
c si Jean est alle au cinema, alors Marie n’est pas a labibliotheque
d Pierre est rentre chez lui
Montrer que si a et b et c alors d .
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice
a M ⇒ J ∨ P
b M ∨ P
c J ⇒ ¬M
d Pierre est rentre chez lui
Montrer que si a et b et c alors d .
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice
a M ⇒ J ∨ P
b M ∨ P
c J ⇒ ¬M
d P
Montrer que si a et b et c alors d .
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice
a M ⇒ J ∨ P
b M ∨ P
c J ⇒ ¬M
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
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice
a M ⇒ J ∨ P
b M ∨ P
c J ⇒ ¬M
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 finiRegles :
I raisonnement par cas (elimination de ∨)
I modus ponens (elim/intro de ⇒)
I contradiction ex falso quod libet
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice
a M ⇒ J ∨ P
b M ∨ P
c J ⇒ ¬M
d P
Montrer que si a et b et c alors d .
Regles :
IHyp,A ` R Hyp,B ` R
Hyp,A ∨ B ` R
I modus ponens (elim/intro de ⇒)
I contradiction ex falso quod libet
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice
a M ⇒ J ∨ P
b M ∨ P
c J ⇒ ¬M
d P
Montrer que si a et b et c alors d .
Regles :
IHyp,A ` R Hyp,B ` R
Hyp,A ∨ B ` R
IHyp ` A Hyp ` A ⇒ R
Hyp ` R
Hyp,A ` R
Hyp ` A ⇒ R
I contradiction ex falso quod libet
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice
a M ⇒ J ∨ P
b M ∨ P
c J ⇒ ¬M
d P
Montrer que si a et b et c alors d .
Regles :
IHyp,A ` R Hyp,B ` R
Hyp,A ∨ B ` R
IHyp ` A Hyp ` A ⇒ R
Hyp ` R
Hyp,A ` R
Hyp ` A ⇒ R
IHyp ` A Hyp ` ¬A
Hyp ` faux
Hyp ` faux
Hyp ` R
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice (suite)
a M ⇒ J ∨ P
b M ∨ P
c J ⇒ ¬M
d P
Montrer que si a et b et c alors d .
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un petit exercice (suite)
a M ⇒ J ∨ P ou ¬M ∨ J ∨ P (clause)
b M ∨ P
c J ⇒ ¬M
d P
Montrer que si a et b et c alors d .
Programmationlogique
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
Montrer que si a et b et c alors d .
Programmationlogique
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
Montrer que si a et b et c alors d .
Programmationlogique
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 refutation ¬P (4)
Montrer que si a et b et c alors d .
Programmationlogique
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 refutation ¬P (4)
Montrer que si a et b et c alors d .Preuve par refutation : on montre que {a, b, c ,¬d} mene aune contradiction.
Programmationlogique
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 refutation ¬P (4)
Montrer que si a et b et c alors d .Preuve par refutation : on montre que {a, b, c ,¬d} mene aune contradiction.
Regle :C1 ∨ l ∨ C2 C ′
1 ∨ ¬l ∨ C ′2
C1 ∨ C2 ∨ C ′1 ∨ c ′
2
(resolution)
Programmationlogique
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 refutation ¬P (4)
Montrer que si a et b et c alors d .Preuve par refutation : on montre que {a, b, c ,¬d} mene aune contradiction.
Regle :C1 ∨ l ∨ C2 C ′
1 ∨ ¬l ∨ C ′2
C1 ∨ C2 ∨ C ′1 ∨ c ′
2
(resolution)
(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)
Programmationlogique
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 refutation ¬P (4)
Montrer que si a et b et c alors d .Preuve par refutation : on montre que {a, b, c ,¬d} mene aune contradiction.
Regle :C1 ∨ l ∨ C2 C ′
1 ∨ ¬l ∨ C ′2
C1 ∨ C2 ∨ C ′1 ∨ c ′
2
(resolution)
(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)
Programmationlogique
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 refutation ¬P (4)
Montrer que si a et b et c alors d .Preuve par refutation : on montre que {a, b, c ,¬d} mene aune contradiction.
Regle :C1 ∨ l ∨ C2 C ′
1 ∨ ¬l ∨ C ′2
C1 ∨ C2 ∨ C ′1 ∨ c ′
2
(resolution)
(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)
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Vocabulaire
I proposition, variable propositionnelle
I connecteur logique ∧, ∨, ¬, ⇒I litteral : une variable propositionnelle ou sa negation
I litteral positif : p (p est une proposition.I litteral negatif : ¬p
I clause : une disjonction de litteraux a ∨ ¬b ∨ ¬c ∨ l
I resolution : on “efface” un litteral d’une clause avec sonoppose dans une autre clause en le remplacant par lesautres litteraux de cette derniere.
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Logique des predicats
La logique des propositions n’est pas tres descriptive
“Tout homme finit par trouver son maıtre”“le successeur d’un entier n est plus grand que n”
I variables et termes predicatifs/relationnels x un homme,y un autre homme : maitre(y , x)
I fonctions et termes fonctionnelsn est un entier s(n) designe son successeur.
I quantifications∀x∃y . maitre(y , x), ∀n. n < s(n)
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Logique des predicats
La logique des propositions n’est pas tres descriptive
“Tout homme finit par trouver son maıtre”“le successeur d’un entier n est plus grand que n”
I variables et termes predicatifs/relationnels x un homme,y un autre homme : maitre(y , x)
I fonctions et termes fonctionnelsn est un entier s(n) designe son successeur.
I quantifications∀x∃y . maitre(y , x), ∀n. n < s(n)
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Logique des predicats
La logique des propositions n’est pas tres descriptive
“Tout homme finit par trouver son maıtre”“le successeur d’un entier n est plus grand que n”
I variables et termes predicatifs/relationnels x un homme,y un autre homme : maitre(y , x)
I fonctions et termes fonctionnelsn est un entier s(n) designe son successeur.
I quantifications∀x∃y . maitre(y , x), ∀n. n < s(n)
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Logique des predicats
La logique des propositions n’est pas tres descriptive
“Tout homme finit par trouver son maıtre”“le successeur d’un entier n est plus grand que n”
I variables et termes predicatifs/relationnels x un homme,y un autre homme : maitre(y , x)
I fonctions et termes fonctionnelsn est un entier s(n) designe son successeur.
I quantifications∀x∃y . maitre(y , x), ∀n. n < s(n)
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Logique des predicats
La logique des propositions n’est pas tres descriptive
“Tout homme finit par trouver son maıtre”“le successeur d’un entier n est plus grand que n”
I variables et termes predicatifs/relationnels x un homme,y un autre homme : maitre(y , x)
I fonctions et termes fonctionnelsn est un entier s(n) designe son successeur.
I quantifications∀x∃y . maitre(y , x), ∀n. n < s(n)
Une hierarchie
I logique des propositions : logique d’ordre 0
I logique des predicats : logique d’ordre 1
I avec des variables pour les fonctions : logiques d’ordresuperieur
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Logique des predicats
I Plus question de faire des tables de verite pour voir siquelque chose est “vrai” (la notion de “vrai” est aussiplus difficile a definir)
I Il y a des regles d’inference pour faire des preuves(plusieurs systemes possibles)
I Remarque : impossibilite d’avoir des prouveurs generauxautomatiques ⇒ assistants de preuve.
I La methode par resolution marche encore (en ajoutantune regle)
I elle est complete pour la refutation, mais donne unprocede de semi decision pour savoir si une formule estun thm.
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un exemple simple
Enonce
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)
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un exemple simple
Enonce
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
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un exemple simple
Enonce
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
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un exemple simple
Enonce
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
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un exemple simple
Enonce
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 ∃x∀z . ¬g(x , z) (negation)
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Un exemple simple
Enonce
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 quantifieesuniversellement.
Programmationlogique
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)))
Programmationlogique
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)))
Programmationlogique
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 resoudre (unification)
(5) ¬p(f (a),Z ) (4, 2, )
(6) � (5, 2, x = a,Z = f (f (a)))
Programmationlogique
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 resoudre
(6) � (5, 2, x = a,Z = f (f (a)))
Programmationlogique
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 resoudre
(6) � (5, 2, x = a,Z = f (f (a)))
Programmationlogique
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)))
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Definitions
I terme fonctionnel : quelque chose de la formef (t1, ...tm) qui represente un objet (f est un symbolefonctionnel).
I terme predicatif : quelque chose de la former(t1, t2, ..., tk) qui represente une relation entre objets(r est un symbole predicatif).
I un litteral est un terme predicatif (litteral positif) ou lanegation d’un terme predicatif (litteral negatif).
I une clause est une disjonction de litteraux. Une clausede Horn est une clause qui contient au plus 1 litteralpositif :
I la regle de resolution fonctionne de la meme manierequ’en logique des propositions en considerant deslitteraux opposes et unifiables (l’unificateur le plusgeneral est applique aux clauses unifiees).
I c’est comme ca que fonctionne le langage Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Definitions
I terme fonctionnel : quelque chose de la formef (t1, ...tm) qui represente un objet (f est un symbolefonctionnel).
I terme predicatif : quelque chose de la former(t1, t2, ..., tk) qui represente une relation entre objets(r est un symbole predicatif).
I un litteral est un terme predicatif (litteral positif) ou lanegation d’un terme predicatif (litteral negatif).
I une clause est une disjonction de litteraux. Une clausede Horn est une clause qui contient au plus 1 litteralpositif :
I la regle de resolution fonctionne de la meme manierequ’en logique des propositions en considerant deslitteraux opposes et unifiables (l’unificateur le plusgeneral est applique aux clauses unifiees).
I c’est comme ca que fonctionne le langage Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Definitions
I terme fonctionnel : quelque chose de la formef (t1, ...tm) qui represente un objet (f est un symbolefonctionnel).
I terme predicatif : quelque chose de la former(t1, t2, ..., tk) qui represente une relation entre objets(r est un symbole predicatif).
I un litteral est un terme predicatif (litteral positif) ou lanegation d’un terme predicatif (litteral negatif).
I une clause est une disjonction de litteraux. Une clausede Horn est une clause qui contient au plus 1 litteralpositif :
I la regle de resolution fonctionne de la meme manierequ’en logique des propositions en considerant deslitteraux opposes et unifiables (l’unificateur le plusgeneral est applique aux clauses unifiees).
I c’est comme ca que fonctionne le langage Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Definitions
I terme fonctionnel : quelque chose de la formef (t1, ...tm) qui represente un objet (f est un symbolefonctionnel).
I terme predicatif : quelque chose de la former(t1, t2, ..., tk) qui represente une relation entre objets(r est un symbole predicatif).
I un litteral est un terme predicatif (litteral positif) ou lanegation d’un terme predicatif (litteral negatif).
I une clause est une disjonction de litteraux. Une clausede Horn est une clause qui contient au plus 1 litteralpositif :
I la regle de resolution fonctionne de la meme manierequ’en logique des propositions en considerant deslitteraux opposes et unifiables (l’unificateur le plusgeneral est applique aux clauses unifiees).
I c’est comme ca que fonctionne le langage Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Definitions
I terme fonctionnel : quelque chose de la formef (t1, ...tm) qui represente un objet (f est un symbolefonctionnel).
I terme predicatif : quelque chose de la former(t1, t2, ..., tk) qui represente une relation entre objets(r est un symbole predicatif).
I un litteral est un terme predicatif (litteral positif) ou lanegation d’un terme predicatif (litteral negatif).
I une clause est une disjonction de litteraux. Une clausede Horn est une clause qui contient au plus 1 litteralpositif :
I l (clause reduite a un litteral positif) = fait
I t ∨ ¬h1 ∨ ¬h2... ∨ ¬hk est une regle(souvenez-vous, c’est equivalent a : h1 ∧ ... ∧ hk ⇒ t)
I une clause avec que des litteraux negatifs est une “liste”de buts
I la regle de resolution fonctionne de la meme manierequ’en logique des propositions en considerant deslitteraux opposes et unifiables (l’unificateur le plusgeneral est applique aux clauses unifiees).
I c’est comme ca que fonctionne le langage Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Definitions
I terme fonctionnel : quelque chose de la formef (t1, ...tm) qui represente un objet (f est un symbolefonctionnel).
I terme predicatif : quelque chose de la former(t1, t2, ..., tk) qui represente une relation entre objets(r est un symbole predicatif).
I un litteral est un terme predicatif (litteral positif) ou lanegation d’un terme predicatif (litteral negatif).
I une clause est une disjonction de litteraux. Une clausede Horn est une clause qui contient au plus 1 litteralpositif :
I l (clause reduite a un litteral positif) = faitI t ∨ ¬h1 ∨ ¬h2... ∨ ¬hk est une regle
(souvenez-vous, c’est equivalent a : h1 ∧ ... ∧ hk ⇒ t)
I une clause avec que des litteraux negatifs est une “liste”de buts
I la regle de resolution fonctionne de la meme manierequ’en logique des propositions en considerant deslitteraux opposes et unifiables (l’unificateur le plusgeneral est applique aux clauses unifiees).
I c’est comme ca que fonctionne le langage Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Definitions
I terme fonctionnel : quelque chose de la formef (t1, ...tm) qui represente un objet (f est un symbolefonctionnel).
I terme predicatif : quelque chose de la former(t1, t2, ..., tk) qui represente une relation entre objets(r est un symbole predicatif).
I un litteral est un terme predicatif (litteral positif) ou lanegation d’un terme predicatif (litteral negatif).
I une clause est une disjonction de litteraux. Une clausede Horn est une clause qui contient au plus 1 litteralpositif :
I l (clause reduite a un litteral positif) = faitI t ∨ ¬h1 ∨ ¬h2... ∨ ¬hk est une regle
(souvenez-vous, c’est equivalent a : h1 ∧ ... ∧ hk ⇒ t)I une clause avec que des litteraux negatifs est une “liste”
de buts
I la regle de resolution fonctionne de la meme manierequ’en logique des propositions en considerant deslitteraux opposes et unifiables (l’unificateur le plusgeneral est applique aux clauses unifiees).
I c’est comme ca que fonctionne le langage Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Definitions
I terme fonctionnel : quelque chose de la formef (t1, ...tm) qui represente un objet (f est un symbolefonctionnel).
I terme predicatif : quelque chose de la former(t1, t2, ..., tk) qui represente une relation entre objets(r est un symbole predicatif).
I un litteral est un terme predicatif (litteral positif) ou lanegation d’un terme predicatif (litteral negatif).
I une clause est une disjonction de litteraux. Une clausede Horn est une clause qui contient au plus 1 litteralpositif :
I la regle de resolution fonctionne de la meme manierequ’en logique des propositions en considerant deslitteraux opposes et unifiables (l’unificateur le plusgeneral est applique aux clauses unifiees).
I c’est comme ca que fonctionne le langage Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Definitions
I terme fonctionnel : quelque chose de la formef (t1, ...tm) qui represente un objet (f est un symbolefonctionnel).
I terme predicatif : quelque chose de la former(t1, t2, ..., tk) qui represente une relation entre objets(r est un symbole predicatif).
I un litteral est un terme predicatif (litteral positif) ou lanegation d’un terme predicatif (litteral negatif).
I une clause est une disjonction de litteraux. Une clausede Horn est une clause qui contient au plus 1 litteralpositif :
I la regle de resolution fonctionne de la meme manierequ’en logique des propositions en considerant deslitteraux opposes et unifiables (l’unificateur le plusgeneral est applique aux clauses unifiees).
I c’est comme ca que fonctionne le langage Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Premier exemple
Programme
parent(pam,bob).
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
pam tom
ann
jim
pat
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Premier exemple complete
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).
?- fos(ann, X).
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Vocabulaire
I fait
I regle
I but
I non-determinisme
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Remarque - exercice
Wissembourg
Hagenau
Strasbourg
Sarre−Union
SchirmeckMolsheim
Colmar
Sélestat
Saverne
Monswiller
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Retour sur le deuxieme exemple
Enonce
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)
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Retour sur le deuxieme 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
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Retour sur le deuxieme 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).
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Retour sur le deuxieme 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 designe pas une fonction, c’est un symbole fonctionnel,appele foncteur en Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Unification et foncteurs ?
L’operateur = designe l’unification/unificabilite en Prolog
?- X = 3.
?- X.
?- 3 = X, X = Y.
? X = 4 + 1.
? X = 3 + Y, Y = 2.
? X = truc(4, bidule).
? X = "toto".
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Exemple 3 : le singe et les bananes
le régime de bananes au centre au plafondle singe à la porte et la caisse à le fenêtre
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Exemple 2 : le singe et les bananesmove(etat(aucentre,surlaboite,aucentre,napas),
aggripper,
etat(aucentre, surlaboite,aucentre, possede)).
move(etat(P, surlesol, P, H),
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).
-----
?- peutprendre(etat(alaporte, ausol, alafenetre,napas)).
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Exemple 4 : circuitsev_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).
?- bin(A), bin(B), bin(C),add(A,B,C, Ci), eval(Ci,R).
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Listes
Principes
I liste vide : []
I liste premier element + liste des suivants :[prem | liste_suivants]
I sucre syntaxique : [7, 42, toto, f(a)]
[ 7 | [ 42 | [ toto | [ f(a) | []]]]]
Premiers predicats sur les listes
estvide([]).
premier([P|_],P).
suivants[_|L], L).
appartient(X, [X|_]).
appartient(X, [_|L]) :- appartient(X,L).
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Listes et operateurs:- 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.
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Arithmetique
Questions
?- X = 2+3.
?- X is 2+3.
?- 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.
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Exemple : Crypto-arithmetiqueTEN
TEN
TEN
TEN
FORTY
-----------
SIXTY
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Exemple : Crypto-arithmetiqueTEN
TEN
TEN
TEN
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.
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Exemple : Crypto-arithmetique
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).
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Comparaison avec des langages classiques
I these de Church-Turing
I programmation ? : oui
I efficacite en espace
I efficacite en temps
I efficacite en temps de developpement
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Comparaison avec des langages classiques
I these de Church-Turing
I programmation ? : oui
I efficacite en espace
I efficacite en temps
I efficacite en temps de developpement
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Comparaison avec des langages classiques
I these de Church-Turing
I programmation ? : oui
I efficacite en espace
I efficacite en temps
I efficacite en temps de developpement
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Comparaison avec des langages classiques
I these de Church-Turing
I programmation ? : oui
I efficacite en espace
I efficacite en temps
I efficacite en temps de developpement
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Comparaison avec des langages classiques
I these de Church-Turing
I programmation ? : oui
I efficacite en espace
I efficacite en temps
I efficacite en temps de developpement
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Comparaison avec des langages classiques
I these de Church-Turing
I programmation ? : oui
I efficacite en espace
I efficacite en temps
I efficacite en temps de developpement
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Programmation parcontraintes
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Programmation par contraintes
paradigme et exemples de langages
Decrire une situation avec des contraintes et employer unsolveur 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 resolution decontraintes
I la paradigme declaratif est celui de Prolog
I les premieres integrations des contraintes dans unlangage viennent de techniques Prolog
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Logique et contraintes
contraintes et swi-prolog
?- use_module(library(clpfd)).
?- 5 = 3 + X.
?- 5 #= 3 + X
----
somme(A,B,S) :- S #= A + B.
Techniques efficaces de resolution de contraintes dans desdomaines particuliers (par exemple, consistance d’arc etreduction d’intervalles).
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Carre 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).
Programmationlogique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Send more money
:- use_module(library(clpfd)).
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).
Programmationlogique
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
...
grid(Grid, Vars), label(Vars),printGrid(Vars).