Licence Informatique

Module Théories et Modèles pour l'Informatique II


Option Programmation logique en Prolog

Philippe Collard


Modalités

TD1 : Programmation Déclarative

TD 2 : Fonctionnement du moteur Prolog

TD 3 : Contrôle du moteur Prolog

TD 4 : Application aux Systèmes Experts

 


Modalités


But 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

 

 

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

 

 

Durée

§         5 cours (2h)

§         5 TDM (2h)

 

 

Contrôle des connaissances

§         60% l'examen final

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

 

Haut du document


Travaux Dirigés 1 : Programmation Déclarative


Implémentation de PROLOG SWI-Prolog

Documentation http://www710.univ-lyon1.fr/~nguin/IA/swi-prolog.pdf

Environnement intégré sous Windows SWI-Prolog-Editor

 

Exercice 1 : un univers de boites

On considère un univers composé 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ées

2.      Répertorier et définir les deux relations qui existent entre ces entités

 

On considère la configuration suivante :

 


 

 


  1. Déclarer la situation qui correspond à cette configuration

 

La déclaration de cette situation constitue un programme Prolog

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

 

Ce programme est uniquement constitué de faits (affirmations)

Les entités sont représentées par des atomes

q       Les relations sont représentées par des prédicats

q       Un prédicat est caractérisé par son nom et son arité ; on note est_posee_sur/2

q       On regroupe les déclarations relatives à une même relation ; on obtient ainsi une procédure Prolog (paquet de clauses)

 

  1. Répondre aux questions suivantes :

q       Qui est posée sur la boite a ?

q       Qui est posée sur le boite e ?

q       Sur qui est posée la boite c ?

q       Qui est posée dans la grande boite ?

 

  1. Pour simplifier notre univers, on suppose que l’on peut poser au plus une boite sur une autre boite et on veut savoir si une boite est prise. Exprimer par une phrase la relation est_prise/1

 

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

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 (utiliser une variable anonyme _)

 

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

 


  1. Quelles sont les boites prises ? Expliquer pourquoi Prolog répond que le sol est pris et proposer une solution pour éviter cela.

 

  1. On considère la nouvelle configuration suivante :

 

 

 

 

 

 

 

 

 

 

 

 

 


a)      Modifier en conséquence le code du programme

 

b)      Poser les questions suivantes en Prolog :

a.       a est-elle une boite ?

b.      a est-elle prise ?

c.       qui est posé sur a ?

d.      sur qui a est-il posé ?

e.       dans quoi a est-il ?

 

c)      Interpréter les questions Prolog suivantes :

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

 

 

8.      Définir la procédure Prolog est_dans/2

 

% Regle 1

est_dans(X,Y) :-

  est_posee_dans(X,Y).

 

% Regle 2

est_dans(X,Y) :- …

 

% Regle 3

est_dans(X,Y) :- …

  

 

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

 

9.      Poser et interpréter les questions suivantes :

 

?- est_dans(X , bm).

 

?- est_dans(X , gb).

 

?- est_dans(b , X).

 

 

10.   L’ordre des règles dans la procédure est_dans a-t-il une influence sur les réponses ?

 

11.   L’ordre des clauses dans une même règle a-t-il une influence sur les réponses ?

 

 


Exercice 2 : une affaire de famille

Voici un extrait de la généalogie de la reine Victoria. On suppose que le prénom permet d’identifier sans ambiguïté un individu et que le sexe peut être déterminé par le prénom.

Prolog victoria.png

 

  1. Dessiner l’arbre généalogique de cette famille

 

  1. Identifier les entités

 

  1. Définir les relations parent/2 et sexe/2

Interpréter les questions :

?- parent(maurice , X).

?- parent(X , juan).

?- parent(beatrice , albert2).

?- parent(albert1 , albert2).

?- parent(X , Y).

?- sexe(maurice , X).

?- sexe(X , f).

 

  1. Définir la relation mere/2

 

  1. Définir la relation pere/2

 

  1. Définir la relation couple/2 (deux personnes ayant des enfants)

 

  1. Définir les deux relations frere/2 et  soeur/2

 

  1. Définir la relation frere_ou_soeur/2

 

  1. Définir la relation grand_mere/2

 

  1. Définir la relation grand_pere/2

 

  1. Définir la relation grand_parent/2

 

  1. Définir la relation ascendant/2 et interpréter les questions :

?- ascendant(juan , X).

?- ascendant(X ,juan).