programmation logique2002 programmation en logique fi 3 - 2002 cours narendra jussien tp romuald...

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

Upload: noemie-simonin

Post on 03-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

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

Programmation Logique 2002

Programmation en LogiqueFI 3 - 2002

Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Page 2: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 2/127

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

Page 3: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique 2002

Introduction

Page 4: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 4/127

Classes de langage

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 impératifs

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, …

Page 5: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 5/127

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

Page 6: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 6/127

Historique

1930 Calcul des prédicats (J. Herbrand) 1965 Principe de résolution (J. A. Robinson) 1970 Utiliser la logique comme langage de

programmationclauses de Horn R. KowalskiQ-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

Page 7: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 7/127

Plan du cours

Bases théoriques (rappels de logique formelle) Calcul propositionnel Calcul des prédicats

Le langage PROLOG

PROLOG avancé

Page 8: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 8/127

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

Page 9: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique 2002

Rappels de Logique

1. Calcul propositionnel2. Calcul des prédicats

Page 10: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 10/127

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

Page 11: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 11/127

Syntaxe d’une formule

Données un ensemble P de variables propositionnelles

P = { p, q, r, … } énoncés élémentaires

un ensemble C de connecteursC = { , , , , }

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

Calcul propositionnel

Page 12: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 12/127

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

Calcul propositionnel

1,0)( p

Page 13: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 13/127

Tables de vérité : opérateurs

10

0 00 1

0 1 1 1

1 10 1

1 00 1

p p 0 1

0 101

0 10 1

0 101

0 101

Calcul propositionnel

Page 14: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 14/127

Formules particulières

Tautologies : formules toujours vraies La table de vérité ne contient que des 1 exemple : p p

p ( p) (p p) 0 1

10

11

0 1 1 1

0 10 1

Calcul propositionnel

Page 15: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 15/127

? )()( qpqp

p q ¬ p ¬ q p q ¬ ( p q ) (¬ p ¬ q) F

0 00 11 01 1

1100

1010

0 00 1

0 101

0 1110

0 1 1 1

0 10 1

1001

11

1 00 1

0 101

11110

Calcul propositionnel

Page 16: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 16/127

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

1)(, F

Calcul propositionnel

Page 17: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 17/127

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)

)()(, HF

Calcul propositionnel

Page 18: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 18/127

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 )

Quelques équivalences utiles

)()( FGGFGF tauto GFGF tauto

FGGF tauto

1tautoFF

FF tauto

FGGF tauto

0tautoFF

GFGF

GFGF

tauto

tauto

)(

)(

Calcul propositionnel

Page 19: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 19/127

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

Calcul propositionnel

Page 20: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 20/127

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

Calcul propositionnel

Page 21: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique 2002

Aspects déductifs

notion de conséquence logique notion de démonstration notion de règles de déduction

Calcul propositionnel

Page 22: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 22/127

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

Calcul propositionnel

Page 23: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 23/127

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

Calcul propositionnel

Page 24: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 24/127

É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

Calcul propositionnel

Page 25: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 25/127

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

Calcul propositionnel

Page 26: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 26/127

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

Calcul propositionnel

Page 27: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 27/127

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

Une autre règle d’inférence

Calcul propositionnel

Page 28: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 28/127

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 00 1

0 101

0 1 1 1

0 10 1

1 10 1

0 101

Calcul propositionnel

Page 29: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 29/127

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

Calcul propositionnel

Page 30: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 30/127

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

Calcul propositionnel

Page 31: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 31/127

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

Page 32: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 32/127

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

Calcul des prédicats

Page 33: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 33/127

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

)()(, xéclaireMalxchandellex

)()(, xéclairexchandellex

)()(, xéclaireMalxéclairex

Calcul des prédicats

Page 34: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 34/127

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

Calcul des prédicats

Page 35: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 35/127

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

– les ti sont des termes

– R est un symbole de relation d’arité n

Calcul des prédicats

Page 36: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 36/127

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)

Calcul des prédicats

Page 37: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 37/127

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 :

Calcul des prédicats

Page 38: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 38/127

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

Calcul des prédicats

Page 39: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 39/127

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

Calcul des prédicats

Page 40: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique 2002

Aspects sémantiques

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

Calcul des prédicats

Page 41: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 41/127

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

Calcul des prédicats

Page 42: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 42/127

