• Aucun résultat trouvé

[PDF] Support de Cours d’introduction à SWI Prolog | Formation informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Support de Cours d’introduction à SWI Prolog | Formation informatique"

Copied!
127
0
0

Texte intégral

(1)

Programmation en Logique

FI 3 - 2002

Cours Narendra Jussien

(2)

 Enseignement

Cours/TD 50%TP sur machine 50%

Langage support PROLOG

 Évaluations

Micro-évaluation (TD noté)

Contrôle continu (envoi du code à chaque fin de TP)TP noté en fin de module

(3)
(4)

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 impératifs

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é

(5)

Une nouvelle classe

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

(6)

 1930 Calcul des prédicats (J. Herbrand)  1965 Principe de résolution (J. A. Robinson)  1970 Utiliser la logique comme langage de

programmation

clauses de Horn R. Kowalski Q-systèmes A. Colmerauer

 1972 Premier interprète PROLOG (A. Colmerauer et P. Roussel) Université d’Aix-Marseille

 1977 Premier compilateur PROLOG (D. H. D. Warren) Université d’Édimbourg

 1980 Projet japonais de 5e génération

(7)

Plan du cours

 Bases théoriques (rappels de logique formelle)

Calcul propositionnelCalcul des prédicats

 Le langage PROLOG

(8)

 Utiliser PROLOG (premières séances)

 Réaliser un système expert complet

 Résoudre automatiquement des énigmes

(9)

Rappels de Logique

1. Calcul propositionnel 2. Calcul des prédicats

(10)

 Comment écrire les formules ?

Aspects syntaxiques

 Comment déterminer la valeur de vérité d’une

formule ?

Aspects sémantiques

 Comment démontrer de nouveaux résultats ?

(11)

Syntaxe d’une formule

 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

(12)

Sémantique d’une formule

 Logique bi-valuée

faux (0)vrai (1)

Notion d’interprétation

donner une valeur de vérité à une variable

extension à un opérateurextension à une formule

0

,

1

)

(

p

(13)

Tables de vérité : opérateurs

1 0 0 00 1 0 1 1 1 1 1 0 1 1 0 0 1 p p 0 1  0 1 0 1  0 1 0 1  0 1 0 1  0 1 0 1 Calcul propositionnel

(14)

Formules particulières

Tautologies : formules toujours vraies

La table de vérité ne contient que des 1exemple : p   p p ( p) (p   p) 0 1 1 0 1 1 0 1 1 1  0 1 0 1

(15)

?

(

p

q

)

(

p

q

)

p q ¬ p ¬ q p  q ¬ ( p  q ) (¬ p  ¬ q) F 0 0 0 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0  0 1 0 0 1 1 1 0 0 1  0 1 0 1 0 0 1 1 1 1 0  0 1 0 1 1 1 1 0 Calcul propositionnel

(16)

Catégories de formules

Tautologies : formules toujours vraies

Formules inconsistantes

formules toujours fausses

la table de vérité ne contient que des 0exemple : p   p

Formules consistantes

formules non toujours fausses

1

)

(

,

(17)

Formules particulières

Formules tautologiquement équivalentes

les tables de vérité sont les mêmes

Condition nécessaire et suffisante :

(F) (H) est une tautologie (F) (H)

)

(

)

