où les Ajsont des atomes sur Vet les xisont des variables apparaissant dans les Aj.
Il s’agit d’une formule logique positive, conjonctive, où le seul quantificateur est exis-
tentiel. On dit qu’une formule est fermée si chacune de ses variables est dans la portée
d’un quantificateur (existentiel ici). Dans la suite, on considérera qu’une formule de
FOL(∧,∃)est fermée par défaut (c’est-à-dire s’il n’est pas précisé qu’elle ne l’est pas).
Pour les formules fermées de FOL(∧,∃), on peut sans ambiguïté adopter une notation
ensembliste :{A1...,Ap}. Petit bémol, les formules ∃x(p(x)∧p(x)) et ∃xp(x)se
codent toutes les deux par le même ensemble p(x), mais ce n’est pas grave car ces
deux formules sont trivialement équivalentes.
Que peut-on représenter avec ce fragment dans le cadre des problèmes qui nous
intéressent ?
— des faits : un fait est une formule de FOL(∧,∃)fermée ; remarquer qu’un
ensemble de faits peut se coder comme un seul fait. Les faits permettent no-
tamment de représenter les tables d’une base de données relationnelle ("une
instance de base de données"), un ensemble de triplets RDF, ou une base de
graphes. En particulier, une instance de BD relationnelle peut être vue comme
une conjonction d’atomes complètement instanciés si elle ne contient pas de
valeur manquante (sinon, les valeurs manquantes sont représentées par des va-
riables quantifiées existentiellement).
— des requêtes conjonctives : une requête conjonctive est une formule de FOL(∧,∃),
pas forcément fermée. Les variables libres (non quantifiées) correspondent à
des variables distinguées qui constituent la partie “réponse” de la requête : par
exemple, la requête qui consiste à "trouver tous les patients atteints d’un cancer"
pourrait s’exprimer par la formule ∃y(patient(x)∧atteint(x, y)∧cancer(y))
(on attend en réponse toutes les valeurs trouvées pour x). Une requête conjonc-
tive est booléenne si elle est fermée ; par exemple la requête qui consiste à de-
mander "s’il existe un patient atteint d’un lymphome" pourrait s’exprimer par
la formule ∃x∃y(patient(x)∧atteint(x, y)∧lymphome(y)) (ici, la réponse
attendue est oui/non).
Notez que nous adopterons par la suite la notation Datalog pour les requêtes conjonc-
tives, avec le prédicat spécial "answer" pour désigner la partie réponse (parfois on uti-
lise aussi la notation qpour query). Soit, avec les exemples ci-dessus :
answer(x)←patient(x), atteint(x, y), cancer(y).
answer() ←patient(x), atteint(x, y), lymphome(y).
En cours, nous avons détaillé le lien avec les bases de données relationnelles.
Nous avons en particulier vu que les requêtes conjonctives correspondent à des requêtes
SQL de la forme “SELECT ... FROM ... WHERE", où la partie WHERE est composée
d’une conjonction d’égalités. En termes d’algèbre relationnelle, les opérateurs utilisés
sont la restriction, la jointure et la projection.
Définissons maintenant ce qu’est une réponse à une requête conjonctive.
Rappelons qu’une susbtitution d’un ensemble de variables Vpar un ensemble de
termes Test une application de Vdans T. Etant donnée une formule fde FOL(∧,∃),
appliquer une subsitution Sàfconsiste à remplacer chaque variable xde fqui ap-
partient au domaine de Spar son image S(x)(et à supprimer les quantificateurs exis-
tentiels qui portent sur des variables remplacées par des constantes). On note S(f)la
formule obtenue.
Soit Fune base de faits (qui peut être vue comme un seul fait) et Qune requête
conjonctive booléenne. La réponse à Qdans Fest oui s’il existe un homomorphisme
3