Vous êtes sur la page 1sur 127

Programmation en Logique

FI 3 - 2002

Cours Narendra Jussien


TP
Romuald Debruyne / Narendra Jussien

Programmation Logique

2002

Organisation du module

Enseignement

Cours/TD
50%
TP sur machine
50%
Langage support PROLOG

valuations

Micro-valuation (TD not)


Contrle continu (envoi du code chaque fin de TP)
TP not en fin de module

Programmation Logique

NJ - 2002 - 2/127

Introduction

Programmation Logique

2002

Classes de langage

Langages impratifs

squencement des calculs spcifi

contrle
total du flot dexcution
Langages
fonctionnels

objets du langage diversifis


tout est fonction

contrle dlgu linterprte

syntaxe riche (lourde :-))


syntaxe dpouille
exemples : Pascal, C, C+, C++, Java,
base mathmatique forte : -calcul
utilisation intensive de la rcursivit

exemples : Lisp, Scheme, Haskell,

Programmation Logique

NJ - 2002 - 4/127

Une nouvelle classe

PROgrammation en LOGique

tout est logique


syntaxe simple et dpouille
base thorique : calcul des prdicats

encore plus de contrle donn la machine


rcursion
non dterminisme

exemple : Prolog

Programmation Logique

NJ - 2002 - 5/127

Historique

1930
1965
1970

1972

1977

1980

Calcul des prdicats (J. Herbrand)


Principe de rsolution (J. A. Robinson)
Utiliser la logique comme langage de
programmation
clauses de Horn
R. Kowalski
Q-systmes
A. Colmerauer
Premier interprte PROLOG (A. Colmerauer et P. Roussel)
Universit dAix-Marseille
Premier compilateur PROLOG (D. H. D. Warren)
Universit ddimbourg
Projet japonais de 5e gnration

1990

PROLOG volue vers la Programmation par Contraintes

Programmation Logique

NJ - 2002 - 6/127

Plan du cours

Bases thoriques (rappels de logique formelle)

Calcul propositionnel
Calcul des prdicats

Le langage PROLOG

PROLOG avanc

Programmation Logique

NJ - 2002 - 7/127

En TP, vous apprendrez ...

Utiliser PROLOG (premires sances)

Raliser un systme expert complet

Rsoudre automatiquement des nigmes


logiques exprimes en langage naturel

Programmation Logique

NJ - 2002 - 8/127

Rappels de Logique

1. Calcul propositionnel
2. Calcul des prdicats

Programmation Logique

2002

1. Calcul propositionnel

Comment crire les formules ?

Comment dterminer la valeur de vrit dune


formule ?

Aspects syntaxiques

Aspects smantiques

Comment dmontrer de nouveaux rsultats ?

Aspects dductifs

Programmation Logique

NJ - 2002 - 10/127

Calcul propositionnel

Syntaxe dune formule

Donnes

Formules

un ensemble P de variables propositionnelles


P = { p, q, r, }
noncs lmentaires
un ensemble C de connecteurs
C={,,,,}
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

Rgles de suppression des parenthses

Programmation Logique

NJ - 2002 - 11/127

Calcul propositionnel

Smantique dune formule

Logique bi-value

faux (0)
vrai (1)

Notion dinterprtation

donner une valeur de vrit une variable

( p) 0 , 1

extension un oprateur
extension une formule

Programmation Logique

NJ - 2002 - 12/127

Calcul propositionnel

Tables de vrit : oprateurs


p p
0 1
1 0

0 1
0 0 0
1 0 1

0 1
0 1 1
1 0 1

Programmation Logique

0 1
0 0 1
1 1 1

0 1
0 1 0
1 0 1

NJ - 2002 - 13/127

Calcul propositionnel

Formules particulires

Tautologies : formules toujours vraies

La table de vrit ne contient que des 1


exemple : p p

p ( p) (p p)
0
1
1
1 0
1

Programmation Logique

0 1
0 0 1
1 1 1

NJ - 2002 - 14/127

Calcul propositionnel

? ( p q) (p q)

p q p
0
0
1
1

0
1
0
1

1
1
0
0

pq

(pq)

( p q)

1
0
1
0

0
0
0
1

1
1
1
0

1
1
1
0

1
1
1
1

0 1
0 0 0
1 0 1

Programmation Logique

0 1
0 0 1
1 1 1

0 1
0 1 0
1 0 1

NJ - 2002 - 15/127

Calcul propositionnel

Catgories de formules

Tautologies : formules toujours vraies

Formules inconsistantes

formules toujours fausses


la table de vrit ne contient que des 0
exemple : p p

Formules consistantes

formules non toujours fausses

, ( F ) 1
Programmation Logique

NJ - 2002 - 16/127

Calcul propositionnel

Formules particulires

Formules tautologiquement quivalentes

les tables de vrit sont les mmes

, ( F ) ( H )

Condition ncessaire et suffisante :


(F) (H) est une tautologie

Programmation Logique

(F) (H)

NJ - 2002 - 17/127

Calcul propositionnel

Quelques quivalences utiles


F G
F G

tauto

F F
F

tauto

( F G ) (G F )
GF

tauto 1
tauto

Proprits de et

F G

tauto

F G

F G

tauto

GF

F F

tauto

( F G ) tauto

F G

( F G ) tauto

F G

lois de De Morgan

associativit
distributivit (dans les 2 sens)
lments neutres (0 pour et 1 pour )
lments absorbants (1 pour et 0 pour )

Programmation Logique

NJ - 2002 - 18/127

Calcul propositionnel

Formes normales

But avoir une reprsentation uniforme des


formules du calcul propositionnel

limiter le nombre de connecteurs diffrents utiliss


