• 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

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

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