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