Programmation en Logique FI

Slides:



Advertisements
Présentations similaires
Mais vous comprenez qu’il s’agit d’une « tromperie ».
Advertisements

ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
CHAPITRE 8 LES ALIMENTS 3/25/2017 Des fruits Madame Craven.
Additions soustractions
Distance inter-locuteur
1 Plus loin dans lutilisation de Windows Vista ©Yves Roger Cornil - 2 août
Le langage Prolog Structures de données
LE CALCUL LITTÉRAL AU COLLÈGE
Les numéros 70 –
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Orchestration de Web Services Module 5 Exercice Pratique à l'usage de l'environnement.
1. Les caractéristiques de dispersion. 11. Utilité.
Introduction à la logique
Système formel Nous avons introduit : signes de variables (x, y, z, …), de constantes (0, 1), d’opérations (+, ), de relations (=, ) Axiomes : ce sont.
Licence Informatique Module Théories et Modèles pour l'Informatique II Option Programmation logique en Prolog Philippe Collard
Algorithme et structure de données
Systèmes Experts implémentation en Prolog
Un parcours possible autour du calcul littéral
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
Données statistiques sur le droit doption au 31/01 8 février 2012.
Technologies et pédagogie actives en FGA. Plan de latelier 1.Introduction 2.Les technologies en éducation 3.iPads 4.TNI 5.Ordinateurs portables 6.Téléphones.
Révision (p. 130, texte) Nombres (1-100).
La législation formation, les aides des pouvoirs publics
1 7 Langues niveaux débutant à avancé. 2 Allemand.
On parle darbre de recherche dune question *Racine de larbre : question *Nœuds : points de choix (formule à démontrer) *Passage dun nœud vers son fils.
La méthodologie………………………………………………………….. p3 Les résultats
La mesure de tendance centrale
Logiques Mathématiques
Objets Opérateurs Listes
OCaml - Les listes L3 MI.
Graphes Conceptuels J.F. Baget Inria.
Programmation logique Logique des prédicats du premier ordre
Présentation générale
Si le Diaporama ne s'ouvre pas en plein écran Faites F5 sur votre clavier.
Les nombres.
Programmation logique Démonstrateur automatique
Les chiffres & les nombres
RACINES CARREES Définition Développer avec la distributivité Produit 1
Rappels de logique des prédicats du 1er ordre
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
CSI 4506: Introduction à l’intelligence artificielle
1.1 LES VECTEURS GÉOMÉTRIQUES
Année universitaire Réalisé par: Dr. Aymen Ayari Cours Réseaux étendus LATRI 3 1.
Partie II Sémantique.
Jean-Marc Léger Président Léger Marketing Léger Marketing Les élections présidentielles américaines.
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
Inéquations du premier degré à une inconnue
Résoudre une équation du 1er degré à une inconnue
Programmation logique Le Langage PROLOG
Programmation non procédurale Le projet ECOLE 2000
Aire d’une figure par encadrement
Modélisation des opérations Spécifier les transformations détat que lon attend des services de la machine Létat dune machine entièrement déterminée par.
Les fondements constitutionnels
ASI 3 Méthodes numériques pour l’ingénieur
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Certains droits réservés pour plus d’infos, cliquer sur l’icône.
Nom:____________ Prénom: ___________
La Logique du premier ordre LPO
Annexe Résultats provinciaux comparés à la moyenne canadienne
Cours n°2UE102e(S. Sidhom) UE 102e. M1.IST-IE cours n°2 Systèmes à base de règles Par : Sahbi SIDHOM MCF. Université Nancy 2 Équipe de recherche SITE –
Prolog Listes Arbres en prolog Structures : bases de données
Chapitre 3 :Algèbre de Boole
La formation des maîtres et la manifestation de la compétence professionnelle à intégrer les technologies de l'information et des communications (TIC)
Bienvenue.
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Le langage Racket (Lisp)
Objets Opérateurs Listes
LOGIQUE ET PROGRAMMATION LOGIQUE
Transcription de la présentation:

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

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

Introduction

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

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

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

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

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

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

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

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

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

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

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

? 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

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

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)

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

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

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

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

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

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

É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

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

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

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

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

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

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

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

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

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

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

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é

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)

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 :

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Calcul des prédicats Forme clausale

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

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

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

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

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

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)

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

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

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

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

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

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

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

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

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

É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

À 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

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

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

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

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

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

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 = 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}

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

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

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

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

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

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.

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 ?

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

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

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

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

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.

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

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

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

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

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.

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

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

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

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

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

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,_,_), [_,_,_|_]).

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)

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)

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

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

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.

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

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

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

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

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

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

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

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

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

Une opération !?! Ls - Xs a b c 1 2 3 ? ? ? - 1 2 3 ? ? ? Prolog avancé 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 !

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 ?

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]

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

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.

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

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

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

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

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