limiter lallure des formules rencontres

Programmation Logique

NJ - 2002 - 19/127

Calcul propositionnel

Formes normales

Une formule F est dite sous forme normale disjonctive ssi


F est une disjonction de conjonctions de variables
propositionnelles et de leur ngation
Toute formule du calcul propositionnel est tautologiquement
quivalente une formule sous forme normale disjonctive

Une formule F est dite sous forme normale conjonctive ssi


F est une conjonction de disjonctions de variables
propositionnelles et de leur ngation
Toute formule du calcul propositionnel est tautologiquement
quivalente une formule sous forme normale conjonctive

Programmation Logique

NJ - 2002 - 20/127

Calcul propositionnel

Aspects dductifs

notion de consquence logique


notion de dmonstration
notion de rgles de dduction

Programmation Logique

2002

Calcul propositionnel

Consquence logique

Soit A = {F1, , Fn} un ensemble de n formules


A

G ssi

(F1 Fn) G

Notion de rfutation

dmonstration par labsurde

Programmation Logique

G ssi

F 1 Fn G

est inconsistante

NJ - 2002 - 22/127

Calcul propositionnel

Systme formel

Donnes

ensemble
ensemble
ensemble
ensemble

V de symboles
F de formules (F V*)
A daxiomes (A F)
fini de rgles de dduction

Une dmonstration dans un systme formel S est


une suite dnoncs A1, An telle que :

un
un
un
un

pour tout i, Ai est un axiome de S ou une consquence


des noncs prcdents par application dune des rgles
de dduction

Un thorme de S est le dernier nonc dune


dmonstration

Programmation Logique

NJ - 2002 - 23/127

Calcul propositionnel

nonc dductible

Soit J un ensemble de formules


Un nonc A est dit dductible sous les
hypothses J (not J A) ssi

il existe une suite finie A1, , An dnoncs telle que


An = A
pour tout i
Ai est un axiome

ou Ai

ou Ai dcoule dnoncs prcdents par application


dune rgle dinfrence

Programmation Logique

NJ - 2002 - 24/127

Calcul propositionnel

Quelques rgles de dduction


classiques

modus ponens

modus tollens

p, p q

p q, q

syllogisme

p q, q r

Programmation Logique

p r

NJ - 2002 - 25/127

Calcul propositionnel

Proprits dun systme formel

Un systme formel est correct ssi


si

A alors

tout ce qui est dmontrable est vrai

Un systme formel est complet ssi


si

A alors

tout ce qui est vrai est dmontrable

Programmation Logique

NJ - 2002 - 26/127

Calcul propositionnel

Une autre rgle dinfrence

Principe de rsolution (Robinson)

Dfinitions
littral positif ou ngatif
une clause est une disjonction de littraux
la rsolvante de C1 = l C1 et de C2 = l C2 est

C1 C2

Principe de rsolution
l C1 , l C2

rso

C1 C2

le principe de rsolution est valide


le principe de rsolution gnralise les autres rgles

Programmation Logique

NJ - 2002 - 27/127

Calcul propositionnel

Validit du principe de rsolution

Il faut montrer que :


l C1 , l C2
ie

C1 C2

(l C1) ( l C2 ) (C1 C2 )

Il suffit de montrer que


si (l C1) ( l C2 ) vrai alors (C1 C2 ) nest pas faux

Deux cas se prsentent

l est vrai
ncessairement C2 vrai et donc (C1 C2 ) aussi

l est vrai
ncessairement C1 vrai et donc (C1 C2 ) aussi

0 1
0 1 1
1 0 1
Programmation Logique

0 1
0 0 1
1 1 1

0 1
0 0 0
1 0 1
NJ - 2002 - 28/127

Calcul propositionnel

Proprits du calcul propositionnel

Le calcul propositionnel muni du principe de


rsolution est correct et complet

Un ensemble S de clauses est insatisfaisable ssi


S

reso

Dmonstration : par labsurde (rfutation)


S

ssi S {C}

Rappel
Programmation Logique

reso

On peut toujours se ramener une forme


normale conjonctive (forme clausale)
NJ - 2002 - 29/127

Calcul propositionnel

Ce quil faut retenir

Intrt dune forme normale

Consquence logique vs dmonstration

Principe de rsolution

Preuve par rfutation

Programmation Logique

NJ - 2002 - 30/127

2. Calcul des prdicats

Comment crire les formules ?

Comment dterminer la valeur de vrit dune


formule ?

Aspects syntaxiques

Aspects smantiques

Comment dmontrer de nouveaux rsultats ?

Aspects dductifs

Programmation Logique

NJ - 2002 - 31/127

Calcul des prdicats

Limites du calcul propositionnel

Modliser

Les chandelles sont faites pour clairer


Quelques chandelles clairent trs mal
Quelques objets qui sont faits pour clairer le font trs
mal

Programmation Logique

NJ - 2002 - 32/127

Calcul des prdicats

Une modlisation

Les chandelles sont faites pour clairer

x, chandelle( x ) claire ( x )

Quelques chandelles clairent trs mal

x, chandelle( x ) claireMal ( x )

Quelques objets qui sont faits pour clairer le font trs


mal

x, claire ( x ) claireMal ( x )

Programmation Logique

NJ - 2002 - 33/127

Calcul des prdicats

Syntaxe

des connecteurs (, , , et )

des quantificateurs ( et )

des variables (x,y, )

des relations (prdicats) (R, S, claire, )

des symboles de fonctions (f, g, )

les fonctions darit 0 sont appeles des constantes

Programmation Logique

NJ - 2002 - 34/127

Calcul des prdicats

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 darit n

Les atomes

R(t1, , tn) est un atome si


les ti sont des termes
R est un symbole de relation darit n