(

,

F

H

Calcul propositionnel

(18)

lois de De Morgan

Propriétés de et

associativité

distributivité (dans les 2 sens)

éléments neutres (0 pour et 1 pour )

éléments absorbants (1 pour et 0 pour )

Quelques équivalences utiles

) ( ) (F G G F G F  tauto    FGtautoFG F G G F  tauto  1 tauto F F  

 

Ftauto FF G G F  tauto  0 tauto F F   G F G F G F G F tauto tauto             ) ( ) (

(19)

Formes normales

But avoir une représentation uniforme des

formules du calcul propositionnel

limiter le nombre de connecteurs différents utiliséslimiter l’allure des formules rencontrées

(20)

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

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 négation

Toute formule du calcul propositionnel est tautologiquement équivalente à une formule sous forme normale conjonctive

(21)

Aspects déductifs

 notion de conséquence logique  notion de démonstration

 notion de règles de déduction

(22)

Conséquence logique

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

A G ssi (F1 Fn) G

Notion de réfutation

démonstration par l’absurde

(23)

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

(24)

Énoncé déductible

Soit J un ensemble de formules

Un énoncé A est dit déductible sous les

hypothèses J (noté J A) ssi

il existe une suite finie A1, …, An d’énoncés telle que

– An = A

– pour tout i

 Ai est un axiome  ou A

i  J

 ou Ai découle d’énoncés précédents par application

(25)

Quelques règles de déduction

classiques

modus ponensp, p q qmodus tollensp q, q psyllogismep q, q r p r Calcul propositionnel

(26)

Propriétés d’un système formel

Un système formel est correct ssi

si A alors A

tout ce qui est démontrable est vrai

Un système formel est complet ssi

si A alors A

(27)

Principe de résolution (Robinson)

Définitions

littéral positif ou négatif

une clause est une disjonction de littéraux

– la résolvante de C1 = l C’1 et de C2 = l C’2 est

C’1 C’2

Principe de résolution

l C’1 , l C’2 réso C’1 C’2

Une autre règle d’inférence

(28)

Validité du principe de résolution

 Il faut montrer que :

l C’1 , l C’2 C’1 C’2

ie (l C’1) ( l C’2 ) (C’1 C’2 )

 Il suffit de montrer que

si (l C’1) ( l C’2 ) vrai alors (C’1 C’2 ) n’est pas faux

 Deux cas se présentent

l est vrai

– nécessairement C’2 vrai et donc (C’1 C’2 ) aussi

  l est vrai

– nécessairement C’1 vrai et donc (C’1 C’2 ) aussi

 0 1

 0 1

(29)

Propriétés du calcul propositionnel

 Le calcul propositionnel muni du principe de

résolution est correct et complet

Un ensemble S de clauses est insatisfaisable ssi S reso 

Démonstration : par l’absurde (réfutation) S C ssi S {C} 

(30)

Ce qu’il faut retenir

Intérêt d’une forme normale

Conséquence logique vs démonstration

Principe de résolution

(31)

2. Calcul des prédicats

 Comment écrire les formules ?

Aspects syntaxiques

 Comment déterminer la valeur de vérité d’une

formule ?

Aspects sémantiques

 Comment démontrer de nouveaux résultats ?

(32)

Limites du calcul propositionnel

 Modéliser

Les chandelles sont faites pour éclairerQuelques chandelles éclairent très mal

Quelques objets qui sont faits pour éclairer le font très

(33)

Une modélisation

Les chandelles sont faites pour éclairer

Quelques chandelles éclairent très mal

Quelques objets qui sont faits pour éclairer le font très

mal ) ( ) ( , chandelle x éclaireMal x x   ) ( ) ( , chandelle x éclaire x x   ) ( ) ( , éclaire x éclaireMal x x  

(34)

Syntaxe

des connecteurs (, , ,  et )

des quantificateurs ( et )

des variables (x,y, …)

des relations (prédicats) (R, S, éclaire, …)

des symboles de fonctions (f, g, …)

(35)

Vocabulaire

Les termes

les variables et les constantes sont des termesf(t1, …, tn) est un terme si

– les ti sont des termes

– f est un symbole de fonction d’arité nLes atomes

R(t1, …, tn) est un atome si

– les ti sont des termes

– R est un symbole de relation d’arité n

(36)

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)

(37)

Occurrence d’une variable

Une occurrence d’une variable x dans une

formule F est un endroit où x apparaît dans F sans être immédiatement précédée par  ou 

Une occurrence libre de x dans F est définie :

(38)

Occurrence libre

Si F est un atome, toutes les occurrences de x sont libresSi F = (G), les occurrences libres de x sont celles de GSi 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

