ELFE - Cours 3

Transcription

ELFE - Cours 3
Contenu
Révision : arbre de preuve
ELFE - Cours 3
Mémoization
Sûreté de Datalog
Négation en Datalog
Négation par l’êchec
Sûreté
Exemples à ne pas suivre
Graphe de dépendances
C. Kuttler
Licence 3 informatique, Universite Lille
19 janvier 2013
Negation et récursion
Paradoxe du barbier
Stratification
2 / 27
1 / 27
Arbre de preuve
Comment expliquer l’absence de boucle infinie ?
I
racine : but à prouver (une requête)
I
noeuds : internes : faits à prouver
a (X) :− b (X ) .
I
labels des noeuds : règle permettant d’aller d’aux enfants
(corps de règle au parent (tête de règle))
b (X) :− a (X ) .
I
feuilles : faits de EDB
I
si, aux feuilles, on n’arrive pas à des faits de la EDB, la preuve
n’a pas fonctionné.
% test . dl
I
DES rend le résultat rapidement pour la requête a(4)
I
pourtant, la construction de l’arbre de preuve devrait
continuer à l’infini (d’après ce que nous avons vu)
Memoization
Technique d’optimisation de code visant à réduire le temps
d’exécution. Datalog mémorise les faits qu’il a déjà prouvés, ou
tenté de prouver. Évite de répéter le même calcul deux fois. Cette
technique est absente en Prolog (démo).
Commande : list et
C Koch, Cornell
3 / 27
4 / 27
Négation par l’échec
Motivation pour la sûreté
I
Le résultat d’une requête doit être une relation finie
I
Certains types de buts (sous-requetes) génèrent un nombre
infinis de lignes, alors qu’il est impossible que la table d’une
relation R soit de taille illimitée
I
il faut éliminer maximum les warnings unsafe
a :− not ( b ) .
b :− c .
Si, avec le programme suivant, on pose la requete a, Datalog doit
tester si not(b) est vrai. Pour cela, Datalog cherche une preuve
pour b. Ceci échoue, puisque le fait c n’est pas donné. Datalog
conclut que not(b) est vrai. Et par conséquent a est vrai.
Règle de sûreté
Chaque variable d’une règle doit apparaı̂tre dans un sous-but
relationnel, défini par l’utilisateur, sans négation.
Sources de problèmes : prédicats prédéfinis (comparaisons,
négation . . . )
6 / 27
5 / 27
Mauvais exemple avec variable
Mauvais exemples avec comparaison et arithmétique
% insecure1 . dl
p (X) :− X>10.
c (X) :− d .
d.
% insecure2 . dl
Permet de prouver un nombre infini de faits.
%%c (X) :− d .
%%d .
c (Y) :− c (X ) , Y+1=X .
Requêtes closes vs requêtes avec variables.
7 / 27
8 / 27
Mauvais exemples avec négation
Résumé
Une règle est sure, quand
chaque variable
c e l i b a t a i r e (X) :− not ( m a r i e (X , Y ) ) .
c e l i b a t a i r e (X) :− p e r s o n n e (X ) , not ( m a r i e (X , Y ) ) .
homme(X) :− not ( femme (X ) ) .
Chaque variable d’une règle doit apparaı̂tre dans le corps, sous
forme positive, dans un prédicat.
I
dans la tête
I
dans une négation
I
dans une comparaison
apparaı̂t également dans un prédicat positif IDB ou EDB du corps
de la regle.
Pour les regles sures
le résultat d’une requête est toujours de taille finie.
10 / 27
9 / 27
Une petite aide avec DES
Graphe de dépendances
Réarrangèrents
I
transformations syntaxiques automatiques
I
nouvel ordre à l’intérieur du corps d’une règle
I
pour la rendre calculable de gauche à droite
I
mode safe
I
comparer l’avant et après
a :− not ( b ) .
b :− c , d .
c :− b .
c.
% negation . dl
>DES
/ s a f e on
/ assert q (0)
/ a s s e r t p (X) :− not ( q (X ) )
Il n’y pas de solution magique. En général, la sûreté est indécidable.
11 / 27
12 / 27
Graphe de dépendances
Négation et récursion
I
I
I
I
I
I
P + Q : regle avec tête P ,et dans le corps Q
I
P–Q : règle avec tête P , dans le corps not(Q)
en combinaison avec la récursion, la négation ouvre un
nouveau niveau de complexité
ce phénomène est connu et craint depuis l’antiquité
il mène à des paradoxes logiques
il peut ne pas exister de solution unique et minimale
malgré la sûreté des règles
DES>/pdg
Nodes : [ d / 0 , a / 0 , b / 0 , c / 0 ]
A r c s : [ a/0−b / 0 , c/0+b / 0 , b/0+d / 0 , b/0+c / 0 ]
13 / 27
Le paradoxe du barbier
I
Le problème de la négation avec récursion
dans un village, deux catégories d’hommes
I
I
I
14 / 27
se rasent eux-mêmes
ne se rasent pas eux-mêmes
p (X) :− r (X ) , not ( q (X ) ) .
q (X) :− r (X ) , not ( p (X ) ) .
le barbier rase tous ceux qui ne rasent pas eux-mêmes
homme( b a r b i e r ) .
homme( m a i r e ) .
r a s e ( b a r b i e r , H) :−
Plusieurs modèles minimaux / points fixes, supposant validité de
r (a) :
%b a r b i e r . d l
homme(H) , not ( r a s e (H, H ) ) .
I
soit, p(a) est valide, et q vide
I
ou, q(a) est valide, et p vide
I
Absence de solution unique. On ne peut pas dire si p(a) est
valide, ou q(a).
I
La sémantique n’est pas claire. Aucune garantie pour la
validité résultats.
Paradoxe : si le barbier. . .
I
ne se rase pas lui-même : il doit donc être rasé par le barbier !
I
se rase lui même : alors, il ne fait pas appel au barbier. Mais,
pourtant, c’est lui le barbier !
Datalog : valeur logique undefined. warning : not stratisfiable.
15 / 27
16 / 27
Programme stratifié
Programme avec cycle negatif : non stratifiable
1. Graphe de dépendances
décrit les dépendances
mutuelles des prédicats
2. Datalog stratifié : interdit les
cycles incluant des négations
dans les graphes de
dépendances de prédicats
r (X)
p (X)
s (X)
q (X)
v (X)
t (X)
3. La sémantique est claire pour
les programmes stratisfiables.
:−
:−
:−
:−
:−
:−
p (X) , not ( q (X ) ) .
not ( s (X ) ) .
e (X ) .
not ( v (X ) ) .
t (X ) .
q (X ) .
% stratum1 . dl
17 / 27
Remarque
18 / 27
Calcul des strates
Le calcul des strates en DES diffère légèrement de la méthode de
référence, présentée en cours le 17 janvier. Ce choix de DES permet
de considérer les graphes de dépendances incluant aussi bien les
prédicats EDB que IDB, et donc, de simplifier la compréhension.
Ces notes de cours ont été adaptées a l’algorithme de DES. Avec
ceci, le calcul manuel des strates rend le même résultat que DES.
Le point essentiel reste que les programmes avec cycles incluant
des dépendances négatives ne sont pas stratisfiables.
19 / 27
I
initialisation : tous les noeuds ont la valeur 1
I
pour chaque noeud, on considère les chemins terminant dans
ce noeud.
I
la valeur augmente de 1 par flèche négative, dans un chemin
de dépendances terminant dans ce prédicat
I
le strate d’un prédicat est la valeur maximale dans un chemin
terminant dans ce prédicat.
20 / 27
Exemple : calcul des strates
Exemple
Ce programme est stratifié :
r (X) :−
p (X) :−
s (X) :−
q (X) :−
e (999).
v (999).
I
Strate 1 : e, s et v
I
Strate 2 : p et q
I
Strate 3 : r
r (X) :−
q (X) :−
p (X) :−
s (X) :−
e (999).
v (999).
p (X) , not ( q (X ) ) .
not ( s (X ) ) .
e (X ) .
not ( v (X ) ) .
p (X) , not ( q (X ) ) .
not ( v (X ) ) .
not ( s (X ) ) .
e (X ) .
Affichage des strates :
DES> / s t r a t a
[( e /1 ,1) ,( s /1 ,1) ,( v /1 ,1) ,( p /1 ,2) ,( q /1 ,2) ,( r /1 ,3)]
21 / 27
Autrement dit
I
strate 1 : ces prédicats ne dépendent d’aucun prédicat sous
négation
I
strate 2 : dépend de prédicat négatif du strate 1
I
strate 3 : dépend de prédicat négatif du strate 2
I
...
I
strate n : dépend de prédicat IDB négatif du strate n − 1
22 / 27
Autre perspective
Un programme stratifié peut être parsé tel que chaque relation IDB
est définie avec des règles précédentes, avant d’avoir besoin de sa
négation.
Programmes non stratifiables
Un cycle incluant une négation mène a des valeurs infinies. Un tel
programme n’est pas stratisfiable.
23 / 27
24 / 27
Évaluation de programmes Datalog stratifiés
Commandes DES
Les programmes Datalog stratifiés ont la sémantique opérationnelle
suivante :
I
Calcule les prédicats IDB du strate 1 (avec la stratégie du
point fixe)
I
...
I
Utilisant des prédicats IDB du strate n, calcule les prédicats
IDB du strate n + 1
DES>
DES>
DES>
DES>
\list et
\ safe
\ pdg
\strata
%
%
%
%
i n f o r m a t i o n memorisee
t r a n s f o r m a t i o n s u r e : ON ou OFF
p r e d i c a t e dependency graph
strates
Ainsi, on obtient une solution minimale pour tous les prédicats
IDB.
25 / 27
Résumé
I
sûreté
I
négation
I
mémoization
I
graphes de dépendances
I
négation et récursion
I
stratification
27 / 27
26 / 27