Programmation Logique

NJ - 2002 - 35/127

Calcul des prdicats

Formules

Un atome est une formule


Si F et G sont des formules et x une variable,
alors les expressions suivantes sont des formules

(F)
(F) (G) et (F) (G)
(F) (G) et (F) (G)
x (F) et x (G)

Programmation Logique

NJ - 2002 - 36/127

Calcul des prdicats

Occurrence dune variable

Une occurrence dune variable x dans une


formule F est un endroit o x apparat dans F
sans tre immdiatement prcde par ou

Une occurrence libre de x dans F est dfinie :

Programmation Logique

NJ - 2002 - 37/127

Calcul des prdicats

Occurrence libre

Si F est un atome, toutes les occurrences de x sont libres

Si F = (G), les occurrences libres de x sont celles de G

Si F = (G) (H), les occurrences libres de x sont celles de


G et celles de H

Si F = y(G) ou F = y(H) avec x distinct de y, les


occurrences libres de x sont celles de G et celles de H

Si F = x(G) ou F = x(H), aucune occurrence de x dans


F n est libre

Programmation Logique

NJ - 2002 - 38/127

Calcul des prdicats

Caractristiques des variables

Une variable est dite libre dans une formule F si


elle a au moins une occurrence libre (sinon on
dit quelle est lie)

Une formule nayant pas de variable libre est


dite close

Programmation Logique

NJ - 2002 - 39/127

Calcul des prdicats

Aspects smantiques

Formules universellement valides


Le thorme de Herbrand
Principe de rsolution adapt au calcul des prdicats

Programmation Logique

2002

Calcul des prdicats

Vers la notion de modle

Soit L le langage du calcul des prdicats

une interprtation de L cest la donne de :


un ensemble E non vide appel ensemble de base
pour chaque symbole de prdicat R darit n, dun sousensemble R de En
pour chaque symbole de fonction f darit n, dune
application f de En vers E (y compris pour les constantes)

on peut alors calculer la valeur de tout terme clos


(cest un lment de E)
on peut donc associer une valeur de vrit tout
atome et donc par extension toute formule close

Programmation Logique

NJ - 2002 - 41/127

Calcul des prdicats

Exemple dinterprtation

xyz (P(x,y) Q(y,z) R(x,z))


xy ( (M(x,y) P(x,y) Q(x,y))
M(a,b) P(c,b) P(d,a) P(e,c)

E = { anne, bernard, }

M = est la mre de
Q = est un parent de
R = est le grand-pre de

P = est le pre de

a = anne b = bernard c = charles

Programmation Logique

d = didier e= ric

NJ - 2002 - 42/127

Calcul des prdicats

Modle

Soit M une interprtation de L

soit F une formule close. M est un modle de F ssi la


valeur de vrit de F dans M est 1
M F
soit F(x1, , xk) une formule quelconque
F est dite universellement valide ssi
x1xk F(x1, , xk)
est satisfaite dans toutes les interprtations de L
F est dite insatisfaisable ssi il existe une interprtation
pour laquelle
x1xk F(x1, , xk)
est satisfaite

Programmation Logique

NJ - 2002 - 43/127

Calcul des prdicats

Preuve et dmonstration

Comment prouver une formule du calcul des


prdicats ?

Prouver quelle est vraie


passer en revue toutes les interprtations !

Prouver quelle est fausse


trouver une interprtation qui invalide la formule

Programmation Logique

NJ - 2002 - 44/127

Calcul des prdicats

Toutes les interprtations ?

Une reprsentation utile des formules

Un thorme qui simplifie la vie

forme clausale

thorme de Herbrand

Principe de rsolution pour le calcul des prdicats

vers une automatisation des dmonstrations

Programmation Logique

NJ - 2002 - 45/127

Calcul des prdicats

Transformation de formule

Forme normale prnexe

quantificateurs en tte de la formule


formule sous forme normale conjonctive

Forme standard de Skolem

formule sous forme normale prnexe


quantificateurs existentiels prcdant quantificateurs
universels
Tout formule du calcul des prdicats est quivalente
une formule sous forme standard de Skolem

Programmation Logique

NJ - 2002 - 46/127

Calcul des prdicats

Mise sous forme prnexe

liminer les connecteurs et

Transporter les devant les atomes

en utilisant ( F F) et les lois de De Morgan

Transporter les quantificateurs en tte de la


formule

Ne pas hsiter renommer les variables

Programmation Logique

NJ - 2002 - 47/127

Calcul des prdicats

Transport des quantificateurs


x F x F
x F

x F

xy F yx 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
Programmation Logique

x F H
x F H

x H H
x H H

NJ - 2002 - 48/127

Calcul des prdicats

Inversion de et de
Skolemisation

Lorsquon a

xy f ( x ) y

on remplace y par une fonction g qui x associe y

g x f ( x ) g ( x )
Skolemisation = expliciter limplicite

Programmation Logique

NJ - 2002 - 49/127

Calcul des prdicats

Une reprsentation utile des formules


Forme clausale

On part de la forme standard de Skolem

On utilise les clauses avec :

les variables quantifies universellement conserves


les fonctions de Skolem conserves
les variables quantifies existentiellement remplaces
par des constantes
les variables renommes dune clause lautre

x y z

p ( x , y ) q ( z , y , x )

p(a, y1 )
Programmation Logique

; q( z1 , y2 , a )
NJ - 2002 - 50/127

Calcul des prdicats

Univers de Herbrand

Soit S un ensemble de clauses

Soit H0 lensemble des symboles de constantes ayant


au moins une occurrence dans S. On pose :

H i H i 1 f n (t1 , , tn )

pour fn fonction darit n de S et tj lments de Hi-1

H = limi Hi est appel univers de Herbrand

On appelle instance de base dune clause C toute


clause obtenue en remplaant les variables de C par
des lments de H

Programmation Logique

NJ - 2002 - 51/127

Calcul des prdicats

Thorme de Herbrand

Thorme Un ensemble S de clauses est


insatisfaisable si et seulement si il existe un
ensemble S dinstances de base insatisfaisable

Corollaire Un ensemble de clauses est


satisfaisable si et seulement si tout ensemble
fini dinstances de base est satisfaisable

Programmation Logique

NJ - 2002 - 52/127

Calcul des prdicats

A quoi a sert ?
Validation de raisonnement

On cherche valider le raisonnement suivant

Un dragon est heureux si tous ses enfants peuvent voler


Les dragons verts peuvent voler
Un dragon est vert sil a au moins un parent vert ou rose
Donc les dragons verts sont heureux

Programmation Logique

NJ - 2002 - 53/127

Calcul des prdicats

Rsolution du problme

Dmarche gnrale

Modliser le problme (les prmisses et la conclusion)


Dmonstration par labsurde, on montre que
P1 P2 P3 C est insatisfaisable
mettre la formule sous forme clausale
utiliser le thorme 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

Programmation Logique

NJ - 2002 - 54/127

Calcul des prdicats

Rsolution du problme (suite)


P1 un dragon est heureux si tous ses enfants peuvent voler
x (y, p(x,y)vo(y)) h(x) x
)y)vo
y)(
)x
)
,,y
(pxyxp,(),xy(
y,x))y,h