(39)

Caractéristiques des variables

Une variable est dite libre dans une formule F si

elle a au moins une occurrence libre (sinon on dit qu’elle est liée)

 Une formule n’ayant pas de variable libre est

dite close

(40)

Aspects sémantiques

 Formules universellement valides  Le théorème de Herbrand

(41)

Vers la notion de modèle

Soit L le langage du calcul des prédicats

une interprétation de L c’est la donnée de :

– un ensemble E non vide appelé ensemble de base

– pour chaque symbole de prédicat R d’arité n, d’un sous-ensemble R’ de En

– pour chaque symbole de fonction f d’arité n, d’une

application f’ de En vers E (y compris pour les constantes)on peut alors calculer la valeur de tout terme clos

(c’est un élément de E)

on peut donc associer une valeur de vérité à tout

atome et donc par extension à toute formule close

(42)

Exemple d’interprétation

 xyz (P(x,y)  Q(y,z)  R(x,z))  xy ( (M(x,y)  P(x,y)  Q(x,y))  M(a,b)  P(c,b)  P(d,a)  P(e,c)

 E =

 P’ =

 a’ = anne b’ = bernard c’ = charles

d’ = didier e’= éric

est le père de M’ = est la mère de Q’ = est un parent de R’ = est le grand-père de

(43)

Modèle

Soit M une interprétation de L

soit F une formule close. M est un modèle de F ssi la

valeur de vérité de F dans M est 1

M F

soit F(x1, …, xk) une formule quelconque

– F est dite universellement valide ssix1…xk F(x1, …, xk)

est satisfaite dans toutes les interprétations de L

– F est dite insatisfaisable ssi il existe une interprétation

pour laquelle

(44)

Preuve et démonstration

Comment prouver une formule du calcul des

prédicats ?

Prouver qu’elle est vraie

– passer en revue toutes les interprétations !

Prouver qu’elle est fausse

(45)

Toutes les interprétations ?

 Une représentation utile des formules

forme clausale

 Un théorème qui simplifie la vie

théorème de Herbrand

 Principe de résolution pour le calcul des prédicats

vers une automatisation des démonstrations

(46)

Transformation de formule

Forme normale prénexe

quantificateurs en tête de la formule

formule sous forme normale conjonctive

Forme standard de Skolem

formule sous forme normale prénexe

quantificateurs existentiels précédant quantificateurs

universels

Tout formule du calcul des prédicats est équivalente à une formule sous forme standard de Skolem

(47)

Mise sous forme prénexe

 Éliminer les connecteurs  et 

 Transporter les  devant les atomes

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

 Transporter les quantificateurs en tête de la

formule

Ne pas hésiter à renommer les variables

(48)

Transport des quantificateurs

x

F

x

F

F

x

x

F

F

H

x

H

x

F

x

H

F

x

H

x

F

x

F

x

y

F

y

x

F

x

y

F

y

x

si H ne contient aucune occurrence de x

x

F

H

x

F

H

H

F

x

H

F

x

H

H

x

H

H

x

(49)

Inversion de

et de

Skolemisation

 Lorsqu’on a

on remplace y par une fonction g qui à x associe y

y

x

f

y

x

(

)

)

(

)