Exemple d’interprétation

xyz (P(x,y) Q(y,z) R(x,z)) xy ( (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 b’ = bernard c’ = charles d’ = didier e’= éric

est le père deM’ = est la mère de Q’ = est un parent deR’ = est le grand-père de

{ anne, bernard, …}

Calcul des prédicats

Page 43: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 43/127

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 1M 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

Calcul des prédicats

Page 44: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 44/127

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

Calcul des prédicats

Page 45: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 45/127

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

Calcul des prédicats

Page 46: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 46/127

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

Calcul des prédicats

Page 47: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 47/127

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

Calcul des prédicats

Page 48: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 48/127

Transport des quantificateurs

FxFx

Fx Fx

HFxHxFx

HFxHxFx

FxyFyx

FxyFyx

si H ne contient aucune occurrence de x

HFxHFx

HFxHFx

HHx

HHx

Calcul des prédicats

Page 49: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 49/127

Inversion de et de Skolemisation

Lorsqu’on a

on remplace y par une fonction g qui à x associe y

yxfyx )(

)()( xgxfxg

Skolemisation = expliciter l’implicite

Calcul des prédicats

Page 50: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 50/127

Une représentation utile des formulesForme 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

),,(),( xyzqyxpzyx

),,(;),( 211 ayzqyap

Calcul des prédicats

Page 51: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 51/127

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

),,( 11 nnii ttfHH

Calcul des prédicats

Page 52: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 52/127

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

Calcul des prédicats

Page 53: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 53/127

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

Calcul des prédicats

Page 54: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 54/127

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

Calcul des prédicats

Page 55: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 55/127

Résolution du problème (suite)

P1 un dragon est heureux si tous ses enfants peuvent voler

P2 les dragons verts peuvent voler

P3 un dragon est vert s’il a au moins un parent vert ou rose

C les dragons verts sont heureux

les A sont BA B

)()(, xhxvex

)()(, xvoxvex

h(x)x (y, p(x,y)vo(y))

)()()(),(,, xveyryvexypyx

)()(, xvoxvex

)()(),(,, xhyvoyxpyx )()(),(,, xhyvoyxpyx )()(),(,, xhyvoyxpyx )()(),(,, xhyvoyxpyx )()()(),(,, xhyvoxhyxpyx )())(()())(,(,, xhxfvoxhxfxpxf

)()()(),(,, xveyryvexypyx )()()(),(,, xveyryvexypyx )()(),()(),(,, xveyrxypyvexypyx )()(),()()(),(,, xveyrxypxveyvexypyx

)()(, xhxvex négation

)()(, xhxvex )()(, xhxvex

Calcul des prédicats

Page 56: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 56/127

Forme clausale

)())(()())(,(,, xhxfvoxhxfxpxf )()(, xvoxvex

)()(),()()(),(,, xveyrxypxveyvexypyx

)()(, xhxvex

)())(,( 111 xhxfxp )())(( 22 xhxfvo

)()( 33 xvoxve )()(),( 4141 xveyvexyp

)()(),( 5252 xveyrxyp )(ave )(ah

Calcul des prédicats

Page 57: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 57/127

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

Calcul des prédicats

Page 58: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 58/127

)())(,( 111 xhxfxp

Mise en œuvre

)())(( 22 xhxfvo

)()( 33 xvoxve )()(),( 4141 xveyvexyp

)()(),( 5252 xveyrxyp )(ave )(ah

)(ah ))(()( afvoah ax 2

))(())(( afveafvo )(3 afx

))(()())(,( 11 afveyveafyp

)(4 afx

))(,()( afapah ))(()())(,( afveaveafap 111 xyax

)(ave)(ah

)(3 afx

))(())(( afveafvo

ax 2

)())(( ahafvo

)(ah clause vide

Calcul des prédicats

Page 59: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 59/127

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

)(ah

))(()( afvoah

))(())(( afveafvo

))(,()( afapah ))(()())(,( afveaveafap

)(ave

)(ah

Calcul des prédicats

Page 60: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 60/127

unificateur axxy 111

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

))(()())(,( 11 afveyveafyp

)())(,( 111 xhxfxp

Calcul des prédicats

Page 61: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 61/127

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

Calcul des prédicats

Page 62: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 62/127

Programmer en logique ?

Un petit exemple xyz (pere(x,y)parent(y,z) grand-pere(x,z) xy ((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)

Calcul des prédicats

Page 63: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 63/127

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

Calcul des prédicats

Page 64: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 64/127

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

Calcul des prédicats

Page 65: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique 2002

Le langage PROLOG

1. Premiers pas2. Arithmétique3. Listes4. Le contrôle PROLOG5. Termes structurés6. Méta-interprétation de PROLOG

Page 66: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 66/127

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

Le langage

Page 67: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 67/127

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

Le langage

Page 68: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 68/127

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

Le langage

Page 69: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 69/127

La famille

masculin(tom). % tom est de sexe masculinmasculin(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).

Le langage

Page 70: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 70/127

Premières requêtesmasculin(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).

Quels sont les enfants de tom ?

?- enfant(X,tom).

X = bob ;

Yes

X = liz ;

No

Le langage

Page 71: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 71/127

Lien avec le calcul des prédicats

Règles PROLOGa :- b,c,d.

Règles LOGIQUEa b c d

Requête PROLOG?- q.

Requête LOGIQUE q

UnificationFaire correspondre requête et tête de règle

Page 72: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 72/127

Écriture de prédicats

• Qui est le père de bob ?

?- enfant(bob,X), masculin(X).

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

échecretour

X=tom

X=tom

• Plus généralementpere(X,Y) :-

enfant(Y,X),masculin(X).

• Écrire le prédicat mere/2

Le langage

Page 73: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 73/127

À chacun son tour

Écrire les prédicats correspondant aux relations grand-pere/2 frere/2 tante/2 cousin/2

Le langage

Page 74: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 74/127

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

Le langage

Page 75: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 75/127

Retour sur le retour arrière

Considérons la requête ?- frere(bob,liz).

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

X = bob, Y = liz

Z=pam

échec

Yes

Z = tomretour

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

Le langage

Page 76: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 76/127

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

Le langage

Page 77: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 77/127

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êten premier

Information discriminanteen premier

Le langage

Page 78: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 78/127

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 gauchefermeture(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

Le langage

Page 79: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 79/127

2. Arithmétique

Les opérateurs usuels existent : +, , /, mod attention il s’agit de symboles de fonctions !!!

?- X = 1 + 2.

X= 1+2 +(1,2)

• Un opérateur spécial is

?- X is 1 + 2.

X = 3

• L’argument de droite doit être complètement instancié à l’appel?- X is 1 + Y.

{INSTANTIATION ERROR}

Le langage

Page 80: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 80/127

Opérateurs arithmétiques

> et < >= et =< =:= égalité numérique =\= diségalité numérique

attention : les deux arguments doivent être instanciés à l’appel

Le langage

Page 81: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 81/127

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

pgcd(X, Y , D) :- X =:= Y , D is X.X=YX X ).

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

Le langage

Page 82: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 82/127

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

Le langage

Page 83: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 83/127

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

Le langage

Page 84: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 84/127

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

Le langage

Page 85: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 85/127

Prédicats de base

Longueur d’une liste : length/2

length([], 0).length([_ | Xs], N1) :-

length(Xs, N),N1 is N + 1.

Appartenance à une liste : member/2

member(X, [X|Ys]).member(X, [Y |Xs]) :-

member(X,Xs).

Ys ne sert à rien_Y ne sert à rien_

Le langage

Page 86: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 86/127

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 ?

Le langage

Page 87: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 87/127

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

Le langage

Page 88: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 88/127

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

Le langage

Page 89: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 89/127

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

Le langage

Page 90: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 90/127

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

Le langage

Page 91: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 91/127

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.

Le langage

Page 92: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 92/127

?- 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 = 0Démonstration de 2 < Y :- échec

Deuxième règle : échec

Troisième règle : échec

Le langage

Page 93: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 93/127

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

Le langage

Page 94: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 94/127

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

Le langage

Page 95: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 95/127

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

Le langage

Page 96: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 96/127

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.

Le langage

Page 97: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 97/127

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

Le langage

Page 98: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 98/127

Problèmes avec le not !

?- q(X), p(X).

?- p(X), q(X).

r(a).q(b).p(X) :- not( r(X) ).

Le langage

Page 99: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 99/127

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

Le langage

Page 100: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 100/127

Typage en Prolog

var/1, nonvar/1

integer/1, float/1, number/1

atom/1, string/1, atomic/1

compound/1

ground/1

Le langage

Page 101: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 101/127

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

Le langage

Page 102: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 102/127

Utilisation de l’unification

Les familles à trois enfants :

famille(_,_,[_,_,_]).

Les femmes mariées ayant au moins trois enfants

famille(_,indiv(Prenom, Nom,_,_), [_,_,_|_]).

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

Le langage

Page 103: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 103/127

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)

Le langage

Page 104: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 104/127

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)

Le langage

Page 105: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 105/127

Fonctionnement

Un opérateur possède une précédence (1..1200) 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

Le langage

Page 106: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 106/127

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

Le langage

Page 107: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 107/127

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.

Le langage

Page 108: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 108/127

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

X = [], Y = _A1, Z=_A2, Corps = true ? ;

X = [_A1|_A2], Y = _A3, Z = [_A1|_A4],Corps = append(_A2, _A3, _A4) ? ;

no

?- clause(append(X,Y,Z), Corps).

Le langage

Page 109: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 109/127

Un premier interprète

prouve( true ).

prouve( (A,B) ) :- prouve(A), prouve(B).

prouve( But ) :- clause(But, Corps), prouve(Corps).

Le langage

Page 110: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 110/127

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

Le langage

Page 111: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 111/127

Algorithme d’unification

unification( X, Y) :-var(X), !, Y = X. % nooccur(X,Y)

unification( X, Y) :- var(Y), !, X = Y. % nooccur(Y,X)

unification( X, Y) :-atomic(X), atomic(Y), X == Y.

unification( X, Y) :-X =.. [Foncteur|Arguments],Y =.. [Foncteur|AutresArguments],unificationListe(Arguments, AutresArguments).

unificationListe([], []).unificationListe([X|Xs], [Y|Ys]) :-

unification(X,Y),unficationListe(Xs,Ys).

Le langage

Page 112: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 112/127

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

Le langage

Page 113: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 113/127

nooccur/2

noccur( _, Y) :-ground(Y).

noccur( X, Y) :-var(Y), X \== Y.

noccur( X, Y) :-Y =.. [_|Arguments],nooccurListe(X, Arguments).

nooccurListe(_, []).nooccurListe(X, [Y|Ys]) :-

nooccur(X,Y),nooccurListe(X,Ys).

Le langage

Page 114: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique 2002

PROLOG avancé

1. Structures incomplètes2. Listes de solutions3. Modifications de la base4. Indexation de clauses

Page 115: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 115/127

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

Prolog avancé

append([], Ys, Ys).append([X|Xs], Ys, [X|Zs]) :-

append(Xs,Ys,Zs).

Page 116: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 116/127

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érationappend(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

Prolog avancé

Page 117: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 117/127

Une opération !?!

Ls - Xs a b c 1 2 3 ? ? ? - 1 2 3 ? ? ?Xs - Rs 1 2 3 ? ? ? - ? ? ?

Ls - Rs a b c 1 2 3 ? ? ? - ? ? ?

Merci l’unification !

Prolog avancé

Page 118: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 118/127

2. Listes de solutions

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 ?

pere(tarzan, fils).pere(tarzan, fille).

age(fils, 5).age(fille, 2).age(tarzan, 25).

Prolog avancé

Page 119: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 119/127

Prédicats « toutes solutions »

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)

?- setof(X/A, (pere(tarzan, X), age(X,A)), L). L = [fils/5, fille/2]

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=2setof(X, Y^member(X/Y, [b/1, a/2]), L) --> [a,b]

Prolog avancé

Page 120: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 120/127

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

Prolog avancé

Page 121: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 121/127

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.

Prolog avancé

Page 122: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique 2002

Bilan

1. Cours2. Travaux pratiques3. A quoi ça sert ?

Page 123: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 123/127

Bilan du cours

Rappels de logique

Comment programmer avec la logique

Le langage PROLOG

Subtilités du langage

Bilan

Page 124: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 124/127

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

Bilan

Page 125: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 125/127

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 …

Bilan

Page 126: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 126/127

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, …

Bilan

Page 127: Programmation Logique2002 Programmation en Logique FI 3 - 2002 Cours Narendra Jussien TP Romuald Debruyne / Narendra Jussien

Programmation Logique NJ - 2002 - 127/127

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

Bilan