vo
vo
, xx,y
p,y(,ypxp,(,
)vo
((y(y
(hhy(h(x)(x)x))h( x )
f , x, p( x, f ( x )) h( x ) vo( f ( x )) h( x )
P2 les dragons verts peuvent voler

x, ve( x ) vo( x )

x, ve( x ) vo( x )

P3 un dragon est vert sil a au moins un parent vert ou rose


x, y , p ( y , x ) ve( y ) r ( y ) ve( x )
,y
ysont
p,
(xyy),
,yxB
)ve

p
y
y
x)( x)

)rve
x,xp ,(A

p
,)(pve
y(,
yB
y )
(
r,(prxy())y,) x
()x(r )x(
)y )ve
, xA
, y,

(x,ve
y)x))(y
ve
( x()
(ve
(ve
les x
C les dragons verts sont heureux

x, ve( x ) h( x )
ngation

Programmation Logique

ve(ve(xx())x
ve
xx,,x,
)
hh((xx))

NJ - 2002 - 55/127

Calcul des prdicats

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 )

Programmation Logique

ve(a )

h (a )

NJ - 2002 - 56/127

Calcul des prdicats

Validation du raisonnement

Univers de Herbrand

H0 = {a}

H1= {a, f(a)}

H = {a, , fn(a)}

Trouver un ensemble dinstances de base insatisfaisable


intuition 1 : partir de la conclusion et essayer darriver
une contradiction par dduction
intuition 2 : utiliser le principe de rsolution

Programmation Logique

NJ - 2002 - 57/127

Calcul des prdicats

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 )
h (a )

h( a ) vo( f ( a ))
x2 a

h (a )

ve(a )

vo( f (a )) ve( f (a ))

x3 f ( a )

x1 a

x4 f ( a )

clause vide
p( y1 , f (xa ))
ve(xy1) f(ave
( f ( a ))

a
) h (a )
y1 x1

vo
(( af())
(fve
)) ve

a( a) ))