(

x

g

x

f

x

g

Skolemisation = expliciter l’implicite

(50)

Une représentation utile des formules

Forme clausale

On part de la forme standard de Skolem

 On utilise les clauses avec :

les variables quantifiées universellement conservéesles fonctions de Skolem conservées

les variables quantifiées existentiellement remplacées

par des constantes

les variables renommées d’une clause à l’autre

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

z y x    

(51)

Univers de Herbrand

Soit S un ensemble de clauses

Soit H0 l’ensemble des symboles de constantes ayant

au moins une occurrence dans S. On pose :

pour fn fonction d’arité n de S et tj éléments de Hi-1

H= limi Hi est appelé univers de Herbrand

On appelle instance de base d’une clause C toute

( 1, , )

1 n n

i

i H f t t

H   

(52)

Théorème de Herbrand

Théorème Un ensemble S de clauses est

insatisfaisable si et seulement si il existe un

ensemble S’ d’instances de base insatisfaisable

Corollaire Un ensemble de clauses est

satisfaisable si et seulement si tout ensemble fini d’instances de base est satisfaisable

(53)

A quoi ça sert ?

Validation de raisonnement

 On cherche à valider le raisonnement suivant

Un dragon est heureux si tous ses enfants peuvent volerLes dragons verts peuvent voler

Un dragon est vert s’il a au moins un parent vert ou roseDonc les dragons verts sont heureux

(54)

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 yvo(x) : x vole (peut voler)ve(x) : x est vert

(55)

Résolution du problème (suite)

P1 un dragon est heureux si tous ses enfants peuvent voler

P2 les dragons verts peuvent voler

P3 un dragon est vert s’il a au moins un parent vert ou rose

C les dragons verts sont heureux

les A sont BA B ) ( ) ( , ve x vo x x   h(x) x (y, p(x,y)vo(y))

, ( , ) ( ) ( )

( ) , y p y x ve y r y ve x x      ) ( ) ( , ve x vo x x   

, ( , ) ( )

( ) , y p x y vo y h x x     x,

y,p(x, y)  vo(y)

h(x) ,xx,y,,

y

p,y

(,pxp(,(xyx,),yy))h(x)vovo

 

((yy))

vo

(hhy((x)x))h(x)

x      

( , ( )) ( )

 

( ( )) ( )

, , x p x f x h x vo f x h x f      

, ( , ) ( ) ( )

( ) , y p y x ve y r y ve x x      x,

y,p(y,x)

ve(y)r(y)

ve(x) ,

( , ) ( )

 

( , ) ( )

( ) , y p y x ve y p y x r y ve x x          , y,

p(y,x) ve(y) ve(x)

 

p(y, x) r(y) ve(x)

x          

(56)

Forme clausale

( , ( )) ( )

 

( ( )) ( )

, , x p x f x h x vo f x h x f       ) ( ) ( , 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 x   ) ( )) ( , (x1 f x1 h x1 p  vo( f (x2))  h(x2) ) ( ) (x3 vo x3 ve   p(y1, x4) ve(y1)  ve(x4) ) ( ) ( ) , (y2 x5 r y2 ve x5 p     ve(a) h(a)

(57)

Validation du raisonnement

 Univers de Herbrand

H0 = {a} H1= {a, f(a)} H = {a, …, fn(a)}

Trouver un ensemble d’instances de base insatisfaisableintuition 1 : partir de la conclusion et essayer d’arriver

à une contradiction par déduction

intuition 2 : utiliser le principe de résolution

(58)

) ( )) ( , (x1 f x1 h x1 p

Mise en œuvre

) ( )) ( ( f x2 h x2 vo   ) ( ) (x3 vo x3 ve   p(y1, x4) ve(y1)  ve(x4) ) ( ) ( ) , (y2 x5 r y2 ve x5 p     ve(a) h(a) ) (a hh(a) vo( f (a)) a x2  )) ( ( )) ( ( f a ve f a vo   ) ( 3 f a x  )) ( ( ) ( )) ( , (y1 f a ve y1 ve f a p     ) ( 4 f a x  )) ( , ( ) (a p a f a hx1  a y1 px(1a, f (a))  ve(a) ve( f (a))  ) ( 3 f a x  )) ( ( )) ( ( f a ve f a vo   a x2 ) ( )) ( ( f a h a vo   ) (a h  clause vide

(59)

Résolution

 On a un ensemble d’instances de base insatisfaisable

La formule P1 P2 P3  C est donc insatisfaisable

) (a h  )) ( ( ) (a vo f a h   )) ( ( )) ( ( f a ve f a vo   )) ( , ( ) (a p a f a h  )) ( ( ) ( )) ( , (a f a ve a ve f a p     ) (a ve ) (a h

(60)

unificateur y1x1 x1a

Analysons un peu les choses

L’opération d’appariement de deux atomes

s’appelle l’unification

Algorithme d’unification (vu plus tard)On peut donc appliquer le principe de

)) ( ( ) ( )) ( , (y1 f a ve y1 ve f a p     ) ( )) ( , (x1 f x1 h x1 p

(61)

Propriétés du calcul des prédicats

 Le calcul des prédicats muni du principe de

résolution et de l’unification est complet

toute formule close est vraie ou fausse

MAIS le calcul des prédicats est indécidable

Il n’existe pas d’algorithme permettant de décider à

tout coup si une formule close est vraie ou fausse

En PROLOG, nous nous limiterons donc à un

sous-ensemble du calcul des prédicats

(62)

Programmer en logique ?

 Un petit exemple

 xyz (pere(x,y)parent(y,z)  grand-pere(x,z)  xy ((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)

(63)

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)

(64)

Programmer en logique ?

 On a réussi à prouver x, grand-pere(x,b)

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 processusPROLOG est un démonstrateur de théorème

(65)

Le langage PROLOG

1. Premiers pas 2. Arithmétique 3. Listes 4. Le contrôle PROLOG 5. Termes structurés

(66)

1. Premiers pas en Prolog

On se limite aux clauses de Horn

au plus un littéral positif

– un seul littéral (positif) : fait

– un littéral positif et au moins un littéral négatif : règle – pas de littéral positif : requête

 Elles permettent

de forcer le retour dans la base pour continuer la

démonstration

(67)

Univers PROLOG

L’univers PROLOG est une base de connaissances

décrivant l’état du monde à l’aide de relations (prédicats) portant sur des entités (termes)

Un prédicat particulier (=) correspond à l’unification

(68)

Syntaxe de PROLOG

 Considérons l’énoncé

Socrate est un hommeTout homme est mortelSocrate est-il mortel ?

Calcul des prédicats Prolog

x, homme(x) homme(socrate).

x, homme(x) mortel(x) mortel(X) :- homme(X). ?- mortel(socrate).

(69)

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

(70)

Premières requêtes

masculin(jim). 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).

Est-ce que pat est un enfant de bob ?

?- enfant(pat,bob).

Quels sont les enfants de tom ?

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

Yes

X = liz ;

(71)

Lien avec le calcul des prédicats

Règles PROLOG a :- b,c,d. a Règles LOGIQUE b c d Requête PROLOG ?- q. Requête LOGIQUE q Unification

(72)

Écriture de prédicats

• Qui est le père de bob ?

?- enfant(bob,X), masculin(X). masculin(jim). 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). X=pam échec retour X=tom X=tom • Plus généralement pere(X,Y) :-enfant(Y,X), masculin(X).

(73)

À chacun son tour

 Écrire les prédicats correspondant aux relations

grand-pere/2frere/2

tante/2cousin/2

(74)

PROLOG

PROLOG est un langage déclaratif

on spécifie les propriétés du résultat du programme et non pas le processus pour arriver à ce résultat (aspect

opérationnel)

 Intérêts

facilité de compréhensionfacilité d’écriture

(75)

Retour sur le retour arrière

 Considérons la requête  ?- frere(bob,liz). masculin(tom). masculin(tim). masculin(bob). masculin(jim). 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). frere(X,Y) masculin(X), enfant(X,Z), enfant(Y,Z). X = bob, Y = liz Z=pam échec Yes Z = tom retour

