La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Programmation en Logique FI

Présentations similaires


Présentation au sujet: "Programmation en Logique FI"— Transcription de la présentation:

1 Programmation en Logique FI 3 - 2002
Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

2 Organisation du module
Enseignement Cours/TD 50% TP sur machine 50% Langage support PROLOG Évaluations Micro-évaluation (TD noté) Contrôle continu (envoi du code à chaque fin de TP) TP noté en fin de module

3 Introduction

4 Classes de langage Langages impératifs Langages fonctionnels
séquencement des calculs spécifié contrôle total du flot d’exécution objets du langage diversifiés syntaxe riche (lourde :-)) exemples : Pascal, C, C+, C++, Java, … Langages fonctionnels tout est fonction syntaxe dépouillée base mathématique forte : -calcul contrôle délégué à l’interprète utilisation intensive de la récursivité exemples : Lisp, Scheme, Haskell, …

5 Une nouvelle classe PROgrammation en LOGique tout est logique
syntaxe simple et dépouillée base théorique : calcul des prédicats encore plus de contrôle donné à la machine récursion non déterminisme exemple : Prolog

6 Historique 1930 Calcul des prédicats (J. Herbrand)
1965 Principe de résolution (J. A. Robinson) 1970 Utiliser la logique comme langage de programmation clauses de Horn R. Kowalski Q-systèmes A. Colmerauer 1972 Premier interprète PROLOG (A. Colmerauer et P. Roussel) Université d’Aix-Marseille 1977 Premier compilateur PROLOG (D. H. D. Warren) Université d’Édimbourg 1980 Projet japonais de 5e génération 1990 PROLOG évolue vers la Programmation par Contraintes

7 Plan du cours Bases théoriques (rappels de logique formelle)
Calcul propositionnel Calcul des prédicats Le langage PROLOG PROLOG avancé

8 En TP, vous apprendrez à ... Utiliser PROLOG (premières séances)
Réaliser un système expert complet Résoudre automatiquement des énigmes logiques exprimées en langage naturel

9 1. Calcul propositionnel 2. Calcul des prédicats
Rappels de Logique 1. Calcul propositionnel 2. Calcul des prédicats

10 1. Calcul propositionnel
Comment écrire les formules ? Aspects syntaxiques Comment déterminer la valeur de vérité d’une formule ? Aspects sémantiques Comment démontrer de nouveaux résultats ? Aspects déductifs

11 Syntaxe d’une formule Règles de suppression des parenthèses Données
Calcul propositionnel Syntaxe d’une formule Données un ensemble P de variables propositionnelles P = { p, q, r, … } énoncés élémentaires un ensemble C de connecteurs C = {  ,  ,  ,  ,  } Formules p est une formule si p  P  (H) est une formule si H est une formule (H)  (K) est une formule si H et K sont des formules et si   C Règles de suppression des parenthèses

12 Sémantique d’une formule
Calcul propositionnel Sémantique d’une formule Logique bi-valuée faux (0) vrai (1) Notion d’interprétation donner une valeur de vérité à une variable extension à un opérateur extension à une formule

13 Tables de vérité : opérateurs
Calcul propositionnel Tables de vérité : opérateurs p p 1  0 1 1  0 1 1 1 0 0 0 1 0 1 1 1  0 1 1  0 1 1 1 1 0 1 1 0 0 1

14 Formules particulières
Calcul propositionnel Formules particulières Tautologies : formules toujours vraies La table de vérité ne contient que des 1 exemple : p   p p ( p) (p   p) 1 0 1 1 1  0 1 1 1 1

15 ? p q ¬ p ¬ q p  q ¬ ( p  q ) (¬ p  ¬ q) F 0 0 0 1 1 0 1 1 1 1 1 1
Calcul propositionnel ? p q ¬ p ¬ q p  q ¬ ( p  q ) (¬ p  ¬ q) F 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1  0 1 1 0 1 1 1  0 1 1 1 0 0 1  0 1 1

16 Catégories de formules
Calcul propositionnel Catégories de formules Tautologies : formules toujours vraies Formules inconsistantes formules toujours fausses la table de vérité ne contient que des 0 exemple : p   p Formules consistantes formules non toujours fausses

17 Formules particulières
Calcul propositionnel Formules particulières Formules tautologiquement équivalentes les tables de vérité sont les mêmes Condition nécessaire et suffisante : (F)  (H) est une tautologie (F)  (H)

18 Quelques équivalences utiles
Calcul propositionnel Quelques équivalences utiles lois de De Morgan Propriétés de  et  associativité distributivité (dans les 2 sens) éléments neutres (0 pour  et 1 pour ) éléments absorbants (1 pour  et 0 pour )

19 Calcul propositionnel
Formes normales But avoir une représentation uniforme des formules du calcul propositionnel limiter le nombre de connecteurs différents utilisés limiter l’allure des formules rencontrées

20 Calcul propositionnel
Formes normales Une formule F est dite sous forme normale disjonctive ssi F est une disjonction de conjonctions de variables propositionnelles et de leur négation Toute formule du calcul propositionnel est tautologiquement équivalente à une formule sous forme normale disjonctive Une formule F est dite sous forme normale conjonctive ssi F est une conjonction de disjonctions de variables propositionnelles et de leur négation Toute formule du calcul propositionnel est tautologiquement équivalente à une formule sous forme normale conjonctive