veh((fa()a ))
h(a ) p( a, f (a )) vo(pf((aa, ))f (a
h (a )
Programmation Logique

ve(a )
NJ - 2002 - 58/127

Calcul des prdicats

Rsolution

On a un ensemble dinstances de base insatisfaisable

h (a )

h (a )

vo( f ( a )) ve( f (a ))

h(a ) vo( f ( a ))

p( a, f ( a )) ve( a ) ve( f ( a ))

h(a ) p( a, f (a ))

ve(a )

La formule P1 P2 P3 C est donc insatisfaisable


Le raisonnement est donc valide

Programmation Logique

NJ - 2002 - 59/127

Calcul des prdicats

Analysons un peu les choses

Lopration dappariement de deux atomes


sappelle lunification
p( y1 , f ( a )) ve( y1 ) ve( f ( a ))
p( x1 , f ( x1 )) h( x1 )
unificateur

y1 x1

x1 a

Algorithme dunification (vu plus tard)


On peut donc appliquer le principe de
rsolution sans problme

Programmation Logique

NJ - 2002 - 60/127

Calcul des prdicats

Proprits du calcul des prdicats

Le calcul des prdicats muni du principe de


rsolution et de lunification est complet

MAIS le calcul des prdicats est indcidable

toute formule close est vraie ou fausse

Il nexiste pas dalgorithme permettant de dcider


tout coup si une formule close est vraie ou fausse

En PROLOG, nous nous limiterons donc un


sous-ensemble du calcul des prdicats

non restrictif en pratique

Programmation Logique

NJ - 2002 - 61/127

Calcul des prdicats

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)

ngation sous forme clausale : grand-pere(x,b)

Programmation Logique

NJ - 2002 - 62/127

Calcul des prdicats

Programmer en logique ?

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

Programmation Logique

NJ - 2002 - 63/127

Calcul des prdicats

Programmer en logique ?

On a russi prouver x, grand-pere(x,b)

On a russi calculer un x

Unification = calcul

on donne des valeurs aux variables

Calcul = programmation

on va pouvoir programmer avec la logique !!!


on automatise compltement le processus
PROLOG est un dmonstrateur de thorme

Programmation Logique

NJ - 2002 - 64/127

Le langage PROLOG

1.
2.
3.
4.
5.
6.

Premiers pas
Arithmtique
Listes
Le contrle PROLOG
Termes structurs
Mta-interprtation de PROLOG

Programmation Logique

2002

Le langage

1. Premiers pas en Prolog

On se limite aux clauses de Horn

au plus un littral positif


un seul littral (positif) : fait
un littral positif et au moins un littral ngatif : rgle
pas de littral positif : requte

Elles permettent

de forcer le retour dans la base pour continuer la


dmonstration
de limiter le choix par clause

Programmation Logique

NJ - 2002 - 66/127

Le langage

Univers PROLOG

Lunivers PROLOG est une base de connaissances


dcrivant ltat du monde laide de relations (prdicats)
portant sur des entits (termes)

Un prdicat particulier (=) correspond lunification

Programmation Logique

NJ - 2002 - 67/127

Le langage

Syntaxe de PROLOG

Considrons lnonc

Socrate est un homme


Tout homme est mortel
Socrate est-il mortel ?

Calcul des prdicats


x, homme(x)
x, homme(x) mortel(x)

Prolog
homme(socrate).
mortel(X) :- homme(X).
?- mortel(socrate).

Programmation Logique

NJ - 2002 - 68/127

Le langage

La famille
masculin(tom).
masculin(tim).
masculin(bob).
masculin(jim).

% tom est de sexe masculin


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

Programmation Logique

NJ - 2002 - 69/127

Le langage
masculin(tom).
masculin(tim).
masculin(bob).
masculin(jim).

Premires requtes

feminin(pam).
feminin(liz).
feminin(ann).
feminin(pat).

Est-ce que pat est un enfant de bob ?


?- enfant(pat,bob).
Yes

enfant(bob,pam).
enfant(bob,tom).
enfant(liz,tom).
enfant(ann,bob).
enfant(pat,bob).
enfant(tim,liz).
enfant(jim,pat).

Quels sont les enfants de tom ?


?- enfant(X,tom).
X = bob
X = liz

;
;

No
Programmation Logique

NJ - 2002 - 70/127

Lien avec le calcul des prdicats


Rgles PROLOG
a :- b,c,d.

Rgles LOGIQUE
abcd

Requte PROLOG
?- q.

Requte LOGIQUE
q

Unification
Faire correspondre requte et tte de rgle

Programmation Logique

NJ - 2002 - 71/127

Le langage
masculin(tom).
masculin(tim).
masculin(bob).
masculin(jim).

criture de prdicats

feminin(pam).
feminin(liz).
feminin(ann).
feminin(pat).

Qui est le pre de bob ?


?- enfant(bob,X), masculin(X).
retour

X=pam
X=tom

enfant(bob,pam).
enfant(bob,tom).
enfant(liz,tom).
enfant(ann,bob).
enfant(pat,bob).
enfant(tim,liz).
enfant(jim,pat).

chec

X=tom
Plus gnralement
pere(X,Y) :enfant(Y,X),
masculin(X).
crire le prdicat mere/2
Programmation Logique

NJ - 2002 - 72/127

Le langage

chacun son tour

crire les prdicats correspondant aux relations

grand-pere/2
frere/2
tante/2
cousin/2

Programmation Logique

NJ - 2002 - 73/127

Le langage

PROLOG

PROLOG est un langage dclaratif


on spcifie les proprits du rsultat du programme et
non pas le processus pour arriver ce rsultat (aspect
oprationnel)

Intrts

facilit de comprhension
facilit dcriture

Programmation Logique

NJ - 2002 - 74/127

Le langage
masculin(tom).
masculin(tim).
masculin(bob).
masculin(jim).

Retour sur le retour arrire

feminin(pam).
feminin(liz).
feminin(ann).
feminin(pat).

retour

Considrons la requte

?- frere(bob,liz).

Z=pam
Z = tom

chec
X = bob, Y = liz

Yes

enfant(bob,pam).
enfant(bob,tom).
enfant(liz,tom).
enfant(ann,bob).
enfant(pat,bob).
enfant(tim,liz).
enfant(jim,pat).
frere(X,Y) :masculin(X),
enfant(X,Z),
enfant(Y,Z).

Le mcanisme de retour-arrire (backtrack) assure


la compltude de la recherche
Demander une nouvelle solution revient provoquer
un chec fictif pour forcer le backtrack

Programmation Logique

NJ - 2002 - 75/127

Le langage

Quelques proprits

la recherche ralise par PROLOG est une


recherche en profondeur dabord
on peut obtenir plusieurs solutions pour une
mme requte

un prdicat peut servir autre chose que ce


pour quoi il a t crit

on appelle cela le non-dterminisme de PROLOG

on appelle cela la rversibilit de PROLOG

les seuls rsultats possibles : yes ou no

pas de fonction, les rponses sont obtenues par


unification uniquement

Programmation Logique

NJ - 2002 - 76/127

Le langage

Rcursivit

crire le prdicat ascendant/2

Programmation Logique

ascendant(X,Y) :enfant(Y,X).

Condition darrt
en premier

ascendant(X,Z) :enfant(Z,Y),
ascendant(X,Y).

Information discriminante
en premier

NJ - 2002 - 77/127

Le langage

PROLOG = logique ?

Soit une relation binaire r. Comparer :

rcursion droite
fermeture(X,Y) :- r(X,Y).
fermeture(X,Z) :- r(X,Y), fermeture(Y,Z).
rcursion gauche
fermeture(X,Y) :- r(X,Y).
fermeture(X,Z) :- fermeture(Y,Z), r(X,Y).

Attention la procdure de recherche !!!

Rgle de slection du but


le plus gauche

Rgle de slection de la clause


la premire

Programmation Logique

NJ - 2002 - 78/127

Le langage

2. Arithmtique

Les oprateurs usuels existent : +, , /, mod

attention il sagit de symboles de fonctions !!!

?- X = 1 + 2.
X= 1+2

+(1,2)

Un oprateur spcial is
?- X is 1 + 2.
X=3

Largument de droite doit tre compltement


instanci lappel

?- X is 1 + Y.
{INSTANTIATION ERROR}

Programmation Logique

NJ - 2002 - 79/127

Le langage

Oprateurs arithmtiques

> et <
>= et =<
=:= galit numrique
=\= disgalit numrique
attention : les deux arguments
doivent tre instancis lappel

Programmation Logique

NJ - 2002 - 80/127

Le langage

Exemple: calcul du PGCD

Proprits 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 rle de X et Y

X=Y
pgcd(X, X
Y,X
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).

Programmation Logique

oui, mais que se passe-t-il


avec pgcd(1,1,2).

NJ - 2002 - 81/127

Le langage

Attention

X = Y russit si X sunifie avec Y sinon chec


X is Y russit si Y est une expression arithmtique
compltement instancie lappel et X est une variable
libre sinon il y a erreur
X =:= Y russit si X et Y sont deux expressions
arithmtiques de mme valeur sinon, il y a chec ou
erreur selon le cas
X == Y russit si les termes sont identiques (pas
simplement unifiables)
X \== Y russit si les termes ne sont pas identiques

Programmation Logique

NJ - 2002 - 82/127

Le langage

3. Listes

La liste vide : []
Les listes non vides :

Le constructeur de listes : |

[a, b, c]
[a, [b, c], d]
[Tete | Reste]
[a] [a | [] ]
[a, b] [a | [b |[]]] [a | [b] ]

Analogie avec Haskell

|=:
reprsentation arborescente

Programmation Logique

NJ - 2002 - 83/127

Le langage

Analogie avec Haskell

A-t-on besoin de head et tail ?

?- [1,2,3,4] = [H|T].

On ne dispose pas des listes en comprhension

pas rellement un problme

Programmation Logique

NJ - 2002 - 84/127

Le langage

Prdicats de base

Appartenance une liste : member/2


member(X, [X|Ys]).
_
member(X, [Y_ |Xs]) :member(X,Xs).

Ys ne sert rien
Y ne sert rien

Longueur dune liste : length/2


length([], 0).
length([_ | Xs], N1) :length(Xs, N),
N1 is N + 1.

Programmation Logique

NJ - 2002 - 85/127

Le langage

Prdicats de base (suite)

Suppression dun lment dune liste : efface/3


efface(_, [], []).
efface(X,[X|Ys], Ys).
efface(X,[Y|Ys], [Y|Zs]) :X \== Y,
efface(X,Ys,Zs)
Comment effacer toutes les occurrences dun lment ?

Programmation Logique

NJ - 2002 - 86/127

Le langage

Prdicats de base (suite)

Concatnation de deux listes: append/3


append([], Ys, Ys).
append([X|Xs], Ys, [X|Zs]) :append(Xs,Ys,Zs).

Une nouvelle version de member ?


member(X,L) :append(_, [X|_], L).

Programmation Logique

NJ - 2002 - 87/127

Le langage

Prdicats de base (suite)

Renversement dune liste : reverse/2


reverse([], []).
reverse([X|Xs], Ys) :reverse(Xs,Zs),
append(Zs, [X], Ys).

Une autre version de reverse ?


nreverse([], L, L).
nreverse([X|Xs], Ys, L) :nreverse(Xs, [X|Ys], L).
nreverse(Xs, Ys) :nreverse(Xs, [], Ys).

Programmation Logique

NJ - 2002 - 88/127

Le langage

Un prdicat plus dlicat

Permutation dune liste : permute/2


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

Programmation Logique

NJ - 2002 - 89/127

Le langage

A vous de jouer !

Les mutants
mutant(Nouveau) :animal(A1), animal(A2),
A1 \== A2,
name(A1,L1),
name(A2,L2),
append(_, [X|Xs], L1),
append([X|Xs], Fin, L2),
append(L1, Fin, Mutant),
name(Nouveau,Mutant).

Programmation Logique

NJ - 2002 - 90/127

Le langage

4. Le contrle PROLOG

Contrle du backtrack

Soit une fonction f dont une dfinition Prolog peut tre :


f(X, 0) :- X < 3.
f(X, 2) :- 3 =< X, X < 6.
f(X, 4) :- 6 =< X.

Que se passe-t-il si on pose la question ?


?- f(1,Y), 2 < Y.

Programmation Logique

NJ - 2002 - 91/127

Le langage

?- f(1,Y), 2 < Y.

f(X, 0) :- X < 3.
f(X, 2) :- 3 =< X, X < 6.
f(X, 4) :- 6 =< X.

Dmonstration de f(1,Y)
Premire rgle : Y = 0
Dmonstration de 2 < Y :- chec
Deuxime rgle : chec
Troisime rgle : chec

Programmation Logique

NJ - 2002 - 92/127

Le langage

La coupure : !

On appelle but pre le but ayant permis


dunifier la clause contenant la coupure (! cut)
Leffet du cut est de couper tous les points de
choix restant depuis le but pre. Les autres
alternatives restent en place
f(X, 0) :- X < 3, !.
f(X, 2) :- 3 =< X, X < 6, !.
f(X, 4) :- 6 =< X.

?- f(7,Y).

Programmation Logique

NJ - 2002 - 93/127

Le langage

Si alors sinon

Le cut peut servir exprimer des conditions


mutuellement exclusives et ainsi simplifier
lcriture
La clause suivant un cut peut tre considre
comme un sinon
f(X, 0) :- X < 3, !.
f(X, 2) :- X < 6, !.
f(X, 4).

?- f(1,2).

Programmation Logique

NJ - 2002 - 94/127

Le langage

Un usage dlicat

Green cut : la smantique dclarative du


programme nest pas modifie

on peut enlever le cut le programme fonctionnera


toujours

Red cut : la smantique dclarative du


programme est modifie

Le retrait du cut conduit un programme au


fonctionnement erron
Gnralement, la version avec cut peut tre prise en
dfaut

Programmation Logique

NJ - 2002 - 95/127

Le langage

Autres prdicats de contrle

true est un but qui russit toujours

p(a,b).

p(a,b) :- true.

fail est un but qui choue toujours

call(X) est un mta but. Il considre X comme


un but et essaie de le rsoudre.

?- Y=b, X=member(Y, [a,b,c]), call(X).


Yes
Note: call(X) X dans Sicstus Prolog.

Programmation Logique

NJ - 2002 - 96/127

Le langage

Application : ngation

Expression de la ngation en Prolog

different(X, Y) :X = Y, !, fail.
different(X, Y).

Un prdicat plus gnral :

not(P) :P, !, fail.


not(_).

Programmation Logique

NJ - 2002 - 97/127

Le langage

Problmes avec le not !


r(a).
q(b).
p(X) :- not( r(X) ).

?- q(X), p(X).

?- p(X), q(X).

Programmation Logique

NJ - 2002 - 98/127

Le langage

Thorie du monde clos

not(X)

ne veut pas dire


X est toujours faux

veut simplement dire


Je nai pas assez dinformation pour prouver X

Prolog considre ce qui nest pas vrai comme


faux et vice-versa

cest la thorie du monde clos

A quoi peut servir : not(not(P)) ?

Programmation Logique

NJ - 2002 - 99/127

Le langage

Typage en Prolog

var/1, nonvar/1

integer/1, float/1, number/1

atom/1, string/1, atomic/1

compound/1

ground/1

Programmation Logique

NJ - 2002 - 100/127

Le langage

5. Termes structurs

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

On pourrait utiliser des listes (de listes )


mais on prfre structurer linformation

Programmation Logique

NJ - 2002 - 101/127

Le langage

Utilisation de lunification
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) ])