Le mécanisme de retour-arrière (backtrack) assure la complétude de la recherche

Demander une nouvelle solution revient à provoquer un échec fictif pour forcer le backtrack

(76)

Quelques propriétés

 la recherche réalisée par PROLOG est une

recherche en profondeur d’abord

 on peut obtenir plusieurs solutions pour une

même requête

on appelle cela le non-déterminisme de PROLOG

 un prédicat peut servir à autre chose que ce

pour quoi il a été écrit

on appelle cela la réversibilité de PROLOG

les seuls résultats possibles : yes ou no

(77)

Récursivité

Écrire le prédicat ascendant/2

ascendant(X,Y) :- enfant(Y,X). ascendant(X,Z) enfant(Z,Y), ascendant(X,Y). Condition d’arrêt en premier Information discriminante en premier Le langage

(78)

PROLOG = logique ?

Soit une relation binaire r. Comparer :

récursion droite

fermeture(X,Y) :- r(X,Y).

fermeture(X,Z) :- r(X,Y), fermeture(Y,Z).

 récursion gauche

fermeture(X,Y) :- r(X,Y).

fermeture(X,Z) :- fermeture(Y,Z), r(X,Y).

Attention à la procédure de recherche !!!

Règle de sélection du but

– le plus à gauche

(79)

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