21 Aspects déductifs notion de conséquence logique
Calcul propositionnel Aspects déductifs notion de conséquence logique notion de démonstration notion de règles de déduction

22 Calcul propositionnel
Conséquence logique Soit A = {F1, …, Fn} un ensemble de n formules A G ssi (F1  …  Fn)  G Notion de réfutation démonstration par l’absurde A G ssi F1  …  Fn   G est inconsistante

23 Système formel Données
Calcul propositionnel Système formel Données un ensemble V de symboles un ensemble F de formules (F  V*) un ensemble A d’axiomes (A  F) un ensemble fini de règles de déduction Une démonstration dans un système formel S est une suite d’énoncés A1, … An telle que : pour tout i, Ai est un axiome de S ou une conséquence des énoncés précédents par application d’une des règles de déduction Un théorème de S est le dernier énoncé d’une démonstration

24 Énoncé déductible Soit J un ensemble de formules
Calcul propositionnel Énoncé déductible Soit J un ensemble de formules Un énoncé A est dit déductible sous les hypothèses J (noté J A) ssi il existe une suite finie A1, …, An d’énoncés telle que An = A pour tout i Ai est un axiome ou Ai  J ou Ai découle d’énoncés précédents par application d’une règle d’inférence

25 Quelques règles de déduction classiques
Calcul propositionnel Quelques règles de déduction classiques modus ponens p, p  q q modus tollens p q,  q  p syllogisme p q, q r p r

26 Propriétés d’un système formel
Calcul propositionnel Propriétés d’un système formel Un système formel est correct ssi si A alors A tout ce qui est démontrable est vrai Un système formel est complet ssi si A alors A tout ce qui est vrai est démontrable

27 Une autre règle d’inférence
Calcul propositionnel Une autre règle d’inférence Principe de résolution (Robinson) Définitions littéral positif ou négatif une clause est une disjonction de littéraux la résolvante de C1 = l  C’1 et de C2 = l  C’2 est C’1  C’2 Principe de résolution l  C’1 ,  l  C’2 réso C’1  C’2 le principe de résolution est valide le principe de résolution généralise les autres règles

28 Validité du principe de résolution
Calcul propositionnel Validité du principe de résolution Il faut montrer que : l  C’1 ,  l  C’2 C’1  C’2 ie (l  C’1)  ( l  C’2 )  (C’1  C’2 ) Il suffit de montrer que si (l  C’1)  ( l  C’2 ) vrai alors (C’1  C’2 ) n’est pas faux Deux cas se présentent l est vrai nécessairement C’2 vrai et donc (C’1  C’2 ) aussi  l est vrai nécessairement C’1 vrai et donc (C’1  C’2 ) aussi 0 0 0 1  0 1 1 1 1  0 1  0 1 QED

29 Propriétés du calcul propositionnel
Le calcul propositionnel muni du principe de résolution est correct et complet Un ensemble S de clauses est insatisfaisable ssi S reso  Démonstration : par l’absurde (réfutation) S C ssi S {C} reso  On peut toujours se ramener à une forme normale conjonctive (forme clausale) Rappel

30 Ce qu’il faut retenir Intérêt d’une forme normale
Calcul propositionnel Ce qu’il faut retenir Intérêt d’une forme normale Conséquence logique vs démonstration Principe de résolution Preuve par réfutation

31 2. Calcul des prédicats Comment écrire les formules ?
Aspects syntaxiques Comment déterminer la valeur de vérité d’une formule ? Aspects sémantiques Comment démontrer de nouveaux résultats ? Aspects déductifs

32 Limites du calcul propositionnel
Calcul des prédicats Limites du calcul propositionnel Modéliser Les chandelles sont faites pour éclairer Quelques chandelles éclairent très mal Quelques objets qui sont faits pour éclairer le font très mal Impossible

33 Une modélisation Les chandelles sont faites pour éclairer
Calcul des prédicats Une modélisation Les chandelles sont faites pour éclairer Quelques chandelles éclairent très mal Quelques objets qui sont faits pour éclairer le font très mal

34 Syntaxe des connecteurs (, , ,  et ) des quantificateurs ( et )
Calcul des prédicats Syntaxe des connecteurs (, , ,  et ) des quantificateurs ( et ) des variables (x,y, …) des relations (prédicats) (R, S, éclaire, …) des symboles de fonctions (f, g, …) les fonctions d’arité 0 sont appelées des constantes

35 Vocabulaire pas de valeur de vérité valeur de vérité Les termes
Calcul des prédicats Vocabulaire Les termes les variables et les constantes sont des termes f(t1, …, tn) est un terme si les ti sont des termes f est un symbole de fonction d’arité n Les atomes R(t1, …, tn) est un atome si R est un symbole de relation d’arité n pas de valeur de vérité valeur de vérité

36 Formules Un atome est une formule
Calcul des prédicats Formules Un atome est une formule Si F et G sont des formules et x une variable, alors les expressions suivantes sont des formules (F) (F)  (G) et (F)  (G) (F)  (G) et (F)  (G) x (F) et x (G)

37 Occurrence d’une variable
Calcul des prédicats Occurrence d’une variable Une occurrence d’une variable x dans une formule F est un endroit où x apparaît dans F sans être immédiatement précédée par  ou  Une occurrence libre de x dans F est définie :

