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 logiques par contraintes
{ Programmation fonctionnelle
{ CLIPS
{ SOAR
{ Programmation logique parallèle
{ Programmation des logiques modales
{ Programmation des logiques temporelles
{ Programmation logique inductive
{ Programmation 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
{ 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 lambda- fonctions est l ’ensemble des termes du lambda- calcul
z Applications
{ Mathématiques
{ Informatique
{ Linguistique
PF : lambda calcul
Partir en véhicule En utilisant Un traineau Appliquer la
consigne au véhicule
consigne
Partir en traineau
• Langage naturel
PF : lambda-calcul
Partir en x En utilisant Un traineau λ.x
consigne
Partir en traineau
• Lambda Langage
PF : lambda calcul
λ.x(partir en x) traineau
• Lambda-calcul
PF : lambda calcul
{
Mise en cascade
{
Réduction
λ.y(λ.x(partir en x y) traîneau) bleu)
λ.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 Parler de fonctions sans connaitre leur “valeur”
z Fonctions d’ordres supérieurs
{ Languages :
z LISP
z Miranda
z OCaml
z Haskell
PF : conclusion (2/2)
{
PF et PL
z Pas d’unification ni de retour arrière
z Ordre supérieur
z 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
Agenda Base de règles
règles
Type de faits
Appariement (Rete)
Règles « activables »
Faits
activation réfraction
production
cycle
CLIPS : Mots clés
Agenda Base de règles
règles
Type de faits
assert/modify
duplicate/retract/deffacts/reset
appariement
defrule
run<n>
Règles « activables »
Faits
deftemplate
activation réfraction
refresh
production
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 Largeur + salience
z Profondeur + salience
z Aléatoire
z Lexicale
z Complexité
z …
CLIPS : calcul de la salience
{
Explicitée par l’utilisateur
{
Règles pré-définies :
z Lors de l’activation des règles
z Lors de la définitions de règles
z A Chaque cycles
CLIPS : conclusions
{ C Language Integrated Production System
{ Version JAVA : Jess
{ CLIPS et PL ?
z Chaînage avant
z Unification
z 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. % règle r1 a :- c,d. % règle r2
a :- f. % 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(jaune).
couleur(vert).
couleur(orange).
-? couleur(X).
en parallèle problème de choix
indeterminisme
problème de suspension
PLP : Imposer des flots
{ Parlog
mode conc(?,?, ↑).
mode applatir(?,↑).
mode
concApplat(?,?,↑).
{ Concurrent Prolog
concApplat aplatir
aplatir
conc
PLP : Revoir l ’unification
{
Si une entrée est une variable
z la règle n ’est pas en échec
z elle est « suspendue »
z ensuite : unification classique
PLP : Exemple
-? concAplat([a,[b]],[c,d],L):
aplatir([a,[b]],X) aplatir([c,d],Y)
aplatir([[b]],X1)
X=[a|X1]
aplatir([d],X2)
Y=[d|X2]
1 2
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 comme si chaque prédicat commençait par un !
z toutes les unifications des têtes sont évaluées en parallèle
z l ’engagement :
{ la première tête unifiable trouvée a gagné
z les autres sont abandonnées
z non déterministe
z choix délibéré : engagement dans une branche
z si la branche est en échec « fail » et c ’est tout z on ne trouve qu’une solution ou aucune
(incomplet)
PLP : Limiter les engagements : les gardes « : »
{
régle :- g1,g2 : b1,b2.
{
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):.
garde
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 Concurrent Prolog [Shapiro, 1983]
z Guarded Horn Clauses [Ueda 1985]
z Parlog [Gregory 1987]
z 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
réel système
formel
théorie formaliser
prédire
fonctionne seul
Concept Principe Idée
PLM : Rappel sur les systèmes formels
modèle axiomatique
Notion de vérité {v,f}
de validité
Notion de preuve : théorèmes
complétude
adéquation
réel
PLM : Calcul propositionnel
Proposition langage naturel
Axiomatique : 3 axiomes, 1 règle d ’inférence
Modèle : tables de vérité
Langage : propositions, connecteurs, règle d ’équivalence
PLM : Logiques Modales
Modalités
de raisonnement
Axiomatique : T
S1..S5
Modèle : mondes possibles
Langage : propositions, connecteurs modaux, règle d ’équivalence
PLM : Paradoxe d’implication matérielle
A B (A↔B) (A→B) (A∧B) (A∨B)
t t t t t t
t f f f f t
f t f t f t
f f t t f f
Si A = f, A→B est vrai (quelque soit B) !!
PLM : Modalités selon le dictionnaire
{ Linguistique
z Comparer les langues
z Mots qui représentent des valeurs
{ Désirative, éventuelle, hypothétique, probable, possible, nécessaire …
z Représentant des opinions, attitudes, jugements, propositions
z 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 Aristote :
{ Possibilité/nécessité
z Kant :
{ Problématique
{ Assertorique
{
z Logique classique :
{ Possibilité/impossibilité
{ Contingence/nécessité
PLM : modalités (exemple de
classification d’après Paul Laurendeau)
Subjectivité (je réclame) + être et n’être pas dans le monde Jugement de
valeur + être et ne pas être dans le monde Possible,
probable, incertain.
S’appuie sur un étalon extérieur au sujet Négation
d’une fluctuation, prise en charge, prise en compte assertion stricte
Assertion subjective (selon mon
expérience)
Je veux qu’il vienne Tu devrais
rendre visite à ta mère Je me réjouis
qu’il vienne Je crois qu’il
vient
Je prétends qu’il viendra J’ai peut- être visité cette ville Je vais
peut-être visiter cette ville.
Il va bien venir.
Il est probable qu’il vienne Je dis qu’il
vient Je t’assure qu’il vient Il fait chaud
Il fait, selon moi, chaud
Volitive (désir, volonté) Déontique
(devoir être) -objectif +subjectif (morale) Appréciative
(bon/mauvais- normal/étrang e)
Épistémique (connaissance du sujet, fluctuation sur le connaître) Aléthique
(fluctuation s à être) Ontique
(stabilité)
Modalité Mixte
Modalité subjective Modalité
objective
Modalisation Assertion
PLM : modalités (selon Antoine Culioli)
PLM : Logiques Aléthiques
{ Opérateurs modaux :
z Possibilité : ◊
z Nécessité :
z Modèles : mondes possibles
{ Spécialisation :
z Logique des connaissances SAVOIR
◊ COMPATIBLE AVEC MES CONNAISSANCES
z Logique des croyances
z Logiques temporelle modales (toujours/parfois)
z …
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