ELFE - Cours 5
Transcription
ELFE - Cours 5
Dates I ELFE - Cours 5: Evaluation de Datalog TP0 programmation fonctionnelle : mardi 5 fev, 13h30-15h I Algorithme pour calcul de point fixe de programmes Datalog en temps linéaire, après grounding. I I I C. Kuttler Cours 1 programmation fonctionnelle : mercredi 6 fev 8h30-10h DS programmation logique : I Licence 3 informatique, Université Lille I I 1er février 2013 salles A11,A12 et A13 obligatoire pour tous les étudiant n’ayant pas fait la L2 au FIL lundi 11 fev 14h00-15h30, M1, Amphis Archimede et Chatelet documents de cours autorisés mardi 27/2 après-midi : rattrapages I I G4 : mercredi matin (créneau 2) G2 : a fixer 1 / 36 Resume 2 / 36 Comment estimer le temps de calcul d’une requête ? Introduction Estimation du temps de calcul pour atteignabilite dans graphe Illustration de l’algorithme Exemple 1 : accessibilité à partir d’une source Exemple 2 : la famille blonde Exemple 3 : les fêtards I au pire des cas, il faut calculer le point fixe du programme I exemple pour l’atteignabilité dans un graphe : calculer toutes les paires de noeuds atteignables (c(X , Y )) Grounding et temps de calcul Théorème : le point fixe d’un programme P peut être calculé en O(|ground(P)|), ou ground(P) est la forme close du programme. Algorithme 3 / 36 4 / 36 Accessibilité à partir de la source d’un graphe lien (1 ,2). lien (2 ,3). lien (3 ,1). acc ( 1 ) . a c c (Y) :− l i e n (X , Y) , a c c (X ) . I nombre de noeuds : n = 3 I nombre de liens : m = 3 acc 1 lien Accessibilité entre deux sommets arbitraires (variante 1) lien 2 a c c (X , X ) . a c c (X , Y) :− l i e n (X , Y ) . a c c (X , Y) :− a c c (X , Z ) , l i e n ( Z , Y ) . lien 3 I n sommets I m liens I dans le pire des cas, O(m · n) ≤ O(n3 ) I pour notre exemple, autant de liens que de sommets, donc n2 6 / 36 5 / 36 Accessibilité entre deux sommets arbitraires (variante 2) Combien de temps faut-il pour calculer le point fixe ? Atteignabilité dans un graphe avec n = 100 sommets. a c c (X , X ) . a c c (X , Y) :− l i e n (X , Y ) . a c c (X , Y) :− a c c (X , Z ) , a c c ( Z , Y ) . I n sommets I la deuxième règle est décisive I le cout pour le calcul des predicats IDB domine I n3 : pour X, n possibilités, fois n pour pivot Z, fois n pour Y choix de I I entre deux sommets : n3 = 1.000.000 = 106 (1 million) entre deux sommets X et Z , passant par un sommet Y intermédiaire : n4 = 109 = (1 milliard) I I X assez de temps pour aller manger ! :) entre deux sommets, passant par deux intermédiaires : n5 = 1012 chemin X-Y Y Z chemin Y-Z [sorry : analyse incomplete] 7 / 36 8 / 36 Calcul du point fixe d’un programme en temps linéaire Exemple 1 : Accessibilité à partir d’une source Dans le reste du cours, nous montrons comment on peut calculer le point fixe d’un programme en temps linéaire, sous condition d’avoir fait un pre-processing du programme, qui en soi a potentiellement un coût exponentiel (forme close, simplification, prédicats 0-aires) I illustration de la méthode avec trois exemples I finalement, l’algorithme même. lien (1 ,2). lien (2 ,3). lien (3 ,1). acc ( 1 ) . a c c (Y) :− l i e n (X , Y) , a c c (X ) . I nombre de noeuds : n = 3 I nombre de liens : m = 3 acc 1 lien lien 2 lien 3 10 / 36 9 / 36 Calcul du point fixe : 3 étapes Exemple 1 : accessibilité à partir d’une source Etape 1 : calculer la clôture du programme 1a : regles applicables 1. calculer la clôture du programme I contient uniquement des constantes. pas de variables. I comment rendre un programme datalog clos ? 1a. I I I I acc ( 1 ) . l i e n ( 1 , 2 ) . l i e n ( 2 , 3 ) . l i e n ( 1 , 3 ) . a c c ( 2 ) :− l i e n ( 1 , 2 ) , a c c ( 1 ) . a c c ( 3 ) :− l i e n ( 2 , 3 ) , a c c ( 2 ) . a c c ( 1 ) :− l i e n ( 3 , 1 ) , a c c ( 3 ) . les faits EDB les instance de règles applicables (cours 2) 1b : simplification : éliminations des faits connus pour prédicats EDB. leur valeur logique étant TRUE, ils n’y aura plus rien a vérifier pour eux. 1b. simplifaction : elimination de redondaces (faits pour predicats EDB) 2 : remplacer les termes clos par des prédicats 0-aires. 3 calculer le point fixe du programme, de manière économique. algo complet en fin de cours acc ( 1 ) . a c c ( 2 ) :− a c c ( 3 ) :− a c c ( 1 ) :− 11 / 36 acc ( 1 ) . acc ( 2 ) . acc ( 3 ) . 12 / 36 Exemple 1 : (cont.) Algo pour calcul du point fixe (au tableau) Préliminaires : Étape 2 : remplacer les termes clos par des prédicats 0-aires (ou : constantes) I Après clôture et simplification. I Tous les prédicats sont 0-aires (constantes) acc1 . a c c 2 :− a c c 1 . a c c 3 :− a c c 2 . a c c 1 :− a c c 3 . I Prédicats : renommage en p1, p2, . . . pn Structures de données I Memo : array prédicats : booléens I Étape 3 : calculer le point fixe du programme, de manière économique I appliquer chaque règle une seule fois. I mémoriser ce qui était déjà prouvé (memo) I pour chaque règle, savoir combien d’hypothèses sont encore ouvertes (compteur par règle) I I I Compteurs : nombre d’hypothèses ouvertes par règle (buts dans corps) ou faits (0). Agenda : stack (l’ordre n’importe moins, que chaque prédicat n’y soit mis qu’une fois.). I I début : tout est FAUX fin : tout ce qui a pu être déduit est VRAI ce qui est encore a faire Occurs : pour chaque prédicat, la liste des règles où il apparaı̂t dans le corps. 13 / 36 Observation 14 / 36 Exemple 2 : la famille tom grace jack amy grace à la table MEMO I I b l o n d (Y) :− p e r e (X , Y ) , mere ( Z , Y ) , b l o n d (X ) , blond (Z ) . acc1 n’est pas re-mis sur l’agenda une deuxième fois (pour la règle 3) l’algo n’entre pas dans boucle infinie 15 / 36 carol2 fred carol3 On sait que tom, grace et jack sont blonds, et que carol 2 ne l’est pas. Qu’en est-il des autres membres de la famille ? Calcul du point fixe du prédicat BLOND 16 / 36 la famille : après grounding (étapes 1+2) b1 b1 . b2 . b4 . b3 :− b1 , b2 . b5 :− b3 , b4 . b7 :− b5 , b6 . Renommage des persoones en 1,. . . ,7, signification des prédicats 0-aires : b1 = blond(personne1), . . . Simplification : supression des faits pour prédicats EDB (pere/2,mere/2). Exemple 3 b2 Illustration : b4 b3 chris didier bruno Considérons le système suivant, après l’étape 2. not b6 b5 b7 b. c. a :− c , b . b :− a , d . On sait que tom (1), grace (2) et jack (4) sont blonds, mais que carol2 (6) ne l’est pas. Qu’en est-il des autres membres de la famille, c’est à dire de amy(3), fred(5) et carol3 (7) ? application de l’algo au tableau I bruno offre ne biere. I chris offre une bière. I anne offre une bière, si bruno et chris en offrent. I bruno offre une bière, si anne et didier en offrent. Qui offre une bière ? 18 / 36 17 / 36 Algo : calcul du point fixe pour l’exo 3 Théorème Calcul du point fixe en temps linéaire Le point fixe d’un programme Datalog clos peut être calculé en temps linéaire, en fonction de la taille du programme, après grounding. Exo fait en amphi. Confirme l’intuition : anne offre egalement une bierre, comme bruno et chris. Par contre, didier n’en offre pas. G. Gottlob et al. Datalog LITE : a deductive query language with linear time model checking. ACM Transactions on Computational Logics 3 (1) (2002) 42–79. 19 / 36 20 / 36 N = number o f p r e d i c a t e s o f D M = number o f r u l e s o f D ( f a c t s=r u l e s w i t h 0 h y p o t h e s e s ) Agenda = s t a c k . new ( n i l ) Memo = a r r a y . new (N) C o u n t e r = a r r a y . new (M) O c c u r s = a r r a y . new (N for a l l r u l e s R in D i f C o u n t e r [ R]= 0 t h e n Agenda . push ( head (R ) ) e l s e s k i p w h i l e Agenda . isNonEmpty ( ) do P = Agenda . pop ( ) Memo [ P ] := t r u e f o r a l l r u l e s R i n O c c u r s (P) C o u n t e r [ R ] := C o u n t e r [ R ] − 1 i f C o u n t e r [ R]=0 then l e t Q = head o f r u l e R i f Memo [Q]= t r u e t h e n s k i p e l s e Agenda . push (Q) else skip end end end Algo : calcul de point fixe du programme D. structure de données et leurs initialisations N = nombre de prédicats de D M = nombre de règles de D (faits = règles avec 0 hypothèses) Agenda = stack.new(nil) Memo = array.new(N) //initialisation : tout faux Counter = array.new(M) // init : Counter[i] = length of rule i’s body Occurs = array.new(N // Occurs(i) : list of rule numbers with i in body 21 / 36 Implications du théoreme I Application à la recherche de chemins dans un graphe : traversée de graphes en temps linéaire. I test si le langage reconnu par un automate (FSA) est vide en temps linéaire (langage régulier) I réponse à requêtes XPath en temps linéaire I parsing de grammaires algébriques en n3 (n=taille de la grammaire) I ... Implémentation d’évalateur de datalog avec votre langage préféré, assez facile I I peut-être en TP en programmation fonctionnelle 23 / 36 22 / 36