Programmation logique Programmation Logique Eléments de

Transcription

Programmation logique Programmation Logique Eléments de
Programmation
Logique
Programmation logique
• Suite de la programmation exotique
• Le langage Prolog
Pierre Tellier
IUP3 GMI
2004/2005
UFR Maths-Info – IUP 3
Eléments de logique
• Variables propositionnelles (Booléens)
• Connecteurs : non, et, ou, implique,
équivalent ¬∧∨⇒⇔
• p⇒q
0 0
1 0
0 1
1 1
• Antilogie : q et non q
• Tautologie : q ou non q
(q ou non p)
1
0
1
1
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
Résolution
• Etant donnée une formule, on
cherche une valuation pour que la
formule soit vraie
– Littéral : variable propositionnelle ou sa
négation
– Clause : disjonction de littéraux
– Forme clausale : conjonction de clauses
UFR Maths-Info – IUP 3
Clause de Horn
• Clause avec au plus un littéral positif
• Si que des négatifs : clause de Horn
négative.
• Lien avec programmation logique
– ¬p∨¬q∨¬r∨s
– ¬(p∧q∧r)∨s
– (p∧q∧r) ⇒s
• Assertion logique : s est vraie si p, q et r
sont vérifiées
• s :- p, q, r
UFR Maths-Info – IUP 3
1
•
•
•
•
•
•
•
•
C1 : p
C2 : p⇒q
C3 : q⇒r
Question : a-t-on r?
C1 : p
C2 : q∨¬p
C3 : r∨¬q
But : r
UFR Maths-Info – IUP 3
PROgrammation
LOGique
• Programmation sous forme de
relations logiques
– L’interpréteur cherche à résoudre le
problème à partir de connaissances en
utilisant la résolution
– On ne dit pas à l’ordinateur ce qu’il doit
faire (et surtout comment), on se
contente de modéliser logiquement le
problème
UFR Maths-Info – IUP 3
p
q∨¬p
r∨¬q
¬r
q
r
[]
UFR Maths-Info – IUP 3
• Programmation classique : on peut
faire une fonction "genre", pour
répondre à la question : quel est le
genre de machin ?
• En prolog, cette fonction permet
aussi de répondre à la question :
quels sont tous les hommes ?
UFR Maths-Info – IUP 3
Bibliographie
• En programmation classique, on peut
écrire un programme qui concatène 2
chaînes de caractères
• En Prolog, ce programme permet de
répondre à la question : que vaut x
qui concaténé à "b" donne "ab" ?
• Mais aussi à : que valent x et y qui
concaténés donnent "ab" ?
UFR Maths-Info – IUP 3
• Y. Bellot, "Objectif Prolog
• J. Elbaz, "Programmer en Prolog",
Ellipses
• L. Sterling & E. Shapiro, "L'art de
Prolog", Masson
UFR Maths-Info – IUP 3
2
Prolog
• 1972 : création de Prolog par A.
Colmerauer et P. Roussel (Groupe IA,
Luminy, Univ. Marseille)
• Déduire des conséquences des
hypothèses logiques
• Applications
• Caractéristiques
–
–
–
–
Pattern matching
Backtracking
Interactif
Déclaratif
– IA
– Traitement langage naturel
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
Programme Prolog
• Enoncer des connaissances et
hypothèses : axiomes
• Résoudre le problèmes :
démonstration à partir de ces
axiomes
• Encore une programmation
totalement différente de la
programmation impérative.
• Calcul (inférence logique) sur des
relations
• Base de données + requêtes
– BDD : clauses
• faits
• règles
– Exécution interactive : question
• No
• Yes : Prolog identifie les variables
satisfaisant la question
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
Syntaxe Prolog
• Termes
– Atomes (constantes) : objets définis du
problème
• Identificateur : commence par une lettre
minuscule
• Nombre
• Chaîne de caractères entre apostrophes
(messages)
– Variables : objets indéfinis du problème
• Identificateur : commence par une lettre
majuscule
UFR Maths-Info – IUP 3
• Clauses
– Faits : connaissances de bases établies
a priori
• fait. (formule prédictive quelconque)
– Règles : règles de manipulation de
connaissance
• conclusion :- premisse.
• concl :- prem1, … , premN. (conjonction de
premisses)
UFR Maths-Info – IUP 3
3
Prédicat / foncteur
• Prédicat unaire
– Propriété de l'argument
– chien(rex).
– pasBo(momo).
• Binaire
• Formule (prédictive)
– Application d'un prédicat à ses
arguments
– Fait, jugement
– Relation entre 2 objets
– plusBo(moi,toi).
• arité > 2
– Lien entre arguments
– note(dugenou,pfl,2).
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
Faits
masculin(jean).
masculin(luc).
féminin(catherine).
prédicat(arg1, …, argN).
père(loïc,gérard).
père(gérard, maxime).
père(gérard,lise).
• père/2
prédicat/arité
masculin/1
UFR Maths-Info – IUP 3
Faits universels
• Contiennent une ou plusieurs
variables quantifiées
couleurchat(nuit,Chat,gris).
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
Termes clos, non clos
• clos : ne contient pas de variable
• terme non clos T : ensemble INFINI
de termes clos (les instances de T)
obtenus en substituant les variables
de T par tous les termes clos
possibles
UFR Maths-Info – IUP 3
4
Question
existentielle
Questions
• Questions (buts) : problèmes à résoudre
– ?- but. (but simple: formule prédictive)
– ?- but1, … , butN. (conjonction de buts)
• permettent de savoir si un fait est vérifié
?- père(loïc, gérard).
Yes
?- père(loïc,maxime).
No
UFR Maths-Info – IUP 3
• Comporte une ou plusieurs variables?
?- père(X,loïc).
Est ce qu'il existe X tel que la relation
père(X,loïc) existe ?
?- père(Y,Z).
Est ce qu'il existe X et Y tels que la
relation père(X,Y) existe ?
UFR Maths-Info – IUP 3
Unification
• Procédé par lequel on essaie de
rendre 2 formules identiques en
donnant des valeurs aux variables
qu'elles contiennent
• Peut échouer
– père(X,X)
UFR Maths-Info – IUP 3
• egal(X,X)
• =, \=
• ==, \==
Opérateurs
d'unification
• Prolog unifie le terme de la question au
terme contenu dans la base de données.
• Substitution des variables par des termes
(constantes)
• Un terme A est une instance de B si il
existe une substitution de A à B
• ex masculin(jean) instance de masculin(X)
• {X=jean} : substitution correspondante
• Une variable instanciée ne peut changer
de valeur
UFR Maths-Info – IUP 3
l
?- masculin(jean).
Yes
?- masculin(X).
X = jean ;
X = luc ;
No
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
5
Variables partagées
Tous les fils d'un père.
?- pere(X,Y), masculin(Y).
UFR Maths-Info – IUP 3
• Si X est un homme alors X boit de la bière
(en cours de pfl)
boit(X, bière) :- homme(X).
• Il n'y a pas de fumée sans feu
fumée :- feu.
• Albert attaquera le prof de pfl si il echoue
attaque('Albert',X) :note('Albert',pfl,Y),inférieurà10(Y),
enseigne(X,pfl).
UFR Maths-Info – IUP 3
Règles
• Définissent des relations à partir
des autres relations.
but :- C1, … CN.
• Clause de Horn
• Tête : but
• Eléments du corps : sous buts.
Doivent être vérifiés pour pour
vérifier le but
UFR Maths-Info – IUP 3
majeur(X) :- age(X,Y), superieur(Y,18).
mineur(X) :- age(X,Y), inferieur(Y,18).
différentes
unique(partagée)
UFR Maths-Info – IUP 3
Variables anonymes
majeur(X) :- age(X,Y), superieur(Y,18).
mineur(X) :- age(X,Y), inferieur(Y,18).
majeur(Ma) :- age(Ma,Aa), superieur(Aa,18).
mineur(Mi) :- age(Mi,Ai), inferieur(Ai,18).
UFR Maths-Info – IUP 3
majeur(X) :- age(X,Y), sup(Y,18).
majeur(X) :- age(X,_), sup(_,18).
• Variables partagées : Utilisation
délicate
• Semi-anonymat
majeur(X) :- age(X,_Y), sup(_Y,18).
UFR Maths-Info – IUP 3
6
Portée
• Pas de conjonctions de faits
• Pas de conjonctions de conclusions
• Constantes
– La totalité du programme
• Variables
– Clause dans laquelle elle se trouve
UFR Maths-Info – IUP 3
Exercices
• Arbre généalogique
• Coloriage
UFR Maths-Info – IUP 3
SWI-Prolog
•
•
•
•
http://www.swi-prolog.org/
versions linux, windows, …
installé sur ada
Possibilité
– écrire du code C/C++ pour définir de
nouveaux prédicats
– embarquer swi-prolog dans applications
C/C++
– gcc, msvc, …
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
Ecriture Prolog
• Faits et règles d'un même prédicat
groupés
• L'ordre des sous buts a une
importance
• L'ordre des faits / règles n'a pas
d'importance
UFR Maths-Info – IUP 3
SWI-Prolog
?- consult('toto.pl').
?- ['toto.pl'].
?- [toto].
?- ['toto.pl', 'titi.pl'].
?- listing.
?- listing(père).
?- reconsult('toto.pl').
?- [-'toto.pl'].
?- halt.
UFR Maths-Info – IUP 3
7
Résolution Prolog
• Principe d'effacement
• Chaînage Arrière
– Résolution de buts
• Profondeur d'abord
– Résolution complète du 1er but
• Régime par tentative
Chaînage arrière
• Résolution d'un but B
• Recherche d'une clause ayant B
comme conclusion
– fait B. : le but B est montré
– règle B :- P1, … , PN. Il faut résoudre les
prémisses
– Choix 1ère clause, retour arrière
éventuel
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
Profondeur d'abord
(1) p_atmo_elevee.
(2) temp_elevee.
(3) anticyclone :- p_atmo_elevee.
(4) beau :- anticyclone.
?- beau.
UFR Maths-Info – IUP 3
Interprétation
logique
chemin(Z,Z).
chemin(X,Y) :- lien(X,I),chemin(I,Y).
Attention bouclage !
chemin(Z,Z).
chemin(X,Y) :- chemin(I,Y),lien(X,I).
UFR Maths-Info – IUP 3
(1) p_atmo_elevee.
(2) temp_elevee.
(3) anticyclone :- isobare_eleve.
(4) isobare_eleve :- p_atmo_elevee.
(5) beau :- anticyclone, temp_elevee.
?- beau.
UFR Maths-Info – IUP 3
• Point sur axe x ou y
axe(_,0,0).
axe(0,_,0).
?- axe(0,0,C).
C=0
C=0
Pb : performances, lisibilité des résultats
UFR Maths-Info – IUP 3
8
Arithmétique
• En logique pure
• Opérateurs arithmétiques impurs
En logique pure
• A l'aide de relations ternaires
add(0, 1, 1).
add(1, 0, 1).
add(1, 1, 2).
add(0, 2, 2).
add(2, 0, 2).
sub(X,Y,Z) :- add(Y,Z,X).
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
Arithmétique impure
lesseq(X,Y) :- add(X,_,Y).
even(X) :- add(Y,Y,X).
?- lesseq(X,10), lesseq(Y,10), tester(X,Y).
fact(0,1).
fact(N,FN) :- sub(N,1,X), fact(X,FX),
mult(N,FX,FN).
?- fact(5,X).
?- fact(X,X).
?- fact(X,120).
UFR Maths-Info – IUP 3
1+1 n'est pas égal à 2
fact(0,1).
fact(N,FN) :- X is N-1, fact(X,FX), FN is
N*FX.
fact(N,FN) :- N>0, X is N-1, fact(X,FX), FN
is N*FX.
longueur([],0).
longueur([T|R],N) :longueur(R,M), N is M+1.
UFR Maths-Info – IUP 3
SWI-Prolog
égal_à_deux(X) :- X = 1+1.
?- égal_à_deux(2).
No
?- égal_à_deux(1+1).
Yes
?- égal_à_deux(X).
X = 1+1 ;
No
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
9
Structures de
données
Enregistrements
• Enregistrements : unification
• Types récursifs
– Listes
– Arbres …
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
Listes
• Liste vide []
• Liste non vide [T|R]
• Ex [1,2,3].
• concaténation
concatène([],Y,Z) : vrai si Y=Z
concatène([T|R],Y,Z) : vrai si
Z est de la forme[T|S]
S est la concaténation de R et Y
Passer par U : Z=[U|Z], T=U
concatène([],Y,Y).
concatène([T|R],Y,[T|Z]) :concatène(R,Y,Z).
Inversion
inv([],[]).
inv([X|Y],Z) :inv(Y,T),concatène(T,[X],Z).
UFR Maths-Info – IUP 3
• member/2
UFR Maths-Info – IUP 3
• intersection
• suppression
member(X, [X|Y]).
member(X, [Z|Y]) :- member(X, Y).
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
10
Dérivée symbolique
Coupure
• Il insiste !
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
ifthenelse
Négation
not(P) :- P, !, fail.
not(P) :- true.
• Il vaut mieux que les variables soient
instanciées avant d'utiliser une négation
?- not(member(X,[a,b])).
No
• Le programme identifie X à une des
variables, réussit et le not le fait échouer.
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
ET, OU
marié(françois).
étudiant(rené).
étudiantCélibataire(X) :- not(marié(X)),
étudiant(X).
?- étudiantCélibataire(X).
No
?- étudiantCélibataire(rené).
Yes % !!!
étudiantCélibataire(X) :- étudiant(X),
not(marié(X)).
UFR Maths-Info – IUP 3
et(P,Q,1) :- P, Q, !.
et(P,Q,0).
ou(P,Q,1) :- P, !.
ou(P,Q,1) :- Q, !.
ou(P,Q,0).
UFR Maths-Info – IUP 3
11
Problème de Einstein
Exercice
• cez 31
UFR Maths-Info – IUP 3
UFR Maths-Info – IUP 3
12

Documents pareils