• Aucun résultat trouvé

[PDF] Cours langage Prolog comment ça marche | Formation informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Cours langage Prolog comment ça marche | Formation informatique"

Copied!
99
0
0

Texte intégral

(1)

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

(2)

Contraintes

(3)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Un peu d’histoire

Roots

Calcul, preuves et automatisme

I calculs

I automates

(4)

Contraintes

O x y x+y

(cc). SolsticedHiver (source Wikip´edia)

I automates

(5)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Un peu d’histoire

Roots

Calcul, preuves et automatisme

I calculs

(cc) Roger McLassus (source Wikip´edia)

(cc). SolsticedHiver (source Wikip´edia)

I automates

(6)

Contraintes

I automates

(7)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Un peu d’histoire

Roots

Calcul, preuves et automatisme

I calculs

I automates

c´el´ebr´ee le 13 octobre

(8)

Contraintes

I automates

I preuves

(9)

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 ?

(10)

Contraintes

I en restant `a l’int´erieur d’un syst`eme formel : pas tout ce qui est “vrai” !

(11)

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

(12)

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 ?

(13)

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

(14)

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

(15)

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

(16)

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)

(17)

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(),

(18)

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

(19)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Logique et automatisation

des preuves

(20)

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 )

(21)

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 .

(22)

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 .

(23)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Un petit exercice

a M ⇒ J ∨ P b M ∨ P

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 .

(24)

Contraintes

d Pierre est rentr´e chez lui Montrer que si a et b et c alors d .

(25)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Un petit exercice

a M ⇒ J ∨ P b M ∨ P c J ⇒ ¬M d P

(26)

Contraintes

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

(27)

Programmation logique 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 R`egles :

I raisonnement par cas (´elimination de ∨)

I modus ponens (´elim/intro de ⇒)

(28)

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 ⇒)

(29)

Programmation logique 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 . 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

(30)

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

(31)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Un petit exercice (suite)

a M ⇒ J ∨ P

b M ∨ P

c J ⇒ ¬M

d P

(32)

Contraintes

d P

(33)

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

(34)

Contraintes

d P

(35)

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)

(36)

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.

(37)

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)

(38)

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)

(39)

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)

(40)

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)

(41)

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.

(42)

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”

(43)

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

(44)

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

(45)

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

(46)

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

(47)

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.

(48)

Contraintes

h2 ∀x∃y . p(x, y )

(49)

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

(50)

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

(51)

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

(52)

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

(53)

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.

(54)

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)

(55)

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)))

(56)

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)

(57)

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)))

(58)

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

(59)

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)))

(60)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

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).

(61)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

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).

(62)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

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).

(63)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

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).

(64)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

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).

(65)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

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).

(66)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

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

(67)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

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).

(68)

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).

(69)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Prolog

(70)

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

(71)

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).

(72)

Contraintes

I fait

I r`egle

I but

(73)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Remarque - exercice

Wissembourg Hagenau Strasbourg Sarre−Union Schirmeck Molsheim Colmar Sélestat Saverne Monswiller

(74)

Contraintes

h2 ∀x∃y . p(x, y )

(75)

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

(76)

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

(77)

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

(78)

Contraintes ?- X = 3. ?- X. ?- 3 = X, X = Y. ? X = 4 + 1. ? X = 3 + Y, Y = 2. ? X = truc(4, bidule). ? X = "toto".

(79)

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

(80)

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).

(81)

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).

(82)

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|_]).

(83)

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.

(84)

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.

(85)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Exemple : Crypto-arithm´

etique

TEN TEN TEN TEN FORTY ---SIXTY

(86)

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.

(87)

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).

(88)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Comparaison avec des langages classiques

(89)

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

(90)

Programmation logique Pascal Schreck Introduction Logique Prolog Contraintes

Comparaison avec des langages classiques

I th`ese de Church-Turing

(91)

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

(92)

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

(93)

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

(94)

Contraintes

Programmation par

(95)

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

(96)

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).

(97)

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).

(98)

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).

(99)

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 ...

Références

Documents relatifs

It is found that the three major factors affecting the decomposition rate of epoxy matrix are, in order of increasing influence, the steam flow-rate (slope term of 2.93), the

Nous y étudions l'ensemble des enclos fossoyés découverts par prospection aérienne depuis 1975 en Bretagne nord, en nous inspirant des méthodes d'app r oche mises

H4 : Le mouvement de la micro-prise de participation peut être considéré désormais au stade de test et d'affinement, pour lesquels des &#34;niches technologiques&#34; comme

Nous avons réalisé, par l’étude des installations artistiques de Quartier Éphémère, par l’analyse du projet de la Cité du Multimédia, de même que par celle du lieu

L ’opposition qui est établie entre « avoir un sens » et « parler » n’est pas très spectaculaire. Elle est cependant d ’une grande clarté : le rêve, certes, signifie quelque

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

conduite de la guerre pour les deux aspects du même monopole étatique de la violence légitime a pu être facilitée par cette répartition telle

A partir d’une enquête ethnographique au sein d’une organisation de désobéissance civile et d’entretiens semi-directifs avec des journalistes ayant couvert ses actions, cet