Autres langages de l’IA Cours en cours de réalisation … Module Programmation Logique Pierre De Loor – enib -2004 – [email protected] www.enib.fr/~deloor Exemples { { { { { { { { { Programmation Programmation CLIPS SOAR Programmation Programmation Programmation Programmation Programmation logiques par contraintes fonctionnelle logique parallèle des logiques modales des logiques temporelles logique inductive logique abductive Programmation logique par contraintes { { { { CHIP CLP® CLP(FD) Distribution z AWC Programmation fonctionnelle (PF) { { Fonctions Origine mathématique z Lambda-calcul : Church 1932 { { { { z Formalisation de la notion de fonctions Exclusion de la dualité Intension/extension Fonctions définies par des règles Récursivité intrinsèque : le domaine des lambdafonctions est l ’ensemble des termes du lambdacalcul Applications { { { Mathématiques Informatique Linguistique PF : lambda calcul • Langage naturel consigne Appliquer la consigne au véhicule Partir en véhicule Partir en traineau En utilisant Un traineau PF : lambda-calcul • Lambda Langage consigne λ.x Partir en x Partir en traineau En utilisant Un traineau PF : lambda calcul • Lambda-calcul λ.x(partir en x) traineau PF : lambda calcul { Mise en cascade λ.y(λ.x(partir en x y) traîneau) bleu) { Réduction λ.x(partir en x bleu) traîneau (partir en traîneau bleu) PF : lambda calcul { Récursivité F ≡ (G F) { Exemple du factoriel G ≡ λ.f[λ.n[if(=n 0) 1 (* n(f(-n 1)))]] { PF : Exemple en LISP (defun fact (n)) (if (eq n 0) 1 (* n fact (- n 1)) ) ) PF : conclusion (1/2) { Puissance d’expression z z { Parler de fonctions sans connaitre leur “valeur” Fonctions d’ordres supérieurs Languages : z z z z LISP Miranda OCaml Haskell PF : conclusion (2/2) { PF et PL z z z Pas d’unification ni de retour arrière Ordre supérieur Fusionner les deux ? ¾ Curry CLIPS { { { NASA (CLIPS 1985 … CLIPS 6 1994) « Système de production » Langage de description de S.E. z { { { { { { { Noyau de plusieurs milliers de SE. Faits et règles typés Assertion et délétion Chaînage avant Hiérarchie des règles « salience » Règles actives à un instant : agenda Réfraction Algorithme RETE : complexité linéaire nbFait nbRègles CLIPS : Principe Base de règles Type de faits règles réfraction Agenda activation Règles « activables » Faits cycle production Appariement (Rete) CLIPS : Mots clés Base de règles defrule deftemplate Type de faits règles refresh Agenda réfraction assert/modify duplicate/retract/deffacts/reset activation Règles « activables » Faits run<n> production appariement CLIPS : Execution { { { { { { Une règle activée est mise dans l’agenda Lorsqu’elle est exécutée elle est retirée de l’agenda : « refraction » Au prochain pas, elle ne sera pas réactivée Sauf si c’est par de nouveaux faits Une régle peut être mise en plusieurs exemplaires dans l’agenda si elle est activée par plusieurs faits La fonction (refresh <règle>) remet la règle dans l’agenda comme si elle n’avait pas été activée CLIPS : Types faits et règles exemple 1 (deftemplate objet (slot nom) (slot position) (slot couleur)) (deftemplate posseder (slot objet)) (deftemplate liste-nombres (multislot values)) (defrule prendre (objet (nom ?unNom)) => (assert(posseder (objet ?unNom)) CLIPS : Types faits et règles exemple 1 ; faits initiaux en ligne : assert (assert(objet (nom cafetiere) (position 5-7) (couleur bleue))) ; faits initiaux en vrac : deffacts ; ils seront insérés suite à l'instruction (reset) (deffacts scene1 "Exemple de scene" (objet (nom theiere) (position 4-4) (couleur verte)) (objet (nom chaise) (position 1-1) (couleur jaune)) (objet (nom pomme) (position 4-8) (couleur rouge))) CLIPS : Exemple d’exécution exemple 1 {deloor@deloor}~/enseignement/ia/CLIPS/EXAMPLES/pdl$ clips CLIPS (V6.21 06/15/03) CLIPS> (load "coursExample1.CLP") Defining deftemplate: objet Defining deftemplate: posseder Defining deftemplate: liste-nombres Defining defrule: prendre +j Defining deffacts: scene1 TRUE CLIPS> (assert (objet (nom cafetiere) (position 1-2) (couleur bleue))) <Fact-0> CLIPS> (facts) f-0 (objet (nom cafetiere) (position 1-2) (couleur bleue)) For a total of 1 fact. CLIPS> (agenda) 0 prendre: f-0 For a total of 1 activation. CLIPS> (run) CLIPS> (facts) f-0 (objet (nom cafetiere) (position 1-2) (couleur bleue)) f-1 (posseder (objet cafetiere)) For a total of 2 facts. CLIPS> (agenda) CLIPS> (reset) CLIPS> (facts) f-0 (initial-fact) f-1 (objet (nom theiere) (position 4-4) (couleur verte)) f-2 (objet (nom chaise) (position 1-1) (couleur jaune)) f-3 (objet (nom pomme) (position 4-8) (couleur rouge)) For a total of 4 facts. CLIPS> (agenda) 0 prendre: f-3 0 prendre: f-2 0 prendre: f-1 For a total of 3 activations. CLIPS> (run) CLIPS> (facts) f-0 (initial-fact) f-1 (objet (nom theiere) (position 4-4) (couleur verte)) f-2 (objet (nom chaise) (position 1-1) (couleur jaune)) f-3 (objet (nom pomme) (position 4-8) (couleur rouge)) For a total of 4 facts. CLIPS> (agenda) 0 prendre: f-3 0 prendre: f-2 0 prendre: f-1 For a total of 3 activations. CLIPS> (run) CLIPS> (facts) f-0 (initial-fact) f-1 (objet (nom theiere) (position 4-4) (couleur verte)) f-2 (objet (nom chaise) (position 1-1) (couleur jaune)) f-3 (objet (nom pomme) (position 4-8) (couleur rouge)) f-4 (posseder (objet pomme)) f-5 (posseder (objet chaise)) f-6 (posseder (objet theiere)) For a total of 7 facts. CLIPS> (agenda) CLIPS> CLIPS : Exemple 2 (deftemplate vehicule (slot nom) (slot position) (slot vitesse)) (defrule sortirParking ?f1 <- (vehicule (position parking)) => (modify ?f1 (position route) (vitesse 40km/heures))) {deloor@deloor}~/enseignement/ia/CLIPS/EXAMPLES/pdl$ clips CLIPS (V6.21 06/15/03) CLIPS> (load "coursExemple2.CLP") Defining deftemplate: vehicule Defining defrule: sortirParking +j TRUE CLIPS> (assert (vehicule (nom trotinette) (position parking) (vitesse 0))) <Fact-0> CLIPS> (assert (vehicule (nom kart) (position route) (vitesse 12km/h))) <Fact-1> CLIPS> (facts) f-0 (vehicule (nom trotinette) (position parking) (vitesse 0)) f-1 (vehicule (nom kart) (position route) (vitesse 12km/h)) For a total of 2 facts. CLIPS> (agenda) 0 sortirParking: f-0 For a total of 1 activation. CLIPS> (run) CLIPS> (facts) f-1 (vehicule (nom kart) (position route) (vitesse 12km/h)) f-2 (vehicule (nom trotinette) (position route) (vitesse 40km/heures)) For a total of 2 facts. CLIPS> (agenda) CLIPS> CLIPS : Hiérarchiser les règles { { Utilisation de salience Méta-règles z Exemple : Utiliser les règles relatives à la couleur des champignons { Puis celles relatives à la température {… { z Sauf si l’on rencontre certains faits … CLIPS : Stratégie de chaînage { Correspond à un tri par défaut des règles z z z z z z Largeur + salience Profondeur + salience Aléatoire Lexicale Complexité … CLIPS : calcul de la salience { Explicitée par l’utilisateur { Règles pré-définies : z z z Lors de l’activation des règles Lors de la définitions de règles A Chaque cycles CLIPS : conclusions { { { C Language Integrated Production System Version JAVA : Jess CLIPS et PL ? z z z { Chaînage avant Unification Mixage ? { « Quelle est donc cette fleur » [Aichelle] Beaucoup de Systèmes Experts définis en CLIPS Programmation Logique Parallèle { Quoi : paralléliser la résolution de Prolog a :- b,c,d. a :- c,d. a :- f. { % règle r1 % règle r2 % règle r3 prolog est séquentiel : scrutation des conjonctions (b puis c puis d) scrutation des disjonctions (r1 puis r2 puis r3) PLP : Pourquoi paralléliser prolog { Pas de justification de la scrutation séquentielle { Branches infinies { Optimisation PLP : Exemple concAplat(T1,T2,T3): aplatir(T1,T1P), aplatir(T2,T2P), conc(T1P,T2P,T3). { { conc peut commencer dès que l ’on a le début de T1P et de T2P. mieux : concAplat peut commencer dès que l ’on a le début de T1 et T2 (possibilité de listes infinies). z { lazy evaluation. problème : il existe une règle conc([],[],[]). PLP : Parallélisation des conjonctions a(X,Y) :- b(X,Z),c(Z,Q),d(X,Q,Y). en parallèle • problème d ’unification • priorités ? • direction (flots de données) • échec ou « suspension » PLP : Parallélisation des disjonctions -? couleur(X). en parallèle couleur(jaune). couleur(vert). couleur(orange). problème de choix indeterminisme problème de suspension PLP : Imposer des flots { Parlog { mode conc(?,?, ↑). mode applatir(?,↑). mode concApplat(?,?,↑). concApplat aplatir conc aplatir Concurrent Prolog PLP : Revoir l ’unification { Si une entrée est une variable z z z la règle n ’est pas en échec elle est « suspendue » ensuite : unification classique PLP : Exemple -? concAplat([a,[b]],[c,d],L): 2 1 aplatir([a,[b]],X) X=[a|X1] aplatir([[b]],X1) aplatir([c,d],Y) Y=[d|X2] aplatir([d],X2) Dès que 1 et 2 sont finies on peut lancer conc([a|X1],[b|X2],L) Si 1 va + vite que 2 on peut arriver à conc([a,b],[c|X2]). Si 2 va + vite que 1 on peut arriver à conc([a|X1],[c,d]). PLP : Indéterminisme { { { { par essence plusieurs processus peuvent être la source d ’une même variable. solution dépendante de la « vitesse » relative des processus. la solution est « logiquement » bonne PLP : Le retour arrière { n’existe plus z z z comme si chaque prédicat commençait par un ! toutes les unifications des têtes sont évaluées en parallèle l ’engagement : { la première tête unifiable trouvée a gagné z z z z z les autres sont abandonnées non déterministe choix délibéré : engagement dans une branche si la branche est en échec « fail » et c ’est tout on ne trouve qu’une solution ou aucune (incomplet) PLP : Limiter les engagements : les gardes « : » { { { régle :- g1,g2 : b1,b2. garde engagement si la garde est vraie sinon suspension : attente d ’une garde vraie mode on_ord_tree(?,↑,?). on_ord_tree(KEY,VALUE,bt(X,(KEY,VALUE),Y)). on_ord_tree(KEY,VALUE,bt(X,(KEY2,_),Y)):- KEY<KEY2 : on_ord_tree(KEY,VALUE,X). on_ord_tree(KEY,VALUE,bt(X,(KEY2,_),Y)):-KEY>KEY2 on_ord_tree(KEY,VALUE,Y):. PLP : Pas facile de trouver les gardes { Exemple de recherche sur un arbre non ordonné mode on_tree(?,↑,?). on_tree(KEY,VALUE,bt(X,(KEY,VALUE),Y)). on_tree(KEY,VALUE,bt(X,(_,_),Y)):on_tree(KEY,VALUE,X):. on_tree(KEY,VALUE,bt(X,(_,_),Y)):on_tree(KEY,VALUE,Y):. PLP : Quelques variantes { { { Concerne surtout le mécanisme de garde L’évaluation de la garde ne peut « envoyer » de résultats aux buts (sauf lors de l ’engagement) Que faire si la résolution des buts modifie la valeur de la garde ? z z z z Concurrent Prolog [Shapiro, 1983] Guarded Horn Clauses [Ueda 1985] Parlog [Gregory 1987] travaux récents : « Continuations for Parallel Logic Programming (2000) » [Eneia Todoran] Programmation en Logique Modale : PLM { Objectifs : z Expressivité Spécification plus « naturelle » { Modalité : vouloir, savoir, pouvoir, croire, devoir, possible { z Puissance { Extension du système de résolution (ou système de preuve) PLM : Rappel sur les systèmes formels théorie formaliser réel système formel Concept Principe Idée prédire fonctionne seul PLM : Rappel sur les systèmes formels complétude réel axiomatique modèle adéquation Notion de vérité {v,f} de validité Notion de preuve : théorèmes PLM : Calcul propositionnel Langage : propositions, connecteurs, règle d ’équivalence Axiomatique : 3 axiomes, 1 règle Modèle : tables de vérité d ’inférence Proposition langage naturel PLM : Logiques Modales Langage : propositions, connecteurs modaux, règle d ’équivalence Axiomatique : T S1..S5 Modèle : mondes possibles Modalités de raisonnement PLM : Paradoxe d’implication matérielle AB t t t f f t f f (A↔B) t f f t (A→B) t f t t (A∧B) t f f f (A∨B) t t t f Si A = f, A→B est vrai (quelque soit B) !! PLM : Modalités selon le dictionnaire { Linguistique z z z z { Comparer les langues Mots qui représentent des valeurs { Désirative, éventuelle, hypothétique, probable, possible, nécessaire … Représentant des opinions, attitudes, jugements, propositions Déontique, épistémique, aléthique … Logiciens z Fluctuation entre le nécessaire, le possible et le probable PLM : Modalités, différents courants { { Philosophie/logique Propositions modales z z Aristote : { Possibilité/nécessité Kant : { Problématique { Assertorique { z Logique classique : { Possibilité/impossibilité { Contingence/nécessité PLM : modalités (exemple de classification d’après Paul Laurendeau) Assertion assertion stricte Assertion subjective (selon mon expérience) Il fait chaud Il fait, selon moi, chaud Modalisation Modalité objective Modalité subjective Modalité Mixte Ontique (stabilité) Aléthique (fluctuation s à être) Épistémique (connaissance du sujet, fluctuation sur le connaître) Déontique (devoir être) -objectif +subjectif (morale) Volitive (désir, volonté) Négation d’une fluctuation, prise en charge, prise en compte Possible, probable, incertain. S’appuie sur un étalon extérieur au sujet Jugement de valeur + être et ne pas être dans le monde Subjectivité (je réclame) + être et n’être pas dans le monde Je dis qu’il vient Je t’assure qu’il vient Je vais peut-être visiter cette ville. Il va bien venir. Il est probable qu’il vienne Tu devrais rendre visite à ta mère Je veux qu’il vienne Je crois qu’il vient Je prétends qu’il viendra J’ai peutêtre visité cette ville Appréciative (bon/mauvaisnormal/étrang e) Je me réjouis qu’il vienne PLM : modalités (selon Antoine Culioli) PLM : Logiques Aléthiques { Opérateurs modaux : z z z { Possibilité : ◊ Nécessité : Modèles : mondes possibles Spécialisation : z z z z Logique des connaissances SAVOIR ◊ COMPATIBLE AVEC MES CONNAISSANCES Logique des croyances Logiques temporelle modales (toujours/parfois) … PLM : modèle : pas de table de vérité { Exemple z Fait : le ciel est bleu Ciel_bleu Bibliographie [Aichelle] Aichelle D., « Quelle est donc cette fleur », Fernand Nathan. [All 92] Alliot J.M. et al, « Implementing Prolog extensions : A Parallel Inference Machine », International Conference on Fifth Generation Computer System, 1992. [Bal 88] Balbiani P., Farinas del Cerro L. Herzig A, « Declarative semantics for modal logic programs », Proc. Int. Conf. On Fifth Generation Computer Systems (FGCS-88). [Dix 98] Dix J. et al « The Logic Programming Paradigm », AI Communication vol 11, pages 123-131, 1998. [Fish 93] Fisher M. et al, « An Introduction to Executable Modal and Temporal Logics » In Proc. of the IJCAI’93 workshop on Executable Modal and Temporal Logics, volume 897 of LNAI, pages 1-20, springerVerlag, 1993. [Ger 01] Gergatsoulis « Temporal and Modal Logic Programming Langages », Encyclopedia of Microcomputers, vol 27, supplement 6, pages 393-408, New-York, 2001. [Giarratano 98] Giarratano & Ripley, « Expert Systems, Principles and programming », PWS Publishing Compagny, 1998. [Gre 87] Gregory S. « Parallel Logic Programming in PARLOG », 1987. [Liu 98] Liu C. « A Temporal Reasoning Methodology for Concurrent Systems Using Chronolog (MC) », Proc of the 2st Australian Computer Science Conference, 1998. [Org 93] Orgun M.A « Chronolog(Z): Linear-time Logic programming », in Proc of the Fith International Conference on Computing and Information, pages 545-549, IEE Computer Society Press, 1993. [Ron 98] Rondogiannis P. et al, « Branching-time Logic Programming: The Language Cactus and its Applications », Computer Languages Vol 24, Issue 3, pages 155-178, 1998. [Sha 83] Shapiro, « Concurrent Prolog », 1983. [Tod 00] Eneia Tordoran, « Continuation for Parallel Logic Programming », 2000. [Ued 85] Ueda, « Guarded Horn Clauses », 1985. http://www.linguistes.com/mots/verbe.html http://www.cyberphilo.com/ http://www.irit.fr/ACTIVITES/EQ_ALG/Herzig/molog.html