WWW - Cours Gratuit - Com Id 3764
WWW - Cours Gratuit - Com Id 3764
WWW - Cours Gratuit - Com Id 3764
logique
Pascal Schreck
Introduction
Logique
Introduction à la programmation logique et Prolog
Pascal Schreck
Oct. 2015
Programmation
logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Introduction
Programmation
Un peu d’histoire logique
Introduction
Calcul, preuves et automatisme Logique
Prolog
I calculs
Contraintes
I automates
I preuves
Programmation
Un peu d’histoire logique
Introduction
Calcul, preuves et automatisme Logique
Prolog
I calculs
Contraintes
O x y x+y
I automates
I preuves
Programmation
Un peu d’histoire logique
Introduction
Calcul, preuves et automatisme Logique
Prolog
I calculs
Contraintes
(cc) Roger McLassus
(source Wikipédia)
I automates
I preuves
Programmation
Un peu d’histoire logique
Introduction
Calcul, preuves et automatisme Logique
Prolog
I calculs
Contraintes
I automates
I preuves
Programmation
Un peu d’histoire logique
Introduction
Calcul, preuves et automatisme Logique
Prolog
I calculs
Contraintes
I automates
célébrée le 13 octobre
I preuves
Programmation
Un peu d’histoire logique
Introduction
Calcul, preuves et automatisme Logique
Prolog
I calculs
Contraintes
I automates
I preuves
Introduction
Deux questions Logique
Prolog
I que sait-on prouver ?
Contraintes
I que sait-on calculer ?
Programmation
Un peu d’histoire logique
Introduction
Deux questions Logique
Contraintes
I en restant à l’intérieur d’un système formel : pas tout
ce qui est “vrai” !
I que sait-on calculer ?
Programmation
Un peu d’histoire logique
Introduction
Deux questions Logique
Contraintes
I en restant à l’intérieur d’un système formel : pas tout
ce qui est “vrai” !
I théorème d’incomplétude de Gödel
Introduction
Deux questions Logique
Prolog
I que sait-on prouver ?
Contraintes
I que sait-on calculer ?
I pas tout !
Programmation
Un peu d’histoire logique
Introduction
Deux questions Logique
Prolog
I que sait-on prouver ?
Contraintes
I que sait-on calculer ?
I pas tout !
I machines de Turing, problème de l’arrêt :
version “automate” de la notion de calcul
Programmation
Un peu d’histoire logique
Introduction
Deux questions Logique
Prolog
I que sait-on prouver ?
Contraintes
I que sait-on calculer ?
I pas tout !
I machines de Turing, problème de l’arrêt :
version “automate” de la notion de calcul
I fonctions µ-récursives (Herbrand, Kleene, Church) :
version “fonctionnelle” de la notion de calcul
Programmation
Un peu d’histoire logique
Introduction
Deux questions Logique
Prolog
I que sait-on prouver ?
Contraintes
I que sait-on calculer ?
I pas tout !
I machines de Turing, problème de l’arrêt :
version “automate” de la notion de calcul
I fonctions µ-récursives (Herbrand, Kleene, Church) :
version “fonctionnelle” de la notion de calcul
I Thm de Kleene, et thèse de Church-Turing
Programmation
Un peu d’histoire logique
Introduction
Logique
Prolog
Contexte : computers, langages de programmation
Contraintes
I du calculateur à l’ordinateur
I représentation “logique” des données
I codage d’un enchaı̂nement d’opérations “en dur”
I codage d’un enchaı̂nement d’opérations en mémoire
avec des 0 et de 1 ... dur à écrire, à lire, à débuger
I langages de “haut niveau” et paradigmes de
programmation
I impératif/procédural et objets (⇐ Turing)
I fonctionnel (⇐ Church)
I logique (⇐ Herbrand)
Programmation
Un peu d’histoire logique
Pascal Schreck
Introduction
Logique
I impératif/procédural et objets
Prolog
I Fortran (1954), Cobol (1959) Algol, Simula Contraintes
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(),
Programmation
Un peu d’histoire logique
Introduction
I travaux théoriques de Boole, Herbrand, Robinson,
Logique
Kowalski ... Prolog
I travaux sur des prouveurs automatiques en logique du Contraintes
1er ordre
I travaux sur les langues naturelles (TAL) Colmerauer,
Roussel
I Prolog I développé à Marseille (72), large diffusion
I Warren : notion de machine virtuelle → Prolog
d’Edimbourg.
I Langages de 5ème génération, etc. (avatars actuels :
langages à contraintes, ontologies ...)
I Prolog IV, Sictus : programmations par contraintes
I SWI-Prolog : dialecte d’Edimbour + beaucoup de
bibliothèques
Programmation
logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Logique et automatisation
des preuves
Programmation
Loqique des propositions logique
Pascal Schreck
Logique
I des opérations (connecteurs logiques)
Prolog
I et : a ∧ b, (a.b en logique combinatoire, graph. )
Contraintes
I ou : a ∨ b, (a + b en logique combinatoire, graph. )
I non : ¬a, (a en logique combinatoire graph. )
I implique : a ⇒ b
I équivalent : a ⇔ b
I formule et valeur de vérité : une variable prop. peut
prendre la valeur vrai ou faux (1 ou 0), on peut ainsi
interpréter une formule (notions de satisfaisable, valide)
a ∨ ¬a est valide (tautologie), a ⇒ b est satisfaisable.
¬a ∨ b et a ⇒ b sont équivalentes.
I preuve d’une formule logique ?
I table de vérité (“preuve” sémantique et validité )
I système axiomatique (preuves et théorèmes)
Programmation
Un petit exercice logique
Pascal Schreck
a Si Marie est à la bibliothèque (M) alors soit Jean est
Introduction
allé au cinéma (J), soit Pierre est rentré chez lui (P)
Logique
b Soit Marie est à la bibliothèque, soit Pierre est rentré Prolog
chez lui (ou les deux) Contraintes
Pascal Schreck
a M ⇒J ∨P
Introduction
b Soit Marie est à la bibliothèque, soit Pierre est rentré Logique
chez lui (ou les deux) Prolog
bibliothèque
d Pierre est rentré chez lui
Montrer que si a et b et c alors d.
Programmation
Un petit exercice logique
Pascal Schreck
a M ⇒J ∨P
Introduction
b M ∨P Logique
c si Jean est allé au cinéma, alors Marie n’est pas à la Prolog
bibliothèque Contraintes
Pascal Schreck
a M ⇒J ∨P
Introduction
b M ∨P Logique
c J ⇒ ¬M Prolog
Pascal Schreck
a M ⇒J ∨P
Introduction
b M ∨P Logique
c J ⇒ ¬M Prolog
d P Contraintes
Pascal Schreck
a M ⇒J ∨P
Introduction
b M ∨P Logique
c J ⇒ ¬M Prolog
d P Contraintes
Pascal Schreck
a M ⇒J ∨P
Introduction
b M ∨P Logique
c J ⇒ ¬M Prolog
d P Contraintes
Pascal Schreck
a M ⇒J ∨P
Introduction
b M ∨P Logique
c J ⇒ ¬M Prolog
d P Contraintes
Pascal Schreck
a M ⇒J ∨P
Introduction
b M ∨P Logique
c J ⇒ ¬M Prolog
d P Contraintes
Pascal Schreck
a M ⇒J ∨P
Introduction
b M ∨P Logique
c J ⇒ ¬M Prolog
d P Contraintes
Pascal Schreck
a M ⇒J ∨P
Introduction
b M ∨P Logique
c J ⇒ ¬M Prolog
d P Contraintes
Pascal Schreck
a M ⇒J ∨P ou ¬M ∨ J ∨ P (clause)
Introduction
b M ∨P Logique
c J ⇒ ¬M Prolog
d P Contraintes
Pascal Schreck
a M ⇒J ∨P ou ¬M ∨ J ∨ P (1)
Introduction
b M ∨P ou M ∨P (2) Logique
c J ⇒ ¬M Prolog
d P Contraintes
Pascal Schreck
a M ⇒J ∨P ou ¬M ∨ J ∨ P (1)
Introduction
b M ∨P ou M ∨P (2) Logique
c J ⇒ ¬M ou ¬J ∨ ¬M (3) Prolog
d P Contraintes
Pascal Schreck
a M ⇒J ∨P ou ¬M ∨ J ∨ P (1)
Introduction
b M ∨P ou M ∨P (2) Logique
c J ⇒ ¬M ou ¬J ∨ ¬M (3) Prolog
Pascal Schreck
a M ⇒J ∨P ou ¬M ∨ J ∨ P (1)
Introduction
b M ∨P ou M ∨P (2) Logique
c J ⇒ ¬M ou ¬J ∨ ¬M (3) Prolog
Pascal Schreck
a M ⇒J ∨P ou ¬M ∨ J ∨ P (1)
Introduction
b M ∨P ou M ∨P (2) Logique
c J ⇒ ¬M ou ¬J ∨ ¬M (3) Prolog
Pascal Schreck
a M ⇒J ∨P ou ¬M ∨ J ∨ P (1)
Introduction
b M ∨P ou M ∨P (2) Logique
c J ⇒ ¬M ou ¬J ∨ ¬M (3) Prolog
Pascal Schreck
a M ⇒J ∨P ou ¬M ∨ J ∨ P (1)
Introduction
b M ∨P ou M ∨P (2) Logique
c J ⇒ ¬M ou ¬J ∨ ¬M (3) Prolog
Pascal Schreck
a M ⇒J ∨P ou ¬M ∨ J ∨ P (1)
Introduction
b M ∨P ou M ∨P (2) Logique
c J ⇒ ¬M ou ¬J ∨ ¬M (3) Prolog
Pascal Schreck
Introduction
Logique
Prolog
I proposition, variable propositionnelle
Contraintes
I connecteur logique ∧, ∨, ¬, ⇒
I littéral : une variable propositionnelle ou sa négation
I littéral positif : p (p est une proposition.
I littéral négatif : ¬p
I clause : une disjonction de littéraux a ∨ ¬b ∨ ¬c ∨ l
I résolution : on “efface” un littéral d’une clause avec son
opposé dans une autre clause en le remplaçant par les
autres littéraux de cette dernière.
Programmation
Logique des prédicats logique
Pascal Schreck
Contraintes
Programmation
Logique des prédicats logique
Pascal Schreck
Contraintes
I variables et termes prédicatifs/relationnels x un homme,
y un autre homme : maitre(y , x)
Programmation
Logique des prédicats logique
Pascal Schreck
Contraintes
I variables et termes prédicatifs/relationnels x un homme,
y un autre homme : maitre(y , x)
I fonctions et termes fonctionnels
n est un entier s(n) désigne son successeur.
Programmation
Logique des prédicats logique
Pascal Schreck
Contraintes
I variables et termes prédicatifs/relationnels x un homme,
y un autre homme : maitre(y , x)
I fonctions et termes fonctionnels
n est un entier s(n) désigne son successeur.
I quantifications
∀x∃y . maitre(y , x), ∀n. n < s(n)
Programmation
Logique des prédicats logique
Pascal Schreck
Contraintes
I variables et termes prédicatifs/relationnels x un homme,
y un autre homme : maitre(y , x)
I fonctions et termes fonctionnels
n est un entier s(n) désigne son successeur.
I quantifications
∀x∃y . maitre(y , x), ∀n. n < s(n)
Une hiérarchie
I logique des propositions : logique d’ordre 0
I logique des prédicats : logique d’ordre 1
I avec des variables pour les fonctions : logiques d’ordre
supérieur
Programmation
Logique des prédicats logique
Pascal Schreck
Introduction
quelque chose est “vrai” (la notion de “vrai” est aussi Prolog
Contraintes
plus difficile à définir)
I Il y a des règles d’inférence pour faire des preuves
(plusieurs systèmes possibles)
I Remarque : impossibilité d’avoir des prouveurs généraux
automatiques ⇒ assistants de preuve.
I La méthode par résolution marche encore (en ajoutant
une règle)
I elle est complète pour la réfutation, mais donne un
procédé de semi décision pour savoir si une formule est
un thm.
Programmation
Un exemple simple logique
Pascal Schreck
Énoncé Introduction
Logique
h1 ∀x, y , z. p(x, y ) ∧ p(y , z) ⇒ g (x, z)
Prolog
h2 ∀x∃y . p(x, y ) Contraintes
Pascal Schreck
Énoncé Introduction
Logique
h1 ∀x, y , z. p(x, y ) ∧ p(y , z) ⇒ g (x, z)
Prolog
h2 ∀x∃y . p(x, y ) Contraintes
Pascal Schreck
Énoncé Introduction
Logique
h1 ∀x, y , z. p(x, y ) ∧ p(y , z) ⇒ g (x, z)
Prolog
h2 ∀x∃y . p(x, y ) Contraintes
Pascal Schreck
Énoncé Introduction
Logique
h1 ∀x, y , z. p(x, y ) ∧ p(y , z) ⇒ g (x, z)
Prolog
h2 ∀x∃y . p(x, y ) Contraintes
Pascal Schreck
Énoncé Introduction
Logique
h1 ∀x, y , z. p(x, y ) ∧ p(y , z) ⇒ g (x, z)
Prolog
h2 ∀x∃y . p(x, y ) Contraintes
Pascal Schreck
Énoncé Introduction
Logique
h1 ∀x, y , z. p(x, y ) ∧ p(y , z) ⇒ g (x, z)
Prolog
h2 ∀x∃y . p(x, y ) Contraintes
Pascal Schreck
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1 )
Introduction
(2) p(x, f (x)) (h2 )
Logique
(3) ¬g (a, Z ) (¬g ) Prolog
Contraintes
Programmation
Un exemple simple (preuve) logique
Pascal Schreck
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1 )
Introduction
(2) p(x, f (x)) (h2 )
Logique
(3) ¬g (a, Z ) (¬g ) Prolog
Pascal Schreck
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1 )
Introduction
(2) p(x, f (x)) (h2 )
Logique
(3) ¬g (a, Z ) (¬g ) Prolog
Pascal Schreck
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1 )
Introduction
(2) p(x, f (x)) (h2 )
Logique
(3) ¬g (a, Z ) (¬g ) Prolog
Pascal Schreck
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1 )
Introduction
(2) p(x, f (x)) (h2 )
Logique
(3) ¬g (a, Z ) (¬g ) Prolog
Pascal Schreck
(1) ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z) (h1 )
Introduction
(2) p(x, f (x)) (h2 )
Logique
(3) ¬g (a, Z ) (¬g ) Prolog
Pascal Schreck
I terme fonctionnel : quelque chose de la forme
f (t1 , ...tm ) qui représente un objet (f est un symbole Introduction
Logique
fonctionnel).
Prolog
Contraintes
Programmation
Définitions logique
Pascal Schreck
I terme fonctionnel : quelque chose de la forme
f (t1 , ...tm ) qui représente un objet (f est un symbole Introduction
Logique
fonctionnel).
Prolog
I terme prédicatif : quelque chose de la forme Contraintes
r (t1 , t2 , ..., tk ) qui représente une relation entre objets
(r est un symbole prédicatif).
Programmation
Définitions logique
Pascal Schreck
I terme fonctionnel : quelque chose de la forme
f (t1 , ...tm ) qui représente un objet (f est un symbole Introduction
Logique
fonctionnel).
Prolog
I terme prédicatif : quelque chose de la forme Contraintes
r (t1 , t2 , ..., tk ) qui représente une relation entre objets
(r est un symbole prédicatif).
I un littéral est un terme prédicatif (littéral positif) ou la
négation d’un terme prédicatif (littéral négatif).
Programmation
Définitions logique
Pascal Schreck
I terme fonctionnel : quelque chose de la forme
f (t1 , ...tm ) qui représente un objet (f est un symbole Introduction
Logique
fonctionnel).
Prolog
I terme prédicatif : quelque chose de la forme Contraintes
r (t1 , t2 , ..., tk ) qui représente une relation entre objets
(r est un symbole prédicatif).
I un littéral est un terme prédicatif (littéral positif) ou la
négation d’un terme prédicatif (littéral négatif).
I une clause est une disjonction de littéraux. Une clause
de Horn est une clause qui contient au plus 1 littéral
positif :
Programmation
Définitions logique
Pascal Schreck
I terme fonctionnel : quelque chose de la forme
f (t1 , ...tm ) qui représente un objet (f est un symbole Introduction
Logique
fonctionnel).
Prolog
I terme prédicatif : quelque chose de la forme Contraintes
r (t1 , t2 , ..., tk ) qui représente une relation entre objets
(r est un symbole prédicatif).
I un littéral est un terme prédicatif (littéral positif) ou la
négation d’un terme prédicatif (littéral négatif).
I une clause est une disjonction de littéraux. Une clause
de Horn est une clause qui contient au plus 1 littéral
positif :
I l (clause réduite à un littéral positif) = fait
Programmation
Définitions logique
Pascal Schreck
I terme fonctionnel : quelque chose de la forme
f (t1 , ...tm ) qui représente un objet (f est un symbole Introduction
Logique
fonctionnel).
Prolog
I terme prédicatif : quelque chose de la forme Contraintes
r (t1 , t2 , ..., tk ) qui représente une relation entre objets
(r est un symbole prédicatif).
I un littéral est un terme prédicatif (littéral positif) ou la
négation d’un terme prédicatif (littéral négatif).
I une clause est une disjonction de littéraux. Une clause
de Horn est une clause qui contient au plus 1 littéral
positif :
I l (clause réduite à un littéral positif) = fait
I t ∨ ¬h1 ∨ ¬h2 ... ∨ ¬hk est une règle
(souvenez-vous, c’est équivalent à : h1 ∧ ... ∧ hk ⇒ t)
Programmation
Définitions logique
Pascal Schreck
I terme fonctionnel : quelque chose de la forme
f (t1 , ...tm ) qui représente un objet (f est un symbole Introduction
Logique
fonctionnel).
Prolog
I terme prédicatif : quelque chose de la forme Contraintes
r (t1 , t2 , ..., tk ) qui représente une relation entre objets
(r est un symbole prédicatif).
I un littéral est un terme prédicatif (littéral positif) ou la
négation d’un terme prédicatif (littéral négatif).
I une clause est une disjonction de littéraux. Une clause
de Horn est une clause qui contient au plus 1 littéral
positif :
I l (clause réduite à un littéral positif) = fait
I t ∨ ¬h1 ∨ ¬h2 ... ∨ ¬hk est une règle
(souvenez-vous, c’est équivalent à : h1 ∧ ... ∧ hk ⇒ t)
I une clause avec que des littéraux négatifs est une “liste”
de buts
Programmation
Définitions logique
Pascal Schreck
I terme fonctionnel : quelque chose de la forme
f (t1 , ...tm ) qui représente un objet (f est un symbole Introduction
Logique
fonctionnel).
Prolog
I terme prédicatif : quelque chose de la forme Contraintes
r (t1 , t2 , ..., tk ) qui représente une relation entre objets
(r est un symbole prédicatif).
I un littéral est un terme prédicatif (littéral positif) ou la
négation d’un terme prédicatif (littéral négatif).
I une clause est une disjonction de littéraux. Une clause
de Horn est une clause qui contient au plus 1 littéral
positif :
I la règle de résolution fonctionne de la même manière
qu’en logique des propositions en considérant des
littéraux opposés et unifiables (l’unificateur le plus
général est appliqué aux clauses unifiées).
Programmation
Définitions logique
Pascal Schreck
I terme fonctionnel : quelque chose de la forme
f (t1 , ...tm ) qui représente un objet (f est un symbole Introduction
Logique
fonctionnel).
Prolog
I terme prédicatif : quelque chose de la forme Contraintes
r (t1 , t2 , ..., tk ) qui représente une relation entre objets
(r est un symbole prédicatif).
I un littéral est un terme prédicatif (littéral positif) ou la
négation d’un terme prédicatif (littéral négatif).
I une clause est une disjonction de littéraux. Une clause
de Horn est une clause qui contient au plus 1 littéral
positif :
I la règle de résolution fonctionne de la même manière
qu’en logique des propositions en considérant des
littéraux opposés et unifiables (l’unificateur le plus
général est appliqué aux clauses unifiées).
I c’est comme ça que fonctionne le langage Prolog
Programmation
logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Prolog
Programmation
Premier exemple logique
Pascal Schreck
Programme Introduction
Logique
parent(pam,bob). pam tom
Prolog
parent(tom,bob). Contraintes
parent(tom, liz). bob liz
parent(bob,ann).
parent(bob,pat). ann pat
parent(pat,jim).
jim
Questions
?- parent(tom, liz).
?- parent(pat,ben).
?- parent(X,bob).
?- parent(X,Y),parent(Y,ann).
Programmation
Premier exemple complété logique
Pascal Schreck
Introduction
Programme Logique
Prolog
grand_parent(X,Y) :- parent(X,Z), parent(Z,Y). Contraintes
Questions
?- grand_parent(X,ann).
?- fos(ann, pat).
?- fos(ann, X).
Programmation
Vocabulaire logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
I fait
I règle
I but
I non-déterminisme
Programmation
Remarque - exercice logique
Pascal Schreck
Wissembourg
Introduction
Logique
Prolog
Hagenau
Saverne
Strasbourg
Schirmeck
Molsheim
Sélestat
Colmar
Programmation
Retour sur le deuxième exemple logique
Pascal Schreck
Énoncé Introduction
Logique
h1 ∀x, y , z. p(x, y ) ∧ p(y , z) ⇒ g (x, z)
Prolog
h2 ∀x∃y . p(x, y ) Contraintes
Pascal Schreck
Logique
h1 ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z)
Prolog
h2 p(x, f (x)) f fonction de Skolem Contraintes
Pascal Schreck
Logique
h1 ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z)
Prolog
h2 p(x, f (x)) f fonction de Skolem Contraintes
Programme
g(X,Z) :- p(X,Y), p(Y,Z).
p(X,f(X)).
Question
?- g(a,Z).
Programmation
Retour sur le deuxième exemple logique
Pascal Schreck
Logique
h1 ¬p(x, y ) ∨ ¬p(y , z) ∨ g (x, z)
Prolog
h2 p(x, f (x)) f fonction de Skolem Contraintes
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ésigne pas une fonction, c’est un symbole fonctionnel,
appelé foncteur en Prolog
Programmation
Unification et foncteurs ? logique
Pascal Schreck
Introduction
Logique
Contraintes
?- X = 3.
?- X.
?- 3 = X, X = Y.
? X = 4 + 1.
? X = 3 + Y, Y = 2.
? X = truc(4, bidule).
? X = "toto".
Programmation
Exemple 3 : le singe et les bananes logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Prolog
move(etat(P, surlesol, P, H),
Contraintes
grimper,
etat(P, surlaboite,P,H)).
peutprendre(etat(_,_,_,possede)).
peutprendre(E1) :- move(Etat1, Act, E2),peutprendre(E2).
-----
?- peutprendre(etat(alaporte, ausol, alafenetre,napas)).
Programmation
Exemple 4 : circuits logique
Introduction
ev_or(0, 0, 0). ev_or(X,Y,1) :- X=1 ; Y=1.
Logique
Prolog
ev_xor(X,Y,0) :- X=Y. ev_xor(X,Y,1) :- X\=Y.
Contraintes
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).
Programmation
Listes logique
Pascal Schreck
Principes Introduction
Logique
I liste vide : []
Prolog
I liste premier élément + liste des suivants : Contraintes
[prem | liste_suivants]
I sucre syntaxique : [7, 42, toto, f(a)]
[ 7 | [ 42 | [ toto | [ f(a) | []]]]]
estvide([]).
premier([P|_],P).
suivants[_|L], L).
appartient(X, [X|_]).
appartient(X, [_|L]) :- appartient(X,L).
Programmation
Listes et opérateurs logique
X in [X|_]. Introduction
X in [_|L] :- X in L. Logique
Prolog
:- op(550, xfx, estdans). Contraintes
:- op(500, xfx, reste).
Pascal Schreck
Questions
Introduction
Logique
?- X = 2+3.
Prolog
?- X is 2+3.
Contraintes
?- 1+4 = 2+3.
Programmes
facto(0,1).
facto(N,F) :- N1 is N-1,
facto(N1,F1),
F is N*F1.
Programmation
Exemple : Crypto-arithmétique logique
TEN Introduction
TEN Logique
TEN Prolog
FORTY Contraintes
-----------
SIXTY
Programmation
Exemple : Crypto-arithmétique logique
TEN Introduction
TEN Logique
TEN Prolog
FORTY Contraintes
-----------
SIXTY
ttf(T,E,N,F,O,R,Y,S,I,X) :-
[T,E,N,F,O,R,Y,S,I,X] >=< [0,1,2,3,4,5,6,7,8,9],
4*(T*100+E*10+N) + F*10000+O*1000+R*100+T*10+Y =:=
S*10000+I*1000+X*100+T*10+Y.
Programmation
Exemple : Crypto-arithmétique logique
Pascal Schreck
Introduction
ttf2 :- Logique
[T,E,N,F,O,R,Y,S,I,X] >=< [0,1,2,3,4,5,6,7,8,9], Prolog
T1 is (T*100+E*10+N), Contraintes
T2 is F*10000+O*1000+R*100+T*10+Y ,
T3 is S*10000+I*1000+X*100+T*10+Y,
4*T1+T2 =:= T3,
put(’ ’), put(’ ’),writeln(T1),
put(’ ’), put(’ ’),writeln(T1),
put(’ ’), put(’ ’),writeln(T1),
put(’ ’), put(’ ’),writeln(T1),
writeln(T2),
writeln(’-----------’),
writeln(T3).
Programmation
Comparaison avec des langages classiques logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Programmation
Comparaison avec des langages classiques logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
I thèse de Church-Turing
Programmation
Comparaison avec des langages classiques logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
I thèse de Church-Turing
I programmation ? : oui
Programmation
Comparaison avec des langages classiques logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
I thèse de Church-Turing
I programmation ? : oui
I efficacité en espace
Programmation
Comparaison avec des langages classiques logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
I thèse de Church-Turing
I programmation ? : oui
I efficacité en espace
I efficacité en temps
Programmation
Comparaison avec des langages classiques logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
I thèse de Church-Turing
I programmation ? : oui
I efficacité en espace
I efficacité en temps
I efficacité en temps de développement
Programmation
logique
Pascal Schreck
Introduction
Logique
Prolog
Contraintes
Programmation par
contraintes
Programmation
Programmation par contraintes logique
Pascal Schreck
Logique
Décrire une situation avec des contraintes et employer un
Prolog
solveur pour trouver toutes les instances possibles
Contraintes
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ésolution de
contraintes
I la paradigme déclaratif est celui de Prolog
I les premières intégrations des contraintes dans un
langage viennent de techniques Prolog
Programmation
Logique et contraintes logique
Pascal Schreck
Introduction
Logique
contraintes et swi-prolog Prolog
Contraintes
?- use_module(library(clpfd)).
?- 5 = 3 + X.
?- 5 #= 3 + X
----
somme(A,B,S) :- S #= A + B.
Pascal Schreck
Introduction
:- use_module(library(clpfd)).
Logique
Prolog
carre(Vars) :-
Contraintes
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).
Programmation
Send more money logique
Pascal Schreck
Introduction
Logique
:- use_module(library(clpfd)). Prolog
Contraintes
puzzle([S,E,N,D,M,O,R,Y]) :-
Vars = [S,E,N,D,M,O,R,Y],
Vars ins 0..9,
all_different(Vars),
S*1000 + E*100 + N*10 + D + M*1000
+ O*100 + R*10 + E #=
M*10000 + O*1000 + N*100 + E*10 + Y,
M #> 0, S #> 0.
% label(Vars).
Programmation
Sudoku logique
Pascal Schreck
sudoku(Grid, Vars) :- Vars = [
Introduction
A1,A2,A3,A4,A5,A6,A7,A8,A9,
Logique
B1,B2,B3,B4,B5,B6,B7,B8,B9,
Prolog
C1,C2,C3,C4,C5,C6,C7,C8,C9,
D1,D2,D3,D4,D5,D6,D7,D8,D9, Contraintes
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).