38 Calcul des prédicats Occurrence libre Si F est un atome, toutes les occurrences de x sont libres Si F =  (G), les occurrences libres de x sont celles de G Si F = (G)  (H), les occurrences libres de x sont celles de G et celles de H Si F = y(G) ou F = y(H) avec x distinct de y, les occurrences libres de x sont celles de G et celles de H Si F = x(G) ou F = x(H), aucune occurrence de x dans F n ’est libre

39 Caractéristiques des variables
Calcul des prédicats Caractéristiques des variables Une variable est dite libre dans une formule F si elle a au moins une occurrence libre (sinon on dit qu’elle est liée) Une formule n’ayant pas de variable libre est dite close

40 Aspects sémantiques Formules universellement valides
Calcul des prédicats Aspects sémantiques Formules universellement valides Le théorème de Herbrand Principe de résolution adapté au calcul des prédicats

41 Vers la notion de modèle
Calcul des prédicats Vers la notion de modèle Soit L le langage du calcul des prédicats une interprétation de L c’est la donnée de : un ensemble E non vide appelé ensemble de base pour chaque symbole de prédicat R d’arité n, d’un sous-ensemble R’ de En pour chaque symbole de fonction f d’arité n, d’une application f’ de En vers E (y compris pour les constantes) on peut alors calculer la valeur de tout terme clos (c’est un élément de E) on peut donc associer une valeur de vérité à tout atome et donc par extension à toute formule close

