Académique Documents
Professionnel Documents
Culture Documents
Programmation en Logique
Intelligence Artificielle Programmation en Logique
Classes de langage
Langages impératifs
séquencement des calculs spécifié
– contrôle total du flot d’exécution
objets du langage diversifiés
– syntaxe riche (lourde :-))
exemples : Pascal, C, C+, C++, Java, …
Langages fonctionnels
tout est fonction
– syntaxe dépouillée
– base mathématique forte : -calcul
contrôle délégué à l’interprète
– utilisation intensive de la récursivité
exemples : Lisp, Scheme, Haskell, …
Intelligence Artificielle Programmation en Logique
PROgrammation en LOGique
tout est logique
– syntaxe simple et dépouillée
– base théorique : calcul des prédicats
encore plus de contrôle donné à la machine
– récursion
– non déterminisme
exemple : Prolog
Intelligence Artificielle Programmation en Logique
Logique
1. Calcul propositionnel
2. Calcul des prédicats
Intelligence Artificielle Programmation en Logique
1. Calcul propositionnel
Données
un ensemble P de variables propositionnelles
P = { p, q, r, … } énoncés élémentaires
un ensemble C de connecteurs
C={,,,,}
Formules
p est une formule si p P
(H) est une formule si H est une formule
(H) (K) est une formule si H et K sont des formules et si
C
H=(p q), K=(r s), H K, H K, …..
Règles de suppression des parenthèses
Calcul propositionnel
Intelligence Artificielle Programmation en Logique
Logique bi-valuée
faux (0)
vrai (1)
Notion d’interprétation
donner une valeur de vérité à une variable
( p) 0 , 1
extension à un opérateur
extension à une formule
Calcul propositionnel
Intelligence Artificielle Programmation en Logique
p p 0 1 0 1
0 1 0 0 0 0 0 1
1 0 1 0 1 1 1 1
0 1 0 1
0 1 1 0 1 0
1 0 1 1 0 1
Calcul propositionnel
Intelligence Artificielle Programmation en Logique
Formules particulières
p ( p) (p p) 0 1
0 1 1 0 0 1
1 0 1 1 1 1
Calcul propositionnel
? ( p q) (p q)
F ( p q ) (p q)
p q ¬p ¬q pq ¬(pq) (¬ p ¬ q) F
0 0 1 1 0 1 1 1
0 1 1 0 0 1 1 1
1 0 0 1 0 1 1 1
1 1 0 0 1 0 0 1
0 1 0 1 0 1
0 0 0 0 0 1 0 1 0
1 0 1 1 1 1 1 0 1
Calcul propositionnel
Intelligence Artificielle Programmation en Logique
Catégories de formules
Formules inconsistantes
formules toujours fausses
la table de vérité ne contient que des 0
exemple : p p
Formules consistantes
formules non toujours fausses
, ( F ) 1
Calcul propositionnel
Intelligence Artificielle Programmation en Logique
Formules particulières
, ( F ) ( H )
F G tauto ( F G ) (G F ) F G tauto F G
F G tauto GF F G tauto GF
F F tauto 1 F F tauto 0
Formes normales
Formes normales
Une formule F est dite sous forme normale disjonctive ssi
F est une disjonction de conjonctions de variables
propositionnelles et de leur négation
Une formule F est dite sous forme normale conjonctive ssi
F est une conjonction de disjonctions de variables
propositionnelles et de leur négation
(p q) v (r s) :
1.((p q) v r) ((p q) v s)
2.( p v r) ( q v r) ((p q) v s)
3.( p v r) ( q v r) ( p v s) ( q v s)
(p -> q) -> p :
1.(~p v q) -> p
2.~(~p v q) v p
3.(~~p ~q) v p
4.( p ~q) v p
5.(p v p) (~q v p)
Calcul propositionnel
Intelligence Artificielle Programmation en Logique
Aspects déductifs
Conséquence logique
Notion de réfutation
démonstration par l’absurde
A G ssi F 1 … Fn G est
inconsistante
Calcul propositionnel
Intelligence Artificielle Programmation en Logique
Système formel
Données
un ensemble V de symboles
un ensemble F de formules (F V*)
un ensemble A d’axiomes (A F)
un ensemble fini de règles de déduction
Une démonstration dans un système formel S est
une suite d’énoncés A1, … An telle que :
pour tout i, Ai est un axiome de S ou une conséquence
des énoncés précédents par application d’une des règles de
déduction
Un théorème de S est le dernier énoncé d’une
démonstration
Calcul propositionnel
Intelligence Artificielle Programmation en Logique
Énoncé déductible
ou Ai J
ou Ai découle d’énoncés précédents par application
d’une règle d’inférence
Calcul propositionnel
Intelligence Artificielle Programmation en Logique
modus ponens
p, p q q
modus tollens
p q, q p
syllogisme
p q, q r p r
Calcul propositionnel
Intelligence Artificielle Programmation en Logique
si A alors A
si A alors A
C’1 C’2
Principe de résolution
0 1 0 1 0 1
0 1 1 0 0 1 0 0 0
1 0 1 1 1 1 1 0 1
Calcul propositionnel
Intelligence Artificielle Programmation en Logique
F= (P Q R) R P (T Q) T
F= ( P Q R) R P ( T Q) T
C6 = P Q donc C7 = Q
C3 = P
C7 = Q donc C8 = T
C4 = T Q
C8 = T donc C9 = Ø
C5 = T
Principe de résolution
UTILISATION
Exemple:
1. "Si Ali n’écrit pas à Fatima, elle ne lui écrit pas non plus"
Par la réfutation:
2. " Fatima écrit à Ali" S={P Q, Q}
alors « Ali écrit à Fatima" est vrai (conclusion)
On veut : S P
prémisses:
On montre alors que S U {P} est
1. "Si Ali n’écrit pas à Fatima, elle ne lui écrit pas non plus" inconsistant. Il faut dériver la
2. "Fatima écrit à Ali" clause vide par la Résolution.
Modéliser
Une modélisation
Syntaxe
des quantificateurs ( et )
Vocabulaire
Les termes
les variables et les constantes sont des termes
f(t1, …, tn) est un terme si
– les ti sont des termes
– f est un symbole de fonction d’arité n
Les atomes
R(t1, …, tn) est un atome si
– les ti sont des termes
– R est un symbole de relation d’arité n
Calcul des prédicats
Intelligence Artificielle Programmation en Logique
Formules
(F)
(F) (G) et (F) (G)
(F) (G) et (F) (G)
x (F) et x (G)
Calcul des prédicats
Intelligence Artificielle Programmation en Logique
Occurrence libre
Aspects sémantiques
Exemple d’interprétation
E = { aicha, hamid, …}
M’ = est la mère de
P’ = est le père de Q’ = est un parent de
R’ = est le grand-père de
Modèle
Preuve et démonstration
Transformation de formule
x F x F x y F y x F
x F x F xy F yx F
x F x H x F H
x F x H x F H
si H ne contient aucune occurrence de x
x F H x F H x H H
x F H x F H x H H
Calcul des prédicats
Intelligence Artificielle Programmation en Logique
Inversion de et de
Skolemisation
Lorsqu’on a
x y f ( x ) y
on remplace y par une fonction g qui à x associe y
g x f ( x ) g ( x )
x y z p( x, y ) q( z, y, x )
p(a, y1 ) ; q( z1 , y2 , a )
Exemple
Forme prenexe
x y (~p(x) v p(y))
On pose : y= f(x)
x (~p(x) v p(y))
Et
~p(x) v p(f(x))
Calcul des prédicats
Intelligence Artificielle Programmation en Logique
Univers de Herbrand
Calcul des prédicats
Intelligence Artificielle Programmation en Logique
Théorème de Herbrand
A quoi ça sert ?
Validation de raisonnement
Résolution du problème
Démarche générale
Modéliser le problème (les prémisses et la conclusion)
Démonstration par l’absurde, on montre que
P1 P2 P3 C est insatisfaisable
– mettre la formule sous forme clausale
– utiliser le théorème de Herbrand
Notations
h(x) : x est heureux
p(x,y) : x est parent de y
vo(x) : x vole (peut voler)
ve(x) : x est vert
r(x) : x est rose
Calcul des prédicats
Intelligence Artificielle Programmation en Logique
Forme clausale
f , x, p( x, f ( x )) h( x ) vo( f ( x )) h( x )
x, ve( x ) vo( x )
x, y, p( y, x) ve( y) ve( x) p( y, x) r ( y) ve( x)
x, ve( x ) h( x )
p( x1 , f ( x1 )) h( x1 ) vo( f ( x2 )) h( x2 )
ve( x3 ) vo( x3 ) p( y1 , x4 ) ve( y1 ) ve( x4 )
p( y2 , x5 ) r ( y2 ) ve( x5 ) ve(a ) h (a )
Calcul des prédicats
Intelligence Artificielle Programmation en Logique
Validation du raisonnement
Univers de Herbrand
H0 = {a} H1= {a, f(a)} H = {a, …, fn(a)}
Mise en œuvre
p( x1 , f ( x1 )) h( x1 ) vo( f ( x2 )) h( x2 )
ve( x3 ) vo( x3 ) p( y1 , x4 ) ve( y1 ) ve( x4 )
p( y2 , x5 ) r ( y2 ) ve( x5 ) ve(a ) h (a )
Résolution
h (a ) h (a ) vo( f ( a )) ve( f (a ))
h (a ) vo( f ( a ))
ve(a )
Programmer en logique ?
Un petit exemple
xyz (pere(x,y)parent(y,z) grand-pere(x,z)
xy ((mere(x,y) pere(x,y)) parent(x,y)
mere(a,b) pere(c,b) pere(d,a) pere(e,c)
Forme clausale
pere(x1, y1) parent(y1, z1) grand-pere(x1,z1)
mere(x2, y2) parent(x2, y2)
pere(x3, y3) parent(x3, y3)
mere(a,b) pere(c,b) pere(d,a) pere(e,c)
On veut prouver x, grand-pere(x,b)
négation sous forme clausale : grand-pere(x,b)
Calcul des prédicats
Intelligence Artificielle Programmation en Logique
Programmer en logique ?
pere(x1, y1) parent(y1, z1) grand-pere(x1,z1)
mere(x2, y2) parent(x2, y2)
pere(x3, y3) parent(x3, y3)
mere(a,b) pere(c,b) pere(d,a) pere(e,c)
On part de grand-pere(x,b)
si x = x1 et z1=b unification avec
pere(x1, y1) parent(y1, z1) grand-
pere(x1,z1)
on obtient pere(x, y1) parent(y1, b)
si y3 = b et y1=x3 unification avec
pere(x3, y3) parent(x3, y3)
on obtient pere(x, x3) pere(x3, b)
si x3 = c unification avec pere(c,b)
on obtient pere(x, c)
si x=e unification avec pere(e,c)
on obtient QED
Calcul des prédicats
Intelligence Artificielle Programmation en Logique
Programmer en logique ?
On a réussi à calculer un x
Unification = calcul
on donne des valeurs aux variables
Calcul = programmation
on va pouvoir programmer avec la logique !!!
on automatise complètement le processus
PROLOG est un démonstrateur de théorème
Intelligence Artificielle Programmation en Logique
Le langage PROLOG
1. Premiers pas
2. Arithmétique
3. Listes
4. Le contrôle PROLOG
5. Termes structurés
6. Méta-interprétation de PROLOG
Le langage
Intelligence Artificielle Programmation en Logique
Elles permettent
de forcer le retour dans la base pour continuer la
démonstration
de limiter le choix par clause
Le langage
Intelligence Artificielle Programmation en Logique
Univers PROLOG
Syntaxe de PROLOG
Considérons l’énoncé
Socrate est un homme
Tout homme est mortel
Socrate est-il mortel ?
?- mortel(socrate).
Le langage
Intelligence Artificielle Programmation en Logique
La famille
masculin(tom). % tom est de sexe masculin
masculin(tim).
masculin(bob).
masculin(jim). % «paquet» de clauses
feminin(pam).
feminin(liz).
feminin(ann).
feminin(pat).
enfant(bob,pam).
enfant(bob,tom).
enfant(liz,tom).
enfant(ann,bob).
enfant(pat,bob).
enfant(tim,liz).
enfant(jim,pat).
Intelligence Artificielle Programmation en Logique Le langage
feminin(pam).
feminin(liz).
feminin(ann).
feminin(pat).
enfant(bob,pam).
Yes
?- enfant(X,tom).
X = bob ;
X = liz ;
No
Intelligence Artificielle Programmation en Logique
Unification
Faire correspondre requête et tête de règle
Intelligence Artificielle Programmation en Logique Le langage
feminin(pam).
feminin(liz).
feminin(ann).
feminin(pat).
X=pam enfant(bob,pam).
retour échec
X=tom
• Plus généralement
pere(X,Y) :-
enfant(Y,X),
masculin(X).
• Écrire le prédicat mere/2
Le langage
Intelligence Artificielle Programmation en Logique
PROLOG
Intérêts
facilité de compréhension
facilité d’écriture
Le langage
Intelligence Artificielle Programmation en Logique
feminin(pam).
feminin(liz).
feminin(ann).
feminin(pat).
retour
Considérons la requête Z=pam enfant(bob,pam).
Z = tom enfant(bob,tom).
enfant(liz,tom).
enfant(ann,bob).
?- frere(bob,liz). échec enfant(pat,bob).
enfant(tim,liz).
enfant(jim,pat).
Quelques propriétés
Récursivité
ascendant(X,Z) :-
Information discriminante
enfant(Z,Y), en premier
ascendant(X,Y).
Le langage
Intelligence Artificielle Programmation en Logique
PROLOG = logique ?
2. Arithmétique
Les opérateurs usuels existent : +, , /, mod
attention il s’agit de symboles de fonctions !!!
?- X = 1 + 2.
X= 1+2 +(1,2)
• Un opérateur spécial is
?- X is 1 + 2.
X=3
• L’argument de droite doit être complètement
instancié à l’appel
?- X is 1 + Y.
{INSTANTIATION ERROR}
Le langage
Intelligence Artificielle Programmation en Logique
Opérateurs arithmétiques
> et <
>= et =<
=:= égalité numérique
=\= inégalité numérique
Propriétés du PGCD D de X et Y
si X et Y sont égaux, D vaut X
si X < Y alors D est le PGCD de X et de Y - X
si Y < X alors échanger le rôle de X et Y
pgcd(X, X
Y,X X=Y
D)).:- X =:= Y , D is X.
pgcd(X, Y , D) :-
X<Y,
pgcd(X,Y-X,D).
Y1 is Y - X,
pgcd(X,Y1,D).
pgcd(X, Y, D) :-
X > Y,
pgcd(Y,X,D).
Le langage
Intelligence Artificielle Programmation en Logique
Attention …
3. Listes
La liste vide : []
Les listes non vides :
[a, b, c]
[a, [b, c], d]
Le constructeur de listes : |
[Tete | Reste]
[a] [a | [] ]
[a, b] [a | [b |[]]] [a | [b] ]
Analogie avec Haskell
|=:
représentation arborescente
Le langage
Intelligence Artificielle Programmation en Logique
Prédicats de base
member(X, [X|Ys]).
_ Ys ne sert à rien
member(X, [Y_ |Xs]) :- Y ne sert à rien
member(X,Xs).
length([], 0).
length([_ | Xs], N1) :-
length(Xs, N),
N1 is N + 1.
Le langage
Intelligence Artificielle Programmation en Logique
member(X,L) :-
append(_, [X|_], L).
Le langage
Intelligence Artificielle Programmation en Logique
insere(X,Ys,[X|Ys]).
insere(X,[Y|Ys], [Y|Zs]) :-
insere(X,Ys,Zs).
permute([], []).
permute([X|Xs], Ys) :-
permute(Xs,Zs),
insere(X,Zs,Ys).
Le langage
Intelligence Artificielle Programmation en Logique
4. Le contrôle PROLOG
Contrôle du backtrack
Soit une fonction f dont une définition Prolog peut être :
f(X, 0) :- X < 3.
f(X, 2) :- 3 =< X, X < 6.
f(X, 4) :- 6 =< X.
Démonstration de f(1,Y)
Première règle : Y = 0
Démonstration de 2 < Y :- échec
La coupure : !
f(X, 0) :- X < 3, !.
f(X, 2) :- 3 =< X, X < 6, !.
f(X, 4) :- 6 =< X.
?- f(7,Y).
Le langage
Intelligence Artificielle Programmation en Logique
Si … alors … sinon
f(X, 0) :- X < 3, !.
f(X, 2) :- X < 6, !.
f(X, 4).
?- f(1,2).
Le langage
Intelligence Artificielle Programmation en Logique
Un usage délicat
Application : négation
r(a).
q(b).
p(X) :- not( r(X) ).
?- q(X), p(X).
?- p(X), q(X).
Le langage
Intelligence Artificielle Programmation en Logique
not(X)
ne veut pas dire
– X est toujours faux
veut simplement dire
– Je n’ai pas assez d’information pour prouver X
Typage en Prolog
var/1, nonvar/1
compound/1
ground/1
Le langage
Intelligence Artificielle Programmation en Logique
5. Termes structurés
Notion de foncteur
famille(
indiv(tom, fox, date(7, mai, 1950), travail(emn, 7850)),
indiv(ann, fox, date(9, mai, 1951), sans-emploi),
[ indiv(pat, fox, date(5, mai, 1973), sans-emploi),
indiv(jim, fox, date(5, mai, 1973), sans-emploi) ])
Utilisation de l’unification
famille(
indiv(tom, fox, date(7, mai, 1950), travail(emn, 7850)),
indiv(ann, fox, date(9, mai, 1951), sans-emploi),
[ indiv(pat, fox, date(5, mai, 1973), sans-emploi),
indiv(jim, fox, date(5, mai, 1973), sans-emploi) ])
famille(_,_,[_,_,_]).
Outils de manipulation
Opérateurs
Fonctionnement
Un opérateur possède une précédence (1..1200)
par exemple : + a une plus forte précédence que / car
6. Méta-interprétation
Méta-programmation
Méta-interprétation
prouve(But) :- But.
Le langage
Intelligence Artificielle Programmation en Logique
append([],X,X).
append([X|Xs], Ys, [X|Zs]) :-
append(Xs,Ys,Zs).
?- clause(append(X,Y,Z), Corps).
no
Le langage
Intelligence Artificielle Programmation en Logique
Un premier interprète
prouve( true ).
prouve( (A,B) ) :-
prouve(A),
prouve(B).
prouve( But ) :-
clause(But, Corps),
prouve(Corps).
Le langage
Intelligence Artificielle Programmation en Logique
Améliorations
Gestion des prédicats prédéfinis
prouve( But ) :-
predefini( But ), predefini( _ = _ ).
But. predefini( _ is _ ).
prouve( But ) :-
But =.. [Foncteur|Arguments],
Tete =.. [Foncteur|AutresArguments],
clause(Tete, Corps),
unification(But, Tete),
prouve(Corps).
Le langage
Intelligence Artificielle Programmation en Logique
Algorithme d’unification
unification( X, Y) :-
var(X), !, Y = X. % nooccur(X,Y)
unification( X, Y) :-
var(Y), !, X = Y. % nooccur(Y,X)
unification( X, Y) :-
atomic(X), atomic(Y), X == Y.
unification( X, Y) :-
X =.. [Foncteur|Arguments],
Y =.. [Foncteur|AutresArguments],
unificationListe(Arguments, AutresArguments).
unificationListe([], []).
unificationListe([X|Xs], [Y|Ys]) :-
unification(X,Y),
unficationListe(Xs,Ys).
Le langage
Intelligence Artificielle Programmation en Logique
Le test d’occurrence
nooccur/2
noccur( _, Y) :-
ground(Y).
noccur( X, Y) :-
var(Y), X \== Y.
noccur( X, Y) :-
Y =.. [_|Arguments],
nooccurListe(X, Arguments).
nooccurListe(_, []).
nooccurListe(X, [Y|Ys]) :-
nooccur(X,Y),
nooccurListe(X,Ys).
Intelligence Artificielle Programmation en Logique
PROLOG avancé
1. Structures incomplètes
2. Listes de solutions
3. Modifications de la base
4. Indexation de clauses
Prolog avancé
Intelligence Artificielle Programmation en Logique
1. Structures incomplètes
Concaténation
append([], Ys, Ys).
append([X|Xs], Ys, [X|Zs]) :-
append(Xs,Ys,Zs).
Notoirement inefficace !
Le problème
– pas de « pointeur » sur le dernier élément
– pas de possibilité de modification d’une variable logique
uniquement instanciation d’une inconnue
Prolog avancé
Intelligence Artificielle Programmation en Logique
Ls - Rs abc123??? - ???
Merci l’unification !
Prolog avancé
Intelligence Artificielle Programmation en Logique
2. Listes de solutions
pere(tarzan, fils).
pere(tarzan, fille).
age(fils, 5).
age(fille, 2).
age(tarzan, 25).
3. Modifications de la base
4. Indexation de clause