licence informatique module théories et modèles pour l'informatique ii option programmation...

29
Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard http://deptinfo.unice.fr/~pc [email protected]

Upload: adelphe-lebeau

Post on 03-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Licence InformatiqueModule Théories et Modèles pour

l'Informatique II

OptionProgrammation logique en Prolog

Philippe Collardhttp://deptinfo.unice.fr/~pc

[email protected]

Page 2: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Objectifs du cours

• Initiation à la programmation en logique : application de certaines notions vues en cours de logique

• Découverte de la programmation en Prolog : utilisation d'exemples liés à l'intelligence artificielle

Page 3: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Bibliographie • F. Giannesini, H. Kanoui, R. Pasero et M. Van Caneghem,

Prolog, InterEditions, 1985

• Bratko, Programmation en Prolog pour l'intelligence artificielle, InterEditions, 1988

• L. Sterling, E. Shapiro, L'art de Prolog, Ed. Masson, 1990

• P. Collard, Programmation déclarative et impérative en Prolog, Ed. Masson, 1992

Page 4: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Durée / Contrôle des connaissances

• 5 cours (2h)

• 5 TDM (2h)

• 60% l'examen final

• 40% la note obtenue en TDM pondérée par la note de présence et de participation

Page 5: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Programmation Déclarative

Un univers de boites• Une boite est posée sur le sol ou dans une autre

boite, ou encore sur une autre boite• On dispose d’une grande boite, d’une boite de

taille moyenne et de cinq petites boites 1.     Identifier les huit entités manipulées2.     Répertorier et définir les deux relations qui

existent entre ces entités

Page 6: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Configuration 1

a

c

e d

b

Page 7: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Déclarer la configuration 1

est_posee_dans(a , gb).est_posee_dans(d , bm).est_posee_dans(e , gb). est_posee_sur(b , d).est_posee_sur(c , a).est_posee_sur(gb , sol).est_posee_sur(bm , sol).

Page 8: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Déclarations = Programme Prolog

• Ce programme est uniquement constitué de faits (affirmations)

• Les entités sont représentées par des atomes• Les relations sont représentées par des prédicats • Un prédicat est caractérisé par son nom et son

arité ; on note est_posee_sur/2• On regroupe les déclarations relatives à une même

relation ; on obtient ainsi une procédure Prolog (paquet de clauses)

Page 9: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Répondre aux questions

• Qui est posée sur la boite a ?

• Qui est posée sur le boite e ?

• Sur qui est posée la boite c ?

• Qui est posée dans la grande boite ?

Page 10: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Poser une question en Prolog

?- est_posee_sur(X , a).X = c ; ?- est_posee_sur(X , e).no ?- est_posee_sur(c , X).X = a ; ?- est_posee_dans(X , gb).X = a ;X = e ;

Page 11: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Une boite est-elle prise ?

On suppose que l’on peut poser au plus une boite sur une autre boite

La relation est_prise/1 s’exprime en Prolog par la règle

est_prise(X) :- est_posee_sur(Y,X). Une règle Prolog est composée d’une tête et d’une

queue séparées par le symbole :-

Le symbole :- doit se lire comme un si

Page 12: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Règles:

B :- A. ¬AvB (nonA ou B)

B :- A1,A2. ¬(A1.A2)vB = ¬A1v¬A1vB

Fait:

B. B exactement un littéral positif

Question (but):

?-A. ¬A que des littéraux négatifs

Prolog versus Clause de Horn

Page 13: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

• On appelle clause de Horn toute clause ayant au plus un littéral positifB, ¬A, ¬Av¬C, ¬Av¬CvB sont des clauses de Horn mais AvB , ¬Av¬BvCvD n'en sont pas

• On appelle fait toute clause comprenant exactement un littéral positifpar exemple B

• On appelle but toute clause n'ayant que des littéraux négatifspar exemple ¬A , ¬A1v¬A2

Clause de Horn

Page 14: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Variable anonyme

est_prise(X) :- est_posee_sur(Y,X).

La variable Y qui apparaît dans la queue de la règle n’est pas référencée dans la tête

il est donc inutile de la nommer

On peut alors utiliser une variable anonyme _ est_prise(X) :- est_posee_sur(_,X).

Page 15: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Quelles sont les boites prises ?

?- est_prise(X).X = d ;X = a ;X = sol ;X = sol ;

• Expliquer pourquoi Prolog répond que le sol est pris

• Proposer une solution pour éviter cela

Page 16: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Quelles sont les boites prises ?

boite(a).boite(b).boite(c).boite(d).boite(e).boite(gb).boite(bm). est_prise(X) :- boite(X) , est_posee_sur(_,X).

Page 17: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Règle est_prise/1

• La procédure boite/1 définit en extension le concept de boite

 • La règle est_prise/1 exprime qu’une entité

X est prise– si c’est une boite– et si il existe une entité qui est posée sur X

• la virgule doit donc être lue comme et si

Page 18: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Configuration 2

a

c

eb

d

Page 19: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Modifier en conséquence le code du programme

Poser les questions suivantes en Prolog :– a est-elle une boite ?

– a est-elle prise ?

– qui est posé sur a ?

– sur qui a est-il posé ?

– dans quoi a est-il ?

Page 20: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Interpréter les questions Prolog

?- est_posee_sur(X,Y).

?- est_posee_sur(X,_).

?- est_posee_sur(_,Y).

?- est_posee_dans(X,Y).

?- est_posee_dans(X,_).

?- est_posee_dans(_,Y).

Page 21: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

On s’intéresse au contenu des boites

% Regle 1est_dans(X,Y) :- est_posee_dans(X,Y). % Regle 2 est_dans(X,Y) :- … % Regle 3est_dans(X,Y) :- …

Page 22: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Procédure est_dans/2

est_dans(X,Y) :- est_posee_dans(X,Y). est_dans(X,Y) :- est_posee_sur(X,Z) , est_dans(Z,Y). est_dans(X,Y) :- est_posee_dans(Z,Y) , est_dans(X,Z).

Page 23: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Cette procédure est composée de trois règles

• Le symbole :- de la règle 1 correspond à un si

• Le symbole :- de la règle 2 correspond à un ou si

• Le symbole :- de la règle 3 correspond à un ou si

Page 24: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Interpréter et répondre aux questions

?- est_dans(X , bm).

 

?- est_dans(X , gb).

 

?- est_dans(b , X).

Page 25: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Une affaire de famille …

Anna, Jean, jacques, Julien et Paule sont de la même famille

Le prénom permet d’identifier sans ambiguïté un individu

Le sexe peut être déterminé par le prénom

Jacques et Jean sont des enfants de Julien.

Jean est enfant de Anna. Paule est enfant de Jean.

Stéphanie est enfant de Jacques

Page 26: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Une affaire de famille …

• Dessiner l’arbre généalogique de cette famille– Le prénom permet d’identifier sans ambiguïté un

individu

• Identifier les entités– Le sexe peut être déterminé par le prénom

Page 27: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Des entités et des relations

• Entitésjacques, jean, julien, anna, paule, stéphanie,

homme, femme

• Définir la relation parent/2

• Définir la relation sexe/2

Page 28: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Interpréter et répondre aux questions

?- parent(julien , X).

?- parent(X , jean).

?- parent(julien , jean).

?- parent(jean , julien).

?- parent(X , Y).

?- sexe(julien , X).

?- sexe(X , femme).

Page 29: Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard

Définir les relations

mere/2 pere/2 grand_mere/2 grand_pere/2 grand_parent/2