42 Exemple d’interprétation
Calcul des prédicats Exemple d’interprétation xyz (P(x,y)  Q(y,z)  R(x,z)) xy ( (M(x,y)  P(x,y)  Q(x,y)) M(a,b)  P(c,b)  P(d,a)  P(e,c) E = P’ = a’ = { anne, bernard, …} M’ = est la mère de Q’ = est un parent de R’ = est le grand-père de est le père de anne b’ = bernard c’ = charles d’ = didier e’= éric

43 Modèle Soit M une interprétation de L
Calcul des prédicats Modèle Soit M une interprétation de L soit F une formule close. M est un modèle de F ssi la valeur de vérité de F dans M est M F soit F(x1, …, xk) une formule quelconque F est dite universellement valide ssi x1…xk F(x1, …, xk) est satisfaite dans toutes les interprétations de L – F est dite insatisfaisable ssi il existe une interprétation pour laquelle x1…xk F(x1, …, xk) est satisfaite Corollaire

44 Preuve et démonstration
Calcul des prédicats Preuve et démonstration Comment prouver une formule du calcul des prédicats ? Prouver qu’elle est vraie passer en revue toutes les interprétations ! Prouver qu’elle est fausse trouver une interprétation qui invalide la formule

45 Toutes les interprétations ?
Calcul des prédicats Toutes les interprétations ? Une représentation utile des formules forme clausale Un théorème qui simplifie la vie théorème de Herbrand Principe de résolution pour le calcul des prédicats vers une automatisation des démonstrations

46 Transformation de formule
Calcul des prédicats Transformation de formule Forme normale prénexe quantificateurs en tête de la formule formule sous forme normale conjonctive Forme standard de Skolem formule sous forme normale prénexe quantificateurs existentiels précédant quantificateurs universels Tout formule du calcul des prédicats est équivalente à une formule sous forme standard de Skolem Théorème

47 Mise sous forme prénexe
Calcul des prédicats Mise sous forme prénexe Éliminer les connecteurs  et  Transporter les  devant les atomes en utilisant ( F  F) et les lois de De Morgan Transporter les quantificateurs en tête de la formule Ne pas hésiter à renommer les variables

48 Transport des quantificateurs
Calcul des prédicats Transport des quantificateurs si H ne contient aucune occurrence de x

49 Inversion de  et de  Skolemisation
Calcul des prédicats Inversion de  et de  Skolemisation Lorsqu’on a on remplace y par une fonction g qui à x associe y Skolemisation = expliciter l’implicite

50 Une représentation utile des formules Forme clausale
Calcul des prédicats Une représentation utile des formules Forme clausale On part de la forme standard de Skolem On utilise les clauses avec : les variables quantifiées universellement conservées les fonctions de Skolem conservées les variables quantifiées existentiellement remplacées par des constantes les variables renommées d’une clause à l’autre EID

51 Univers de Herbrand Soit S un ensemble de clauses
Calcul des prédicats Univers de Herbrand Soit S un ensemble de clauses Soit H0 l’ensemble des symboles de constantes ayant au moins une occurrence dans S. On pose : pour fn fonction d’arité n de S et tj éléments de Hi-1 H= limi Hi est appelé univers de Herbrand On appelle instance de base d’une clause C toute clause obtenue en remplaçant les variables de C par des éléments de H

52 Calcul des prédicats Théorème de Herbrand Théorème Un ensemble S de clauses est insatisfaisable si et seulement si il existe un ensemble S’ d’instances de base insatisfaisable Corollaire Un ensemble de clauses est satisfaisable si et seulement si tout ensemble fini d’instances de base est satisfaisable

53 A quoi ça sert ? Validation de raisonnement
Calcul des prédicats A quoi ça sert ? Validation de raisonnement On cherche à valider le raisonnement suivant Un dragon est heureux si tous ses enfants peuvent voler Les dragons verts peuvent voler Un dragon est vert s’il a au moins un parent vert ou rose Donc les dragons verts sont heureux

54 Résolution du problème
Calcul des prédicats Résolution du problème Démarche générale Modéliser le problème (les prémisses et la conclusion) Démonstration par l’absurde, on montre que P1  P2  P3  C est insatisfaisable mettre la formule sous forme clausale utiliser le théorème de Herbrand Notations h(x) : x est heureux p(x,y) : x est parent de y vo(x) : x vole (peut voler) ve(x) : x est vert r(x) : x est rose EID

55 Résolution du problème (suite)
Calcul des prédicats Résolution du problème (suite) P1 un dragon est heureux si tous ses enfants peuvent voler h(x) x (y, p(x,y)vo(y)) P2 les dragons verts peuvent voler P3 un dragon est vert s’il a au moins un parent vert ou rose les A sont B A  B C les dragons verts sont heureux négation

56 Calcul des prédicats Forme clausale

57 Validation du raisonnement
Calcul des prédicats Validation du raisonnement Univers de Herbrand H0 = {a} H1= {a, f(a)} H = {a, …, fn(a)} Trouver un ensemble d’instances de base insatisfaisable intuition 1 : partir de la conclusion et essayer d’arriver à une contradiction par déduction intuition 2 : utiliser le principe de résolution

58 Calcul des prédicats Mise en œuvre  clause vide QED

59 Résolution On a un ensemble d’instances de base insatisfaisable
Calcul des prédicats Résolution On a un ensemble d’instances de base insatisfaisable La formule P1  P2  P3  C est donc insatisfaisable Le raisonnement est donc valide

60 Analysons un peu les choses
Calcul des prédicats Analysons un peu les choses L’opération d’appariement de deux atomes s’appelle l’unification Algorithme d’unification (vu plus tard) On peut donc appliquer le principe de résolution sans problème unificateur

61 Propriétés du calcul des prédicats
Le calcul des prédicats muni du principe de résolution et de l’unification est complet toute formule close est vraie ou fausse MAIS le calcul des prédicats est indécidable Il n’existe pas d’algorithme permettant de décider à tout coup si une formule close est vraie ou fausse En PROLOG, nous nous limiterons donc à un sous-ensemble du calcul des prédicats non restrictif en pratique

62 Programmer en logique ? Un petit exemple Forme clausale
Calcul des prédicats Programmer en logique ? Un petit exemple xyz (pere(x,y)parent(y,z)  grand-pere(x,z) xy ((mere(x,y)  pere(x,y))  parent(x,y) mere(a,b) pere(c,b) pere(d,a) pere(e,c) Forme clausale pere(x1, y1)  parent(y1, z1)  grand-pere(x1,z1) mere(x2, y2)  parent(x2, y2) pere(x3, y3)  parent(x3, y3) mere(a,b) pere(c,b) pere(d,a) pere(e,c) On veut prouver x, grand-pere(x,b) négation sous forme clausale : grand-pere(x,b)

63 Programmer en logique ? On part de grand-pere(x,b)
Calcul des prédicats Programmer en logique ? On part de grand-pere(x,b) si x = x1 et z1=b unification avec pere(x1, y1)  parent(y1, z1)  grand-pere(x1,z1) on obtient pere(x, y1)  parent(y1, b) si y3 = b et y1=x3 unification avec pere(x3, y3)  parent(x3, y3) on obtient pere(x, x3)  pere(x3, b) si x3 = c unification avec pere(c,b) on obtient pere(x, c) si x=e unification avec pere(e,c) on obtient  QED

64 Programmer en logique ? On a réussi à prouver x, grand-pere(x,b)
Calcul des prédicats Programmer en logique ? On a réussi à prouver x, grand-pere(x,b) On a réussi à calculer un x Unification = calcul on donne des valeurs aux variables Calcul = programmation on va pouvoir programmer avec la logique !!! on automatise complètement le processus PROLOG est un démonstrateur de théorème

65 Le langage PROLOG 1. Premiers pas 2. Arithmétique 3. Listes
4. Le contrôle PROLOG 5. Termes structurés 6. Méta-interprétation de PROLOG

66 1. Premiers pas en Prolog On se limite aux clauses de Horn
Le langage 1. Premiers pas en Prolog On se limite aux clauses de Horn au plus un littéral positif un seul littéral (positif) : fait un littéral positif et au moins un littéral négatif : règle pas de littéral positif : requête Elles permettent de forcer le retour dans la base pour continuer la démonstration de limiter le choix par clause

67 Le langage Univers PROLOG L’univers PROLOG est une base de connaissances décrivant l’état du monde à l’aide de relations (prédicats) portant sur des entités (termes) Un prédicat particulier (=) correspond à l’unification

68 Syntaxe de PROLOG Considérons l’énoncé Calcul des prédicats Prolog
Le langage Syntaxe de PROLOG Considérons l’énoncé Socrate est un homme Tout homme est mortel Socrate est-il mortel ? Calcul des prédicats Prolog x, homme(x) homme(socrate). x, homme(x)  mortel(x) mortel(X) :- homme(X). ?- mortel(socrate).

69 La famille masculin(tom). % tom est de sexe masculin masculin(tim).
Le langage La famille masculin(tom). % tom est de sexe masculin masculin(tim). masculin(bob). masculin(jim) % «paquet» de clauses feminin(pam). feminin(liz). feminin(ann). feminin(pat). enfant(bob,pam). enfant(bob,tom). enfant(liz,tom). enfant(ann,bob). enfant(pat,bob). enfant(tim,liz). enfant(jim,pat).

70 Premières requêtes Est-ce que pat est un enfant de bob ?
Le langage Premières requêtes masculin(tom). masculin(tim). masculin(bob). masculin(jim). feminin(pam). feminin(liz). feminin(ann). feminin(pat). enfant(bob,pam). enfant(bob,tom). enfant(liz,tom). enfant(ann,bob). enfant(pat,bob). enfant(tim,liz). enfant(jim,pat). Est-ce que pat est un enfant de bob ? ?- enfant(pat,bob). Yes Quels sont les enfants de tom ? ?- enfant(X,tom). X = bob ; X = liz ; No

71 Lien avec le calcul des prédicats
Règles PROLOG a :- b,c,d. Règles LOGIQUE a   b   c   d Requête PROLOG ?- q. Requête LOGIQUE  q Unification Faire correspondre requête et tête de règle

72 Écriture de prédicats Qui est le père de bob ?
Le langage Écriture de prédicats masculin(tom). masculin(tim). masculin(bob). masculin(jim). feminin(pam). feminin(liz). feminin(ann). feminin(pat). enfant(bob,pam). enfant(bob,tom). enfant(liz,tom). enfant(ann,bob). enfant(pat,bob). enfant(tim,liz). enfant(jim,pat). X=pam X=tom Qui est le père de bob ? ?- enfant(bob,X), masculin(X). retour échec X=tom Plus généralement pere(X,Y) :- enfant(Y,X), masculin(X). Écrire le prédicat mere/2

73 À chacun son tour Écrire les prédicats correspondant aux relations
Le langage À chacun son tour Écrire les prédicats correspondant aux relations grand-pere/2 frere/2 tante/2 cousin/2

74 Le langage PROLOG PROLOG est un langage déclaratif on spécifie les propriétés du résultat du programme et non pas le processus pour arriver à ce résultat (aspect opérationnel) Intérêts facilité de compréhension facilité d’écriture

75 Retour sur le retour arrière
Le langage Retour sur le retour arrière masculin(tom). masculin(tim). masculin(bob). masculin(jim). feminin(pam). feminin(liz). feminin(ann). feminin(pat). enfant(bob,pam). enfant(bob,tom). enfant(liz,tom). enfant(ann,bob). enfant(pat,bob). enfant(tim,liz). enfant(jim,pat). frere(X,Y) :- masculin(X), enfant(X,Z), enfant(Y,Z). retour Z=pam Z = tom Considérons la requête ?- frere(bob,liz). échec X = bob, Y = liz Yes Le mécanisme de retour-arrière (backtrack) assure la complétude de la recherche Demander une nouvelle solution revient à provoquer un échec fictif pour forcer le backtrack

76 Le langage Quelques propriétés la recherche réalisée par PROLOG est une recherche en profondeur d’abord on peut obtenir plusieurs solutions pour une même requête on appelle cela le non-déterminisme de PROLOG un prédicat peut servir à autre chose que ce pour quoi il a été écrit on appelle cela la réversibilité de PROLOG les seuls résultats possibles : yes ou no pas de fonction, les réponses sont obtenues par unification uniquement

77 Récursivité Écrire le prédicat ascendant/2 ascendant(X,Y) :-
Le langage Récursivité Écrire le prédicat ascendant/2 ascendant(X,Y) :- enfant(Y,X). ascendant(X,Z) :- enfant(Z,Y), ascendant(X,Y). Condition d’arrêt en premier Information discriminante en premier

78 PROLOG = logique ? Soit une relation binaire r. Comparer :
Le langage PROLOG = logique ? Soit une relation binaire r. Comparer : récursion droite fermeture(X,Y) :- r(X,Y). fermeture(X,Z) :- r(X,Y), fermeture(Y,Z). récursion gauche fermeture(X,Y) :- r(X,Y). fermeture(X,Z) :- fermeture(Y,Z), r(X,Y). Attention à la procédure de recherche !!! Règle de sélection du but le plus à gauche Règle de sélection de la clause la première

79 2. Arithmétique Les opérateurs usuels existent : +, , /, mod
Le langage 2. Arithmétique Les opérateurs usuels existent : +, , /, mod attention il s’agit de symboles de fonctions !!! ?- X = X= 1+2  (1,2) Un opérateur spécial is ?- X is X = 3 L’argument de droite doit être complètement instancié à l’appel ?- X is 1 + Y. {INSTANTIATION ERROR}

80 Opérateurs arithmétiques
Le langage Opérateurs arithmétiques > et < >= et =< =:= égalité numérique =\= diségalité numérique attention : les deux arguments doivent être instanciés à l’appel

81 Exemple: calcul du PGCD
Le langage Exemple: calcul du PGCD Propriétés du PGCD D de X et Y si X et Y sont égaux, D vaut X si X < Y alors D est le PGCD de X et de Y - X si Y < X alors échanger le rôle de X et Y X ). pgcd(X, Y , D) :- X =:= Y , D is X. X X=Y pgcd(X, Y , D) :- X < Y , pgcd(X,Y-X,D). Y1 is Y - X, pgcd(X,Y1,D). pgcd(X, Y, D) :- X > Y, pgcd(Y,X,D). oui, mais que se passe-t-il avec pgcd(1,1,2).

82 Attention … X = Y réussit si X s’unifie avec Y sinon échec
Le langage Attention … X = Y réussit si X s’unifie avec Y sinon échec X is Y réussit si Y est une expression arithmétique complètement instanciée à l’appel et X est une variable libre sinon il y a erreur X =:= Y réussit si X et Y sont deux expressions arithmétiques de même valeur sinon, il y a échec ou erreur selon le cas X == Y réussit si les termes sont identiques (pas simplement unifiables) X \== Y réussit si les termes ne sont pas identiques

83 3. Listes La liste vide : [] Les listes non vides :
Le langage 3. Listes La liste vide : [] Les listes non vides : [a, b, c] [a, [b, c], d] Le constructeur de listes : | [Tete | Reste] [a]  [a | [] ] [a, b]  [a | [b |[]]]  [a | [b] ] Analogie avec Haskell | = : représentation arborescente

84 Analogie avec Haskell A-t-on besoin de head et tail ?
Le langage Analogie avec Haskell A-t-on besoin de head et tail ? ?- [1,2,3,4] = [H|T]. On ne dispose pas des listes en compréhension pas réellement un problème

85 Prédicats de base Appartenance à une liste : member/2
Le langage Prédicats de base Appartenance à une liste : member/2 member(X, [X|Ys]). member(X, [Y |Xs]) :- member(X,Xs). _ Ys ne sert à rien _ Y ne sert à rien Longueur d’une liste : length/2 length([], 0). length([_ | Xs], N1) :- length(Xs, N), N1 is N + 1.

86 Prédicats de base (suite)
Le langage Prédicats de base (suite) Suppression d’un élément d’une liste : efface/3 efface(_, [], []). efface(X,[X|Ys], Ys). efface(X,[Y|Ys], [Y|Zs]) :- X \== Y, efface(X,Ys,Zs) Comment effacer toutes les occurrences d’un élément ?

87 Prédicats de base (suite)
Le langage Prédicats de base (suite) Concaténation de deux listes: append/3 append([], Ys, Ys). append([X|Xs], Ys, [X|Zs]) :- append(Xs,Ys,Zs). Une nouvelle version de member ? member(X,L) :- append(_, [X|_], L).

88 Prédicats de base (suite)
Le langage Prédicats de base (suite) Renversement d’une liste : reverse/2 reverse([], []). reverse([X|Xs], Ys) :- reverse(Xs,Zs), append(Zs, [X], Ys). Une autre version de reverse ? nreverse([], L, L). nreverse([X|Xs], Ys, L) :- nreverse(Xs, [X|Ys], L). nreverse(Xs, Ys) :- nreverse(Xs, [], Ys).

89 Un prédicat plus délicat
Le langage Un prédicat plus délicat Permutation d’une liste : permute/2 insere(X,Ys,[X|Ys]). insere(X,[Y|Ys], [Y|Zs]) :- insere(X,Ys,Zs). permute([], []). permute([X|Xs], Ys) :- permute(Xs,Zs), insere(X,Zs,Ys).

90 A vous de jouer ! Les mutants … mutant(Nouveau) :-
Le langage A vous de jouer ! Les mutants … mutant(Nouveau) :- animal(A1), animal(A2), A1 \== A2, name(A1,L1), name(A2,L2), append(_, [X|Xs], L1), append([X|Xs], Fin, L2), append(L1, Fin, Mutant), name(Nouveau,Mutant).

91 4. Le contrôle PROLOG Contrôle du backtrack
Le langage 4. Le contrôle PROLOG Contrôle du backtrack Soit une fonction f dont une définition Prolog peut être : f(X, 0) :- X < 3. f(X, 2) :- 3 =< X, X < 6. f(X, 4) :- 6 =< X. Que se passe-t-il si on pose la question ? ?- f(1,Y), 2 < Y.

92 ?- f(1,Y), 2 < Y. Démonstration de f(1,Y) Première règle : Y = 0
Le langage ?- f(1,Y), 2 < Y. f(X, 0) :- X < 3. f(X, 2) :- 3 =< X, X < 6. f(X, 4) :- 6 =< X. Démonstration de f(1,Y) Première règle : Y = 0 Démonstration de 2 < Y :- échec Deuxième règle : échec Troisième règle : échec

93 Le langage La coupure : ! On appelle but père le but ayant permis d’unifier la clause contenant la coupure (! cut) L’effet du cut est de couper tous les points de choix restant depuis le but père. Les autres alternatives restent en place f(X, 0) :- X < 3, !. f(X, 2) :- 3 =< X, X < 6, !. f(X, 4) :- 6 =< X. ?- f(7,Y).

94 Le langage Si … alors … sinon Le cut peut servir à exprimer des conditions mutuellement exclusives et ainsi simplifier l’écriture La clause suivant un cut peut être considérée comme un sinon f(X, 0) :- X < 3, !. f(X, 2) :- X < 6, !. f(X, 4). ?- f(1,2).

95 Le langage Un usage délicat Green cut : la sémantique déclarative du programme n’est pas modifiée on peut enlever le cut le programme fonctionnera toujours Red cut : la sémantique déclarative du programme est modifiée Le retrait du cut conduit à un programme au fonctionnement erroné Généralement, la version avec cut peut être prise en défaut

96 Autres prédicats de contrôle
Le langage Autres prédicats de contrôle true est un but qui réussit toujours p(a,b).  p(a,b) :- true. fail est un but qui échoue toujours call(X) est un méta but. Il considère X comme un but et essaie de le résoudre. ?- Y=b, X=member(Y, [a,b,c]), call(X). Yes Note: call(X)  X dans Sicstus Prolog.

97 Application : négation
Le langage Application : négation Expression de la négation en Prolog different(X, Y) :- X = Y, !, fail. different(X, Y). Un prédicat plus général : not(P) :- P, !, fail. not(_).

98 Problèmes avec le not ! r(a). q(b). p(X) :- not( r(X) ).
Le langage Problèmes avec le not ! r(a). q(b). p(X) :- not( r(X) ). ?- q(X), p(X). ?- p(X), q(X).

99 Théorie du monde clos not(X)
Le langage Théorie du monde clos not(X) ne veut pas dire X est toujours faux veut simplement dire Je n’ai pas assez d’information pour prouver X Prolog considère ce qui n’est pas vrai comme faux et vice-versa c’est la théorie du monde clos A quoi peut servir : not(not(P)) ?

100 Typage en Prolog var/1, nonvar/1 integer/1, float/1, number/1
Le langage Typage en Prolog var/1, nonvar/1 integer/1, float/1, number/1 atom/1, string/1, atomic/1 compound/1 ground/1

101 5. Termes structurés Notion de foncteur
Le langage 5. Termes structurés Notion de foncteur famille( indiv(tom, fox, date(7, mai, 1950), travail(emn, 7850)), indiv(ann, fox, date(9, mai, 1951), sans-emploi), [ indiv(pat, fox, date(5, mai, 1973), sans-emploi), indiv(jim, fox, date(5, mai, 1973), sans-emploi) ]) On pourrait utiliser des listes (de listes …) mais on préfère structurer l’information

102 Utilisation de l’unification
Le langage Utilisation de l’unification famille( indiv(tom, fox, date(7, mai, 1950), travail(emn, 7850)), indiv(ann, fox, date(9, mai, 1951), sans-emploi), [ indiv(pat, fox, date(5, mai, 1973), sans-emploi), indiv(jim, fox, date(5, mai, 1973), sans-emploi) ]) Les familles à trois enfants : famille(_,_,[_,_,_]). Les femmes mariées ayant au moins trois enfants famille(_,indiv(Prenom, Nom,_,_), [_,_,_|_]).

103 Outils de manipulation
Le langage Outils de manipulation Consultation de termes structurés functor/3 ?- functor(date(9, janvier, 1973), F, A) F = date, A = 3 arg/3 ?- arg(3, date(9, janvier, 1973), F) F = 1973 Construction/déconstruction de termes structurés =../2 ?- X =.. [date, 9, janvier, 1973] X = date(9, janvier, 1973)

104 Le langage Opérateurs On peut définir de nouveaux opérateurs. Il ne s’agit que d’une définition syntaxique pour faciliter l’écriture de termes. :- op(80, fy, non). :- op(100, yfx, et). non a et b est devenu un terme valide, il est équivalent à et(non(a), b)

105 Fonctionnement Un opérateur possède une précédence (1..1200)
Le langage Fonctionnement Un opérateur possède une précédence ( ) par exemple : + a une plus forte précédence que / car a+b/c se lit a+(b/c) Un opérateur possède une politique de résolution des ambiguïtés : xfx correspond aux opérateurs infixes non associatifs les deux sous-expressions ont un niveau de précédence inférieur à celui de l’opérateur xfy correspond aux opérateurs associatifs à droite seule l’expression de gauche doit avoir un niveau inférieur à l’opérateur yfx correspond aux opérateurs associatifs à gauche

106 6. Méta-interprétation Méta-programmation
Le langage 6. Méta-interprétation Méta-programmation écrire des programmes qui analysent, transforment et simulent d’autres programmes Prolog est un langage adapté à la méta-programmation car : il y a identité entre programme et données

107 Le langage Méta-interprétation Un méta-interprète d’un langage donné est un interprète du langage écrit dans le même langage Le prédicat prouve(But) réussit si la requête But par rapport au programme que l’on cherche à interpréter Le plus simple des méta-interprètes Prolog prouve(But) :- But.

108 Outils pour la méta-interprétation
Le langage Outils pour la méta-interprétation Le prédicat clause/2 (accès aux programmes) append([],X,X). append([X|Xs], Ys, [X|Zs]) :- append(Xs,Ys,Zs). ?- clause(append(X,Y,Z), Corps). X = [], Y = _A1, Z=_A2, Corps = true ? ; X = [_A1|_A2], Y = _A3, Z = [_A1|_A4], Corps = append(_A2, _A3, _A4) ? ; no

109 Un premier interprète prouve( true ). prouve( (A,B) ) :- prouve(A),
Le langage Un premier interprète prouve( true ). prouve( (A,B) ) :- prouve(A), prouve(B). prouve( But ) :- clause(But, Corps), prouve(Corps).

110 Le langage Améliorations Gestion des prédicats prédéfinis prouve( But ) : predefini( But ), predefini( _ = _ ). But predefini( _ is _ ). Gestion explicite de l’unification prouve( But ) : But =.. [Foncteur|Arguments], Tete =.. [Foncteur|AutresArguments], clause(Tete, Corps), unification(But, Tete), prouve(Corps).

111 Algorithme d’unification
Le langage Algorithme d’unification unification( X, Y) :- var(X), !, Y = X % nooccur(X,Y) var(Y), !, X = Y % nooccur(Y,X) atomic(X), atomic(Y), X == Y. X =.. [Foncteur|Arguments], Y =.. [Foncteur|AutresArguments], unificationListe(Arguments, AutresArguments). unificationListe([], []). unificationListe([X|Xs], [Y|Ys]) :- unification(X,Y), unficationListe(Xs,Ys).

112 Le langage Le test d’occurrence Théoriquement, lors d’une unification il faut réaliser le test d’occurrence. Prolog ne le fait pas. En particulier : ?- X = f(X) réussit mais ne peut afficher de résultat ! Exercice : écrire le test d’occurrence en Prolog

113 nooccur/2 noccur( _, Y) :- ground(Y). noccur( X, Y) :-
Le langage nooccur/2 noccur( _, Y) :- ground(Y). noccur( X, Y) :- var(Y), X \== Y. Y =.. [_|Arguments], nooccurListe(X, Arguments). nooccurListe(_, []). nooccurListe(X, [Y|Ys]) :- nooccur(X,Y), nooccurListe(X,Ys).

114 PROLOG avancé 1. Structures incomplètes 2. Listes de solutions
3. Modifications de la base 4. Indexation de clauses

115 1. Structures incomplètes
Prolog avancé 1. Structures incomplètes Concaténation Notoirement inefficace ! Le problème pas de « pointeur » sur le dernier élément pas de possibilité de modification d’une variable logique uniquement instanciation d’une inconnue append([], Ys, Ys). append([X|Xs], Ys, [X|Zs]) :- append(Xs,Ys,Zs).

116 Une solution : listes de différences
Prolog avancé Une solution : listes de différences Une nouvelle structure de liste idée : conserver une partie inconnue pour instanciation au dernier moment Liste de différence on nomme la fin de la liste [a,b,c] est représentée par [a,b,c|Xs]-Xs la liste vide Xs-Xs Concaténation en une opération append(Ls-Xs, Xs-Rs, Ls-Rs). ?- append([a,b,c|Xs]-Xs, [1,2,3|Ys]-Ys, R) R = [a,b,c,1,2,3|Ys]-Ys

117 Une opération !?! Ls - Xs a b c 1 2 3 ? ? ? - 1 2 3 ? ? ?
Prolog avancé Une opération !?! Ls - Xs a b c ? ? ? ? ? ? Xs - Rs ? ? ? ? ? ? Ls - Rs a b c ? ? ? ? ? ? Merci l’unification !

118 2. Listes de solutions pere(tarzan, fils). pere(tarzan, fille).
Prolog avancé 2. Listes de solutions pere(tarzan, fils). pere(tarzan, fille). age(fils, 5). age(fille, 2). age(tarzan, 25). On veut la liste de tous les enfants de tarzan et leur âge. pere(tarzan, X), age(X,A) ne donne les solutions qu’une par une Comment les récupérer toutes dans une liste ?

119 Prédicats « toutes solutions »
Prolog avancé Prédicats « toutes solutions » ?- setof(X/A, (pere(tarzan, X), age(X,A)), L). L = [fils/5, fille/2] setof/3 résultat trié (fail si pas de solution) bagof/3 résultat tel que le backtrack (fail si pas de solution) findall/3 résultat tel que le backtrack ([] si pas de solution) findall(X, member(X/Y, [b/1, a/2]), L) > [b,a] setof(X, member(X/Y, [a/1, b/2]), L > L=[b] Y=1 ; L=[a] Y=2 setof(X, Y^member(X/Y, [b/1, a/2]), L) > [a,b]

120 3. Modifications de la base
Prolog avancé 3. Modifications de la base Besoin : résistance au backtrack Ajout dans la base assert/1 asserta/1 assertz/1 Retrait dans la base retract/1 retractall/1

121 Prolog avancé 4. Indexation de clause Les clauses Prolog sont rangées dans une hashtable. Elles sont indexées par le foncteur et l’arité de leur premier argument Pour écrire des programmes plus efficaces, mettre en tête l’argument le plus discriminant.

122 1. Cours 2. Travaux pratiques 3. A quoi ça sert ?
Bilan 1. Cours 2. Travaux pratiques 3. A quoi ça sert ?

123 Bilan du cours Rappels de logique Comment programmer avec la logique
Le langage PROLOG Subtilités du langage

124 Bilan des TP TP-1/TP-2: Mise en route, manipulations
écriture rapide de fonctions sur les listes écriture rapide de petits outils TP-3: Résolution d’énigmes logiques/de réflexion tester des idées, résoudre des problèmes non triviaux TP-4: Écriture d’un système expert complet 4 heures pour un système complet, convivial et extensible à comparer avec 50h en Pascal … TP-5 (noté)

125 Bilan PROLOG : à quoi ça sert ? Principal langage de l’Intelligence Artificielle Systèmes experts cf. TP Traitement du langage naturel cf. GINA Faire intervenir le raisonnement …

126 PROLOG pour l’Industrie
Bilan PROLOG pour l’Industrie Programmation par Contraintes point de rencontre de diverses disciplines programmation logique (et IA au sens large) recherche opérationnelle (graphes, prog. Linéaire, …) analyse numérique Pour résoudre des problèmes combinatoires complexes gestion de ressources (humaines ou non), réseaux télécoms, … Technologie française en plein boom ! ILOG SA, Cosytec (systèmes de PPC) Bouygues SA, Bouygues Telecom, France Telecom R&D, Air France, DGA, SNCF, …

127 PROLOG dans l’Industrie
Bilan PROLOG dans l’Industrie Utilisé pour prototyper très rapidement, tester des idées … Mais aussi pour développer des applications Dassault Électronique ECRC (Centre de recherche commun Bull, Siemens)


Télécharger ppt "Programmation en Logique FI"

Présentations similaires


Annonces Google