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