Académique Documents
Professionnel Documents
Culture Documents
Programmation logique
Programmation logique
Objectifs de ce module
En suivant ce module vous allez:
Aborder la programmation logique, dclarative.
Programmation logique
Plan du module
Voici les parties que nous allons aborder:
Elments de base
Rcursivit et listes
Applications
12-Dec-11
Elments de base
Plan de la partie
Voici les chapitres que nous allons aborder:
Gnralits Structure du programme Les termes Larithmtique Les entrs/sorties Utilisation de SWI Prolog
Elments de base
Gnralits PROLOG (PROgrammation en LOGique) Langage dclaratif fond sur la logique du premier ordre (calcul des prdicats)
- Alain Colmerauer Marseille -1972. - W.F.Clocksin and C.S.Mellish: programming in Prolog 1981
Elments de base
Gnralits
- sa puissance dductive - lutilisation des variables - au mcanisme de la remonte qui permet de chercher toutes les solutions existantes.
12-Dec-11
Elments de base
Gnralits
Ses applications pratiques sont nombreuses. Il peut :
contrler des processus industriels, traduire un langage en un autre, construire des systmes expert, dmontrer des thormes, etc
Elments de base
Structure du programme
Un programme est constitu de clauses: FAITS et REGLES qui sont dclars dans la BASE DE DONNEES (ou base de connaissances)
Elments de base
Structure du programme
LES FAITS Un fait est une vrit non conditionne.
Exemples : blanche (maison). --> (la maison est blanche) aime (jean, prolog). --> (Jean aime le prolog) voiture (ford, rouge, 3, 5.000). --> (la voiture est une ford rouge de trois ans et cote 5.000 euros)
12-Dec-11
Elments de base
Structure du programme
LES REGLES Une rgle est une vrit conditionne. Rgle une seule condition : La rgle est forme d'une tte (la conclusion) et d'un corps (la condition). La conclusion est prouve si la condition est vraie. Exemple :
Elments de base
Structure du programme
Rgles plusieurs conditions Les conditions sont lies par la conjonction and : relation (objet, objet) if relation (objet, objet) and relation (objet, objet) and relation (objet, objet).
Exemple :
Elments de base
Structure du programme
Pour prouver une condition on cherche lunifier* - soit avec un fait de la base de donnes - soit avec une tte de rgle (chanage arrire)**
12-Dec-11
Elments de base
Structure du programme
Plusieurs rgles ayant la mme conclusion (paquet de clauses). Exemple: achte(jean, voiture) :- hrite(jean, fortune). achte(jean, voiture) :- gagne(jean, loterie).
Cela peut scrire aussi: achte(jean voiture) :- hrite(jean, fortune) OU gagne(jean, loterie).
Elments de base
Structure du programme
Ensemble de clauses qui ont la mme conclusion (la mme tte de clause) : a (X) : - b (X,Y). a (X) : - c (X), e (X). a (X) : - f (X,S).
Elments de base
Structure du programme
Paquet de clauses (suite) Les clauses ayant la mme tte sont lies par or Les conditions d'une clause sont lies par and Chaque clause est une solution du problme. L'ordre des clauses est sans importance. Prolog les traite une une dans l'ordre d'criture. Si une seule est vraie --> VRAI Si toutes sont fausses --> FAUX
12-Dec-11
Elments de base
Structure du programme
Conventions d'criture. La programmation en Prolog implique les normes suivantes :
Les clauses de mme prdicat sont groupes ensemble Les clauses sont parcourues de haut en bas Toute clause (fait ou rgle) se termine par un point Dans lcriture courante on prfre les notations: or ; and , if :-
Elments de base
Les termes
Prolog comprend quatre types de termes:
Elments de base
Les termes
Reprsentation arborescente des termes: termes
termes simples termes complexes
variables
constantes
atomes
nombres
12-Dec-11
Elments de base
Les termes
Les caractres qui composent les termes sont:
Elments de base
Les termes
Les atomes : suite continue de caractres qui commencent par une minuscule (pas de blancs) suite de caractres entre apostrophes (si les symboles contiennent des blancs ou des majuscules au dbut). suite de caractres spciaux
lve ticket_de_mtro datomes Exemples ticket de mtro Jean est sportif @+:>:-
Elments de base
Les termes
Les nombres Entiers (tout nombre entier) Flottants (les nombres dcimaux)
Ce sont surtout les entiers qui vont tre utiliss par la suite.
12-Dec-11
Elments de base
Les termes
Les variables: Suite de caractres commenant par - une majuscule - par un tiret-bas (underscore)
Elments de base
Les termes
Les termes complexes (structures) se composent: - dun foncteur (le prdicat en logique) - dun ou plusieurs arguments - le nombre darguments = arit
Elments de base
Les termes
Termes complexes (imbriqus): Exemple: possde(X, comptebancaire(5000)). possde = foncteur deux arguments: - la variable X - le terme complexe comptebancaire(5000) comptebancaire = foncteur un argument
12-Dec-11
Elments de base
Les termes
Prdicats de comparaison de termes: == et \== Exemples: ?- a == a. ?- a == b. ?- a \== b. ?- 5 == 5. Yes No Yes Yes No Yes
%nvalue pas ses arguments
Elments de base
Larithmtique
En Prolog les symboles: +, -, *, /, mod
ne permettent pas deffectuer des calculs. Ce sont des foncteurs avec des arguments. Ex:
?- X = +(3, 5).
Elments de base
Larithmtique
Pour calculer il faut utiliser loprateur is *
12-Dec-11
Elments de base
Larithmtique
Prolog connat la priorit des oprations: ?- X is (3 + 5) + 4. ?- X is 3 + 5 * 4. 12 23 12
?- X is (3 + 5) + 4 * (9 - 6) / 3.
Elments de base
Larithmtique
Les oprateurs de comparaison dentiers sont:
infrieur infrieur ou gal suprieur suprieur ou gal (yes si galit) (yes si diffrents)
Elments de base
Larithmtique
Exemple de comparaisons: ?- 3+2 < 9. ?- 2+2=:=1+3 ?- 5 =< 5. ?- 2 =\= 9. Yes Yes* Yes Yes No
10
12-Dec-11
Elments de base
Larithmtique
Tableau des diffrents prdicats deux arguments = prdicat dunification (unifie ses arguments)
\= ==
prdicat didentit (compare tous les types de termes mais nvalue pas ses arguments) \== =:= =/= la ngation du prdicat didentit
prdicat dgalit arithmtique (russit si les arguments sont valus des entiers identiques) prdicat dingalit arithmtique
Elments de base
?- X=a, write(X).
a ab a a b b
(un espace blanc) (six espaces blancs) (saut de ligne)
Elments de base
Exemples: ?- writef( %w est le pre de %w , [jules, jim]). Affiche: jules est le pre de jim ?- writef('%w\n%w%5c', [tableau,a, b]). Affiche: tableau a b
11
12-Dec-11
Elments de base
Elments de base
Aprs le prompt ?- on peut poser des questions Toutes les questions finissent par un point. Pour obtenir toutes les rponses (suite la remonte), tapez ENTER ou bien ; . Tous les prdicats commencent avec une minuscule.
Elments de base
?- trace. active la commande pas pas sur le programme qui va tre lanc ?- trace(nom du prdicat). ?- notrace. ?- help. sapplique sur le prdicat
?- help(sujet).
12
12-Dec-11
Elments de base
Programmation logique
Plan de la partie
Voici les chapitres que nous allons aborder: Lunification Interrogation de la base de donnes La remonte Les prdfinis FAIL et CUT Paquet de clauses La ngation Bases de donnes dynamiques Le mode TRACE Le prdfini FINDALL
13
12-Dec-11
Lunification Lutilisateur pose des QUESTIONS Prolog RAISONNE En cherchant unifier les questions aux donnes de la base de donnes (faits et rgles)
Lunification
Les rgles de lunification: - Une variable libre est unifiable nimporte quel terme - Une constante (atome ou entier) est unifiable ellemme - Deux termes complexes sont unifiables si: - mme foncteur - mme nombre darguments (mme arit) - les arguments correspondants sont unifiables
Lunification
Exemples dunification ami(jean, X) sunifie avec ami(jean, tom) en liant X = tom ami(jean, tom) ne sunifie pas avec ami(tom, jean) ami(jean, X) ne sunifie pas avec ami(X, tom) (la mme variable ne peut pas tre lie deux valeurs diffrentes) f(a(4), plus(3,9)) sunifie avec f(X,Y) et retourne: X = a(4) et Y = plus(3,9) ?- a(b, X) = a(b, c(Y, e)), Y = hello. X = c(hello, e) Y = hello
14
12-Dec-11
Lunification
Le prdicat = est utilis pour lunification Cest un prdicat deux arguments: =/2 (arit 2) qui teste si ses deux arguments sunifient. Exemples: ?- =(a, a). ?- a = a. ?- 5 = 5. ?- 5 = 5. Yes Yes Yes No* Yes** (un atome sunifie lui mme) (expression infixe courante)
?- tom = tom.
Lunification
Exemples dunification (suite)
?- X = Y. ?- toto = X.
Interrogation de la BDD
Questions (buts) lmentaires
Structure de la question: mme syntaxe qu'un fait. Prolog cherche unifier la question avec un fait. Rponse : yes: l'unification a lieu (mme prdicat et mmes arguments dans le mme ordre). no : l'unification n'a pas lieu.
15
12-Dec-11
Interrogation de la BDD
Unification avec un fait (les faits de la diapo 11): -? aime(jean, prolog). Prolog rpond: yes % jean aime-t-il le prolog?
-? blanche(maison).
-> yes
-? blanche(voiture). -> no
Interrogation de la BDD
Unification avec une tte de rgle:
gagne(jean, loterie). achte(jean, voiture) :- gagne(jean, loterie). -? achte(jean, voiture). yes % la question % la rponse
Interrogation de la BDD
Rgle plusieurs conditions
pre(jean, paul). pre(paul, yves). grand-pre(jean, yves) :pre(jean, paul), pre(paul, yves).
16
12-Dec-11
Interrogation de la BDD
Questions (buts) multiples
Prolog cherche unifier successivement chacun des buts avec un des faits de la base de faits. Les buts sont traits de gauche droite. La base de faits est explore de haut en bas.
Interrogation de la BDD
Exemple de questions multiples :
clauses: a_crit (hugo, ruy-blas). a_crit (hugo, hernani). questions: ?a_crit(hugo, hernani), a_crit (hugo, ruy-blas).
Chaque but est unifi avec une des clauses Rponse : yes
Interrogation de la BDD
Questions avec des variables
Rponse: X=hernani
X=ruy-blas
17
12-Dec-11
Interrogation de la BDD
Questions multiples et utilisation de variables.
Exemple :
clauses: a_crit (hugo, hernani). a_crit (hugo, ruy-blas). Question: ?a_crit (X, hernani), a_crit (X, ruy-blas).
Interrogation de la BDD
Dtail sur l'unification. Premire tape : Prolog cherche instancier X de la premire question : a_crit (X, hernani) --> il lie X hugo. Deuxime tape : Prolog remonte avec X=hugo et cherche un fait qui s'unifie avec : a_crit (hugo, ruy-blas). il trouve --> affiche : X = hugo
La remonte
Procd de recherche par retour en arrire (backtracking) :
clauses ami (jacques, yves). ami (jean, yves). ami (pierre, luc). ami (pierre, tom). ami (pierre, yves). ami (jean, tom). ami (jean, serge). goal ?- ami (jean, X), ami (pierre, X).
18
12-Dec-11
La remonte
X est lie yves (premire instanciation) Prolog cherche : ami (pierre, yves), il trouve et affiche X = yves X est dlie de yves et la recherche recommence : remonte (1) X est lie tom (deuxime instanciation) Prolog cherche : ami (pierre, tom), il trouve et affiche X = tom X est dlie de tom et nouvelle recherche : remonte (2) X est lie serge (troisime instanciation) Prolog cherche : ami,(pierre, serge), ne trouve pas --> STOP
La remonte
La remonte
19
12-Dec-11
Raisonnement PROLOG
Comment raisonne PROLOG :
Afin de rpondre la question pose (satisfaire le but), Prolog raisonne sur les faits et les rgles de la base de donnes.
Il cherche unifier la question (le but) avec un fait ou une tte de rgle (chanage arrire)
Raisonnement PROLOG
Le principe du chanage arrire :
Il cherche la rgle dont la tte est compatible avec le but et cherche prouver les conditions de cette rgle.
Prolog utilise la remonte , savoir, la reprise de la recherche dune solution, chaque fois quun succs ou quun blocage a eu lieu, jusqu puisement des possibilits.
Raisonnement PROLOG
Les buts dune suite sont satisfaits de gauche droite: Si le but est form de plusieurs questions (conjonction de buts), Prolog sattaque au but le plus gauche de la suite, puis il passe au suivant, etc..
Les clauses dun prdicat sont testes de haut en bas: Selon lordre dapparition dans le programme, Prolog cherche un fait de la BDD ayant le mme prdicat que le but prouver, en vue de lunification. Sil nen trouve pas, il sattaque aux rgles et cherche unifier le but avec la tte de la rgle.
20
12-Dec-11
Les prdfinis FAIL et CUT fail Prdicat prdfini qui signifie l'chec d'un but et force la remonte. Utilis lorsque l'on veut connatre toutes les solutions d'un problme et que la remonte n'agit pas.
Rponse: jean est le pre de yves (une seule rponse car la remonte nagit pas)
21
12-Dec-11
cut
- Le coupe-choix est un prdicat prdfini (not "!") qui empche la remonte. - Utilis lorsqu'on est intress seulement dans certaines solutions du problme (pas toutes). - Evite des explorations inutiles. - Permet un contrle plus fin sur le droulement d'un programme.
si dans le programme de la diapo 63 on ne veut que la premire solution, on crit : pre (jean, yves) :- ! .
22
12-Dec-11
Paquet de clauses
Action du CUT dans un paquet de clauses Soient les clauses (sans CUT): a(X,Y) :- b(X), e(Y). a(X,Y) :- c(X), e(Y). Et les faits: b(1). b(2). c(3). e(4).
Paquet de clauses
Mmes clauses (avec CUT): a(X,Y) :- b(X), !, e(Y). a(X,Y) :- c(X), e(Y). b(1). b(2). c(3). e(4).
Paquet de clauses
Laction du CUT dans un paquet de clauses: - l'action du CUT s'exerce seulement sur le prdicat qui le prcde.
- les instanciations faites pour les variables de ce prdicat sont fixes et ne sont pas remises en cause lors d'une remonte.
23
12-Dec-11
La ngation en Prolog
La ngation en Prolog
Soit le programme: courageux(jean). courageux(pierre). chtif(pierre). explorateur (X) :- courageux (X), not (chtif (X)). (un explorateur doit tre courageux et pas chtif) Le but: ?- explorateur(X). X=jean %qui est explorateur?
La ngation en Prolog
L'usage du NOT est soumis deux restrictions : 1. Le NOT ne peut intervenir que dans le corps d'une rgle et non pas dans sa tte. Exemple :
explorateur (X) :- courageux (X), not (chtif (X))
--> incorrect
24
12-Dec-11
La ngation en Prolog
2. Pour prouver une condition du type not( ) il faut que toutes les variables impliques dans la ngation soient lies (remplaces par des constantes).
Explication :soit le but : "explorateur (X)" (qui est explorateur ?) Prolog cherche une rgle dont la tte est compatible avec ce but (en chanage arrire) et trouve : explorateur (X) :- courageux (X), not (chtif (X)).
La ngation en Prolog
Il cherche prouver la premire condition de cette rgle (courageux (X)) ce qui l'amne lier X une valeur trouve dans la base de faits: courageux(jean). Lorsqu'il s'attaque "not (chtif (X))", la variable X est donc lie et il vrifie si chtif(jean) existe* Si la rgle avait t crite sous la forme : explorateur (X) :- not (chtif (X)), courageux (X). La premire condition prouver aurait t not (chtif (X)) dans laquelle X est libre ce qui empche de continuer.
La ngation en Prolog
25
12-Dec-11
ASSERT: insre un nouveau fait dans la BDD ASSERTA : insre un fait en tte des faits existants ASSERTZ : insre un fait en queue des faits existants. RETRACT : retranche un fait de la B.D.D.
On efface tous les pres avec ?- retract (pre (X, Z)). Ou bien: ?- retractall(pre(_, _)).
26
12-Dec-11
:- dynamic stocker/3.
%prdicat dynamique
?- calculer(3,4,X). X = 20
Mode TRACE
TRACE permet de suivre pas a pas le droulement du programme
?- trace.
Yes % on est en mode
trace
?- notrace.
% pour sortir de
trace
Le prdfini FINDALL
Le prdfini FINDALL (trouver tous) affiche la Liste des Objets qui satisfont le but Goal
Syntaxe:
27
12-Dec-11
Le prdfini FINDALL
Exemple:
qui (Jean Dupont, 23, rue de Svres, 34). qui (Anne Vigier, 7, Bd. Davout, 20). qui (Jules Durand, 6, rue Rollin, 25).
?-
_,
Age), Liste).
Rponse:
28