Les familles trois enfants :

famille(_,_,[_,_,_]).

Les femmes maries ayant au moins trois


enfants

famille(_,indiv(Prenom, Nom,_,_), [_,_,_|_]).

Programmation Logique

NJ - 2002 - 102/127

Le langage

Outils de manipulation

Consultation de termes structurs

functor/3
?- functor(date(9, janvier, 1973), F, A)
F = date, A = 3
arg/3
?- arg(3, date(9, janvier, 1973), F)
F = 1973

Construction/dconstruction de termes structurs

=../2
?- X =.. [date, 9, janvier, 1973]
X = date(9, janvier, 1973)

Programmation Logique

NJ - 2002 - 103/127

Le langage

Oprateurs

On peut dfinir de nouveaux oprateurs. Il ne


sagit que dune dfinition syntaxique pour
faciliter lcriture de termes.
:- op(80, fy, non).
:- op(100, yfx, et).

non a et b est devenu un terme valide, il est


quivalent et(non(a), b)

Programmation Logique

NJ - 2002 - 104/127

Le langage

Fonctionnement

Un oprateur possde une prcdence (1..1200)

par exemple : + a une plus forte prcdence que / car


a+b/c

se lit

a+(b/c)

Un oprateur possde une politique de rsolution des


ambiguts :