(80)

Opérateurs arithmétiques

 > et <

 >= et =<

 =:= égalité numérique

 =\= diségalité numérique

attention : les deux arguments

(81)

Exemple: calcul du PGCD

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 - Xsi Y < X alors échanger le rôle de X et Y

pgcd(X, Y , D) :- X =:= Y , D is X.X X ). X=Y pgcd(X, Y , D) :- X < Y , pgcd(X,Y-X,D). Y1 is Y - X, pgcd(X,Y1,D). pgcd(X, Y, D)

:-oui, mais que se passe-t-il

(82)

Attention …

X = Y réussit si X s’unifie avec Y sinon échec

X is Y réussit si Y est une expression arithmétique

complètement instanciée à l’appel et X est une variable

libre sinon il y a erreur

X =:= Y réussit si X et Y sont deux expressions

arithmétiques de même valeur sinon, il y a échec ou erreur selon le cas

X == Y réussit si les termes sont identiques (pas

simplement unifiables)

(83)

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

(84)

Analogie avec Haskell

A-t-on besoin de head et tail ?

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

 On ne dispose pas des listes en compréhension

(85)

Prédicats de base

Longueur d’une liste : length/2

length([], 0).

length([_ | Xs], N1) :-length(Xs, N),

Appartenance à une liste : member/2

member(X, [X|Ys]). member(X, [Y |Xs]) :-member(X,Xs). Ys ne sert à rien _ Y ne sert à rien _ Le langage

(86)

Prédicats de base (suite)

Suppression d’un élément d’une liste : efface/3

efface(_, [], []).

efface(X,[X|Ys], Ys).

efface(X,[Y|Ys], [Y|Zs]) :-X \== Y,

efface(X,Ys,Zs)

(87)

Prédicats de base (suite)

Concaténation 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) :-

(88)

Prédicats de base (suite)

Renversement d’une 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)

(89)

:-Un prédicat plus délicat

Permutation d’une 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). Le langage

(90)

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

(91)

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.

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

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

(92)

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

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 Deuxième règle : échec

(93)

La coupure : !

On appelle but père le but ayant permis

d’unifier la clause contenant la coupure (! cut)

L’effet du cut est de couper tous les points de

choix restant depuis le but père. Les autres alternatives restent en place

f(X, 0) :- X < 3, !.

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

(94)

Si … alors … sinon

Le cut peut servir à exprimer des conditions

mutuellement exclusives et ainsi simplifier l’écriture

La clause suivant un cut peut être considérée

comme un sinon

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

(95)

Un usage délicat

Green cut : la sémantique déclarative du

programme n’est pas modifiée

on peut enlever le cut le programme fonctionnera

toujours

Red cut : la sémantique déclarative du

programme est modifiée

Le retrait du cut conduit à un programme au

fonctionnement erroné

Généralement, la version avec cut peut être prise en

(96)

Autres prédicats de contrôle

true est un but qui réussit toujours

p(a,b). p(a,b) :- true.

fail est un but qui échoue toujours

call(X) est un méta but. Il considère X comme

un but et essaie de le résoudre.

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

Yes

(97)

Application : négation

 Expression de la négation en Prolog

different(X, Y)

