Datalog

De testwiki
Version datée du 16 mai 2023 à 05:03 par imported>WikiCleanerBot (v2.05b - Correction syntaxique (Ponctuation avant une référence))
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Modèle:Ébauche Modèle:Infobox Langage de programmation

Datalog est un langage de requête et de règles pour les bases de données déductives. Il correspond à un sous ensemble de Prolog. Ses origines remontent aux débuts de la programmation logique.

Syntaxe

Datalog a la syntaxe suivante[1]Modèle:,[2]. On fixe:

  • Un ensemble 𝒳, dont les éléments sont appelés variables
  • Un ensemble 𝒟, dont les éléments sont appelés constantes
  • Un schéma relationnel 𝑆𝑐, c'est-à-dire un ensemble fini de prédicats, à chaque prédicat étant associé un entier positif ou nul appelé arité
  • Une partition de ce schéma relationnel en deux sous-schémas, le schéma intensionnel et le schéma extensionnel (les prédicats sont donc soit intensionnels, soit extensionnels)
  • Un prédicat intensionnel distingué [3] 𝐵𝑢𝑡

Une règle Datalog est une expression de la forme: S(𝐲)R1(𝐱1),,Rn(𝐱n)S est un prédicat intensionnel, R1Rn sont des prédicats intensionnels ou extensionnels, et 𝐱1𝐱n et 𝐲 sont des n-uplets d'éléments de 𝒳𝒟, dont l'arité est compatible avec celle des prédicats. S(𝐲) est appelé la tête de la règle, R1(𝐱1),,Rn(𝐱n) son corps. On impose que chaque variable y𝒴 apparaissant dans la tête de la règle apparaisse également dans son corps.

Un programme Datalog est un ensemble fini de règles Datalog.

Sémantique

Fixons une instance I0 du schéma extensionnel, c'est-à-dire une base de données relationnelle dont les tables sont des instances des prédicats extensionnels. Un programme Datalog P définit une requête sur cette base de données [1]Modèle:,[2], l'arité de cette requête étant l'arité du prédicat 𝐵𝑢𝑡.

Pour définir cette sémantique, observons tout d'abord que chaque règle rP de la forme S(𝐲)R1(𝐱1),,Rn(𝐱n)peut être vue comme une requête sur des instances du schéma relationnel :r(I):={S(𝐲)z1zkR1(𝐱𝟏)IRn(𝐱𝐧)I}{z1zk}est l'ensemble des variables de 𝒳 apparaissant dans le corps de la règle r.

Introduisons l'opérateur de conséquence ΓP qui transforme une instance du schéma relationnel 𝑆𝑐 en une autre instance de ce même schéma, formée de l'instance initiale et de toutes ses conséquences par chaque règle de P : ΓP(I):=IrP{r(I)}. Pour n, posons In+1:=ΓP(In). Le résultat de l'évaluation de P sur I0, noté P(I0), est 𝐵𝑢𝑡(I), où Iest le point fixe de la suite (In)n. L'existence de ce point fixe est garanti [1]Modèle:,[2] par le fait que ΓP est un opérateur croissant, via une application élémentaire du théorème de Knaster-Tarski.

Implémentations

pyDatalog est un module qui ajoute Datalog à la bibliothèque de Python.

De même Datalog est un module pour OCaml.

Notes

Modèle:References

Articles connexes

Modèle:Portail