xfx correspond aux oprateurs infixes non associatifs


les deux sous-expressions ont un niveau de prcdence infrieur
celui de loprateur
xfy correspond aux oprateurs associatifs droite seule
lexpression de gauche doit avoir un niveau infrieur loprateur
yfx correspond aux oprateurs associatifs gauche

Programmation Logique

NJ - 2002 - 105/127

Le langage

6. Mta-interprtation

Mta-programmation

crire des programmes qui analysent, transforment


et simulent dautres programmes

Prolog est un langage adapt la mtaprogrammation car :

il y a identit entre programme et donnes

Programmation Logique

NJ - 2002 - 106/127

Le langage

Mta-interprtation

Un mta-interprte dun langage donn est un


interprte du langage crit dans le mme
langage

Le prdicat prouve(But) russit si la requte


But par rapport au programme que lon cherche
interprter

Le plus simple des mta-interprtes Prolog


prouve(But) :- But.

Programmation Logique

NJ - 2002 - 107/127

Le langage

Outils pour la mta-interprtation

Le prdicat clause/2 (accs aux programmes)


append([],X,X).
append([X|Xs], Ys, [X|Zs]) :append(Xs,Ys,Zs).

?- clause(append(X,Y,Z), Corps).
X = [], Y = _A1, Z=_A2, Corps = true ? ;
X = [_A1|_A2], Y = _A3, Z = [_A1|_A4],
Corps = append(_A2, _A3, _A4)
?;
no
Programmation Logique

NJ - 2002 - 108/127

Le langage

Un premier interprte

prouve( true ).
prouve( (A,B) ) :prouve(A),
prouve(B).
prouve( But ) :clause(But, Corps),
prouve(Corps).

Programmation Logique

NJ - 2002 - 109/127

Le langage

Amliorations

Gestion des prdicats prdfinis


prouve( But ) :predefini( But ), predefini( _ = _ ).
But.
predefini( _ is _ ).

Gestion explicite de lunification