:-X = Y, !, fail.

different(X, Y).

 Un prédicat plus général :

not(P)

:-P, !, fail.

not(_).

(98)

Problèmes avec le not !

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

(99)

Théorie du monde clos

not(X)

ne veut pas dire

– X est toujours faux

veut simplement dire

– Je n’ai pas assez d’information pour prouver X

Prolog considère ce qui n’est pas vrai comme

faux et vice-versa

c’est la théorie du monde clos

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

(100)

Typage en Prolog

var/1, nonvar/1

integer/1, float/1, number/1

atom/1, string/1, atomic/1

compound/1

(101)

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

On pourrait utiliser des listes (de listes …) mais on préfère structurer l’information

(102)

Utilisation de l’unification

 Les familles à trois enfants :

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

 Les femmes mariées ayant au moins trois

enfants

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

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

(103)

Outils de manipulation

 Consultation de termes structurés

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/déconstruction de termes structurés

=../2

?- X =.. [date, 9, janvier, 1973]

(104)

Opérateurs

On peut définir de nouveaux opérateurs. Il ne

s’agit que d’une définition syntaxique pour faciliter l’écriture de termes.

:- op(80, fy, non). :- op(100, yfx, et).

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

(105)

Fonctionnement

Un opérateur possède une précédence (1..1200)

par exemple : + a une plus forte précédence que / car

a+b/c se lit a+(b/c)

Un opérateur possède une politique de résolution des

ambiguïtés :

xfx correspond aux opérateurs infixes non associatifs

les deux sous-expressions ont un niveau de précédence inférieur à celui de l’opérateur

xfy correspond aux opérateurs associatifs à droite seule

l’expression de gauche doit avoir un niveau inférieur à l’opérateur

yfx correspond aux opérateurs associatifs à gauche

(106)

6. Méta-interprétation

Méta-programmation

écrire des programmes qui analysent, transforment

et simulent d’autres programmes

Prolog est un langage adapté à la

méta-programmation car :

(107)

Méta-interprétation

Un méta-interprète d’un langage donné est un interprète du langage écrit dans le même

langage

Le prédicat prouve(But) réussit si la requête

But par rapport au programme que l’on cherche

à interpréter

Le plus simple des méta-interprètes Prolog

(108)

Outils pour la méta-interprétation

Le prédicat clause/2 (accès aux programmes) append([],X,X).

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

X = [], Y = _A1, Z=_A2, Corps = true ? ; X = [_A1|_A2], Y = _A3, Z = [_A1|_A4], Corps = append(_A2, _A3, _A4) ? ;

(109)

Un premier interprète

prouve( true ). prouve( (A,B) ) prouve(A), prouve(B). prouve( But ) clause(But, Corps), prouve(Corps). Le langage

(110)

Améliorations

 Gestion des prédicats prédéfinis

prouve( But )

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

 Gestion explicite de l’unification

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

(111)

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([], []). Le langage

(112)

Le test d’occurrence

Théoriquement, lors d’une unification il faut

réaliser le test d’occurrence. Prolog ne le fait pas. En particulier :

?- X = f(X).

réussit mais ne peut afficher de résultat !

(113)

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), Le langage

(114)

1. Structures incomplètes 2. Listes de solutions

3. Modifications de la base 4. Indexation de clauses

(115)

1. Structures incomplètes

 Concaténation

Notoirement inefficace !Le problème

– pas de « pointeur » sur le dernier élément

– pas de possibilité de modification d’une variable logique

Prolog avancé

append([], Ys, Ys).

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

(116)

Une solution : listes de différences

 Une nouvelle structure de liste

idée : conserver une partie inconnue pour

instanciation au dernier moment

Liste de différence

– on nomme la fin de la liste

– [a,b,c] est représentée par [a,b,c|Xs]-Xs – la liste vide Xs-Xs

Concaténation en une opération

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

(117)

Une opération !?!

