prolog - KelT Informatique

Transcription

prolog - KelT Informatique
PROLOG
ESGI 2011-2012
Enseignant : Nicolas Vidal

Début de cours :
◦ Brève interrogation sur le cours de la dernière
séance.

Cours :
◦ Apprentissage par l’exemple.
◦ Chaque notion est manipulée sur machine.

Travail personnel :
◦ Exercices pour la fois suivante.
Déroulement des scéances
Email :
[email protected]

Début de cours :
◦ Brève interrogation sur le cours de la dernière
séance.
Déroulement des scéances
Email :
[email protected]

Travail personnel :
◦ Exercices pour la fois suivante.
Correction des exercices …

Unification

Moteur de D’inférence de Prolog
◦ (algorithme de résolution)
Déroulement de la séance

Définition d’usage :
◦ Deux termes sont unifiables si ils sont
identiques ou s’ils contiennent des variables qui
peuvent être uniformément instanciées de telle
manière que les termes résultant soient égaux.

Symbole de l’unification :
◦=
Unification

Quelques exemples :
◦
◦
◦
◦
◦
◦
◦
◦
toto = toto.
toto = X.
toto = Toto.
X = Y.
pere(X) = pere(arthur).
pere(X) = pere(homme(barbu)).
toto(X,b) = toto(a,Y).
toto(X) = toto(titi(Y)).
Unification

Ecrivons ensemble une définition plus
précise:
 1- Si T1 et T2 sont des nombres ou des atomes, ils
sont unifiables si ils sont identiques.
 2- Si T1 est une variable, T1 et T2 sont unifiables si T1
est instantiable à T2
◦ Ou Si T2 est une variable, T2 et T1 sont unifiables si T2 est
instantiable à T1
 3- Si T1 et T2 sont des termes complexes, ils sont
unifiables si :
◦ Leurs functors sont identiques
◦ Ils possèdent le même nombre d’arguments
◦ Leurs arguments sont unifiables 2 à 2.
Unification

Exemples …
Retour sur les listes et les
requêtes …

Algorithme de résolution de Prolog
◦ Retour sur les bases de connaissances du
premier cours …
◦ Intuition de l’algorithme
◦ Connaissez-vous l’Iliade ?
 Ecrivons la base de connaissance responsable de
la guerre de Troie !
Proof Search

La guerre de Troie …
jaloux(X,Y).
Proof Search

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
Proof Search

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
Proof Search

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
Proof Search

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
aime(B,helene)
Proof Search

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
aime(B,helene)
B = menelas
Proof Search

La guerre de Troie …
◦ => menelas est jaloux de menelas !!!
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
aime(B,helene)
B = menelas
Proof Search

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
aime(B,helene)
B = menelas
Proof Search
B = paris

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
aime(B,helene)
B = menelas
Proof Search
B = paris

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
aime(B,helene)
B = menelas
Proof Search
B = paris

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
aime(B,helene)
B = menelas
Proof Search
B = paris

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
A = paris,
C = helene
aime(B,helene)
aime(B,helene).
B = menelas
Proof Search
B = paris

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
A = paris,
C = helene
aime(B,helene)
aime(B,helene).
B = menelas
Proof Search
B = paris

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
aime(B,helene)
B = menelas
Proof Search
B = paris
A = paris,
C = helene
aime(B,helene).
B = menelas

La guerre de Troie …
jaloux(X,Y).
X = A,
Y=B
aime(A,C),
aime(B,C).
A = menelas,
C = helene
aime(B,helene)
B = menelas
B = paris
Proof Search
A = paris,
C = helene
aime(B,helene).
B = menelas
B = paris

Exercices :
◦ Terminer les exercices de la planche 1 non
corrigés en cours (ex 3, 4, 5).
◦ Guerre de Troie
◦ Sub-Sudoku
Exercices

Fin des exercices de la planche 1 :
◦ Une fois chaque base de connaissances écrite
pour chaque exercice, dérouler l’algorithme de
résolution de Prolog (sous forme d’arbre de
résolution) sur un exemple de requête.
Exercices

Guerre de Troie
◦ Appliquer la modification suivante à la base de
connaissance vue en cours :
 Quelqu’un ne peut pas être jaloux de lui-même.
◦ Dérouler l’algorithme de résolution de Prolog
(sous forme d’arbre) sur les requêtes
suivantes:
 jaloux(menelas, helene).
 jaloux(X, X).
 jaloux(X, Y), X = paris.
Exercices

Sub-Sudoku
◦ Le but à terme de ce « projexercice » est de
réaliser un générateur/solveur de sudoku en
Prolog.
◦ Il s’agit ici de la première étape.
◦ Pour ceux qui ne connaissent pas :
 http://fr.wikipedia.org/wiki/Sudoku
◦ Pour l’instant nous allons nous intéresser à
générer des grilles valides.
◦ Une grille de sudoku est composée de 9 carrés
chacun se composant lui-même de 9 cases
contenant un chiffre entre 1 et 9.
Exercices

Sub-Sudoku
◦ Première étape : générer un de ces carrés.
◦ Travail :
 Ecrire un prédicat sub_sudoku/3 tel que :
◦ Chaque argument est une liste de trois éléments.
◦ Chaque élément de ces listes est un chiffre entre 1 et 9.
◦ Un chiffre ne peut être présent qu’une seule fois dans le
carré.
◦ Forcer le backtrack (appui sur ‘n’ lors d’une proposition
de solution) doit pouvoir permettre d’énumérer
successivement tous les carrés possibles.
Exercices

Sub-Sudoku
◦ Exemple d’utilisation :
 ?- sub_sudoku(L1,L2,L3).
L1 = [1,2,3],
L2 = [4,5,6],
L3 = [7,8,9]
Appui sur ‘n’
L1 = [1,2,3],
L2 = [4,5,6],
L3 = [7,9,8]
…
Exercices