prouve( But ) :But =.. [Foncteur|Arguments],
Tete =.. [Foncteur|AutresArguments],
clause(Tete, Corps),
unification(But, Tete),
prouve(Corps).

Programmation Logique

NJ - 2002 - 110/127

Le langage

Algorithme dunification
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).
Programmation Logique

NJ - 2002 - 111/127

Le langage

Le test doccurrence

Thoriquement, lors dune unification il faut


raliser le test doccurrence. Prolog ne le fait
pas. En particulier :
?- X = f(X).

russit mais ne peut afficher de rsultat !

Exercice : crire le test doccurrence en Prolog

Programmation Logique

NJ - 2002 - 112/127

Le langage

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

Programmation Logique

NJ - 2002 - 113/127

PROLOG avanc

1.
2.
3.
4.

Structures incompltes
Listes de solutions
Modifications de la base
Indexation de clauses

Programmation Logique

2002

Prolog avanc

1. Structures incompltes

Concatnation
append([], Ys, Ys).
append([X|Xs], Ys, [X|Zs]) :append(Xs,Ys,Zs).

Notoirement inefficace !
Le problme
pas de pointeur sur le dernier lment
pas de possibilit de modification dune variable logique
uniquement instanciation dune inconnue

Programmation Logique

NJ - 2002 - 115/127

Prolog avanc

Une solution : listes de diffrences

Une nouvelle structure de liste

ide : conserver une partie inconnue pour


instanciation au dernier moment
Liste de diffrence
on nomme la fin de la liste
[a,b,c] est reprsente par [a,b,c|Xs]-Xs
la liste vide Xs-Xs

Concatnation en une opration


append(Ls-Xs, Xs-Rs, Ls-Rs).
?- append([a,b,c|Xs]-Xs, [1,2,3|Ys]-Ys, R).
R = [a,b,c,1,2,3|Ys]-Ys

Programmation Logique

NJ - 2002 - 116/127

Prolog avanc

Une opration !?!

Ls - Xs
Xs - Rs

abc 123???
123???

123???
???

Ls - Rs

abc123???

???

Merci lunification !

Programmation Logique

NJ - 2002 - 117/127

Prolog avanc

2. Listes de solutions
pere(tarzan, fils).
pere(tarzan, fille).
age(fils, 5).
age(fille, 2).
age(tarzan, 25).

On veut la liste de tous les enfants de tarzan et leur


ge.
pere(tarzan, X), age(X,A) ne donne les solutions
quune par une
Comment les rcuprer toutes dans une liste ?

Programmation Logique

NJ - 2002 - 118/127

Prolog avanc

Prdicats toutes solutions


?- setof(X/A, (pere(tarzan, X), age(X,A)), L).
L = [fils/5, fille/2]

setof/3 rsultat tri (fail si pas de solution)


bagof/3 rsultat tel que le backtrack (fail si pas de
solution)
findall/3 rsultat tel que le backtrack ([] si pas de
solution)

findall(X, member(X/Y, [b/1, a/2]), L)


setof(X, member(X/Y, [a/1, b/2]), L
setof(X, Y^member(X/Y, [b/1, a/2]), L)
Programmation Logique

--> [b,a]
--> L=[b] Y=1 ;
L=[a] Y=2
--> [a,b]
NJ - 2002 - 119/127

Prolog avanc

3. Modifications de la base

Besoin : rsistance au backtrack

Ajout dans la base

assert/1
asserta/1
assertz/1

Retrait dans la base

retract/1
retractall/1

Programmation Logique

NJ - 2002 - 120/127

Prolog avanc

4. Indexation de clause

Les clauses Prolog sont ranges dans une


hashtable. Elles sont indexes par le foncteur
et larit de leur premier argument

Pour crire des programmes plus efficaces,


mettre en tte largument le plus discriminant.

Programmation Logique

NJ - 2002 - 121/127

Bilan

1. Cours
2. Travaux pratiques
3. A quoi a sert ?

Programmation Logique

2002

Bilan

Bilan du cours

Rappels de logique

Comment programmer avec la logique

Le langage PROLOG

Subtilits du langage

Programmation Logique

NJ - 2002 - 123/127

Bilan

Bilan des TP

TP-1/TP-2: Mise en route, manipulations

TP-3: Rsolution dnigmes logiques/de rflexion

tester des ides,


rsoudre des problmes non triviaux

TP-4: criture dun systme expert complet

criture rapide de fonctions sur les listes


criture rapide de petits outils

4 heures pour un systme complet, convivial et extensible


comparer avec 50h en Pascal

TP-5 (not)

Programmation Logique

NJ - 2002 - 124/127

Bilan

PROLOG : quoi a sert ?

Principal langage de lIntelligence Artificielle

Systmes experts
cf. TP

Traitement du langage naturel


cf. GINA

Faire intervenir le raisonnement

Programmation Logique

NJ - 2002 - 125/127

Bilan

PROLOG pour lIndustrie

Programmation par Contraintes

point de rencontre de diverses disciplines


programmation logique (et IA au sens large)
recherche oprationnelle (graphes, prog. Linaire, )
analyse numrique

Pour rsoudre des problmes combinatoires


complexes
gestion de ressources (humaines ou non),
rseaux tlcoms,

Technologie franaise en plein boom !


ILOG SA, Cosytec
(systmes de PPC)
Bouygues SA, Bouygues Telecom, France Telecom R&D, Air
France, DGA, SNCF,

Programmation Logique

NJ - 2002 - 126/127

Bilan

PROLOG dans lIndustrie

Utilis pour

prototyper trs rapidement,


tester des ides

Mais aussi pour dvelopper des applications

Dassault lectronique
ECRC (Centre de recherche commun Bull, Siemens)

Programmation Logique

NJ - 2002 - 127/127