Ls - Xs a b c 1 2 3 ? ? ? - 1 2 3 ? ? ? Xs - Rs 1 2 3 ? ? ? - ? ? ? Ls - Rs a b c 1 2 3 ? ? ? - ? ? ? Merci l’unification ! Prolog avancé

(118)

2. Listes de solutions

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

âge.

pere(tarzan, X), age(X,A) ne donne les solutions

qu’une par une

 Comment les récupérer toutes dans une liste ?

pere(tarzan, fils). pere(tarzan, fille). age(fils, 5).

age(fille, 2).

(119)

Prédicats « toutes solutions »

setof/3 résultat trié (fail si pas de solution)

bagof/3 résultat tel que le backtrack (fail si pas de

solution)

findall/3 résultat tel que le backtrack ([] si pas de

solution)

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

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

setof(X, member(X/Y, [a/1, b/2]), L --> L=[b] Y=1 ;

(120)

3. Modifications de la base

Besoin : résistance au backtrack

 Ajout dans la base

assert/1asserta/1assertz/1

 Retrait dans la base

retract/1retractall/1

(121)

4. Indexation de clause

 Les clauses Prolog sont rangées dans une

hashtable. Elles sont indexées par le foncteur

et l’arité de leur premier argument

 Pour écrire des programmes plus efficaces,

mettre en tête l’argument le plus discriminant.

(122)

1. Cours

2. Travaux pratiques 3. A quoi ça sert ?

(123)

Bilan du cours

 Rappels de logique

Comment programmer avec la logique

Le langage PROLOG

Subtilités du langage

(124)

Bilan des TP

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

écriture rapide de fonctions sur les listesécriture rapide de petits outils

TP-3: Résolution d’énigmes logiques/de réflexion

tester des idées,

résoudre des problèmes non triviaux

TP-4: Écriture d’un système expert complet

4 heures pour un système complet, convivial et extensibleà comparer avec 50h en Pascal …

(125)

PROLOG : à quoi ça sert ?

 Principal langage de l’Intelligence Artificielle

Systèmes experts

– cf. TP

Traitement du langage naturel

– cf. GINA

Faire intervenir le raisonnement …

(126)

PROLOG pour l’Industrie

 Programmation par Contraintes

point de rencontre de diverses disciplines

– programmation logique (et IA au sens large)

– recherche opérationnelle (graphes, prog. Linéaire, …) – analyse numérique

Pour résoudre des problèmes combinatoires complexes

– gestion de ressources (humaines ou non), – réseaux télécoms, …

Technologie française en plein boom !

– ILOG SA, Cosytec (systèmes de PPC)

– Bouygues SA, Bouygues Telecom, France Telecom R&D, Air France, DGA, SNCF, …

(127)

PROLOG dans l’Industrie

 Utilisé pour

prototyper très rapidement,tester des idées …

Mais aussi pour développer des applications

Dassault Électronique

ECRC (Centre de recherche commun Bull, Siemens)

Références

Documents relatifs

[r]

Par la méthode des moindres carrés, à l’aide de la calaulatrice et à l’unité près on obtient l’équation : y = 140x + 4873.. Pour tracer la droite il suffit de

Exercice 4: On a relevé la nationalité des vainqueurs des 85 premiers Tours de France cyclistes entre 1903 et 1998 .La tableau ci-dessous donne le nombre de victoires par

DÉMONSTRATION D'UNE FORMULE QUI DONNE, SOUS FORME EXPLICITE, LA RÉSULTANTE DE PLUSIEURS ÉQUATIONS ALGÉBRIQUES;.. PAR M. Considérons le déterminant..

Donner une formule normale disjonctive du connecteur d´ efini en

Théorie des distributions (suite)1. Limite

Existence d’une détermination holomorphe du logarithme dans un Ω comme ci- dessus.. Logarithme principal (ou détermination principale du logarithme) pour la

Pour déterminer les équilibres en stratégies mixtes, remarquons d’abord qu’il n’y a pas d’équilibre dans lequel un joueur joue une stra- tégie pure et l’autre joue