PROLOG
(PROgrammer en LOGique)
1- Vision synthétique
Programmation … selon le modèle
Progr. … Progr. Objet
Procédurale
Manipulation de
Symboles et de Structures
Lambda
Progr. Logique
Calcul
Symbolique des Prédicats
Progr.
Fonctionnelle Progr. En
Logique
Progr.
Progr. LISP
PROLOG
Introduction
• Programmation Symbolique
• Programmation en Logique (la déduction)
• Programmation par pattern-matching
• Programmation interactive (comme Lisp)
– Un Programme Prolog est une Base de Connaissance
– L’utilisateur pose des questions/requêtes (sur la BC) et
Prolog s’efforce de répondre (en effectuant des
inférences)
Background: Vue logique d’un Système Intelligent
Catégorisation
Ontologie & Raisonnement
Classification
Base de Résolution
Connaissance Jeu
de Problème
Opérations Interprétation
Conceptuelles Apprentissage &
Compréhension
Action,
Comportement Communication &
& Langage Naturel
Plannification
Prolog & l’Intelligence Artificielle
Système Intelligent à base de
règles/productions
Résolution de
Problèmes & Jeux Planification
Logique &
Raisonnement Traitement du
Base de Connaissance Langage Naturel
& Raisonnement
PROLOG
Introduction
• Plusieurs problèmes en Intelligence Artificielle
n’ont pas de solution algorithmique;
• On a des connaissances sur le problème/domaine et
des possibilités d’inférence ou de comportement;
• Et on doit avoir un système d’inférence/résolution
de problèmes qui doit explorer et trouver lui-même
une solution à partir des connaissances et des
possibilités offertes
PROLOG
• Un programme Prolog est une Base de
Connaissance (des faits et des règles)
– Le programmeur formule sa connaissance du domaine,
et non une solution/algorithme à un problème
particulier
• L’interpréteur Prolog est un moteur d’inférence
(inférer des connaissances à partir des
connaissances existantes)
• => Prolog est radicalement différent des autres LP
Prolog: Programmer en Logique des
Prédicats - Rappel
• Prolog est fondé sur la logique des prédicats.
• Un Programme Prolog est constitué de faits et/ou
de règles d’inférence (P -> Q)
• Un prédicat est une structure: identifiant du
prédicat suivi de ses arguments.
• Exemples: Ident de Constante =
valeur
personne(hamid, 20, etudiant).
personne(rachid, 34, enseignant).
homme(rachid). Ident de Variable;
grandPere(X, Y). maj.
Attention
• Implication logique:
P -> Q.
p1 et p2 et p3 -> Q.
En Prolog:
Q :- p1, p2, p3.
– Un fait est représenté par un (1 seul) prédicat. Exemple:
pere(ismael, fatima).
– Une règle: Conclusion :- Condition. Exemple:
grand_pere(X, Y) :- pere(X, Z), pere(Z, Y).
grand_pere(X, Y) :- pere(X, Z), mere(Z, Y).
• La partie Conclusion d’une règle (on parle aussi de « tête d’une règle ») est
représentée par un (1 seul) prédicat.
• Le « si » de la règle est représentée par « :- » (le ‘deux points’ suivi du tiret
du 6)
• La partie Condition d’une règle (on parle aussi de la « queue d’une règle »)
est représentée par une formule/composition de prédicats.
• Une condition/formule avec 0 prédicat => C’est le cas d’un fait.
• Une condition/formule avec 1 ou + prédicats (avec des opérateurs logiques:
conjonction représentée par ‘,’ , la disjonction (‘;’ ex: (homme(rachid) ;
femme(rachid)) ), la négation (‘\+’ ex: \+(mortel(farid)) ), etc.
– Une question est représentée par une formule/composition de
prédicats (comme la queue d’une règle).
– Fait, règle et question se terminent par un point.
Programme Prolog
pere(hamid, khalid).
pere(hamid, hicham).
pere(kadour, hamid).
pere(ismael, fatima).
mere(fatima, khalid).
mere(khadija, karima).
grand_pere(X, Y) :- pere(X, Z), pere(Z, Y).
grand_pere(X, Y) :- pere(X, Z), mere(Z, Y).
Un Programme Prolog (suite)
• Des paquets: Un programme Prolog est organisé
en paquets
– Un paquet est un ensemble de faits et/ou de règles
fournissant les façons possibles d’inférer la vérité d’un
prédicat/terme
– Les membres d’un paquet (faits ou règles) ont la même
signature:
• Signature d’un prédicat: ident du prédicat/nombre des
arguments; Ex: pere(hamid, rachid) : pere/2
• La signature d’un fait = la signature de son prédicat
• La signature d’une règle = la signature de sa tête (qui est un
prédicat)
• Dans l’exemple précédent:
– Le programme est constitué de 3 paquets:
pere/2, mere/2 et grand_pere/2
Exemple 1
mortel(X) :- homme(X).
homme(socrate).
====================
? mortel(socrate).
… réponse
? mortel(hamid).
… réponse
Exemple 1bis
mortel(X) :- homme(X).
homme(X) :- marocain(X).
marocain(socrate).
marocain(farid).
====================
? mortel(socrate).
… réponse
? mortel(hamid).
… réponse
Exemple 2
pere(hamid, khalid).
pere(hamid, hicham).
pere(kadour, hamid).
pere(ismael, fatima).
mere(fatima, khalid).
mere(khadija, karima).
grand_pere(X, Y) :- pere(X, Z), pere(Z, Y).
grand_pere(A, B) :- pere(A, Z), mere(Z, B).
=====================================
? grand_pere(hamid, khalid).
… réponse
? grand_pere(ismael, khalid).
…réponse
? grand_pere(x, khalid).
Représentation des connaissances
• Comment formuler les connaissances en
prédicats, règles, paquets et programme
Prolog
Exemples
• « hamid est un homme »
homme(hamid)
• « hamid est un marocain »
marocain(hamid)
• « hamid est le frère de hicham »
frere(hicham, hamid)
• « Tous les marocains sont gentils »
gentil(X) :- marocain(X).
Domaines d’application de Prolog
• Prolog est approprié lorsque la Connaissance est
formulable en un ensemble de faits et de règles
– Logique et Raisonnement - Démonstrateur de théorème
– Résolution (automatique) de Problèmes
– Les Systèmes Experts (Expertise formulée en
BC/Règles)
– Les Jeux
– Traitement du Langage Naturel (Grammaire)
– Planification
– BD avancées (déductives)
– Etc.