• Aucun résultat trouvé

Au cours de notre thèse, nous avons aussi développé un opérateur de réécriture supplémentaire aram dans le but de diminuer le nombre de requêtes générées lors de la réécriture avec sra. Bien qu’adéquat et complet, cet opérateur n’est pas élagable au sens de la définition 3.8. Nous pensons néanmoins que l’algorithme 1 associé à cet opérateur produit un ensemble de réécritures complet grâce à une propriété d’élaga- bilité moins locale que celle proposée précédemment. En revanche, la propriété qui nous permettrait de prouver que la sortie de l’algorithme 1 est complète avec aram reste à trouver.

Le but de cet opérateur est d’éviter de générer des requêtes identiques. Lorsque deux unificateurs par pièce µ1et µ2 portent sur des morceaux différents de la requête,

on a la possibilité de les appliquer l’un après l’autre dans les deux ordres, µ1 puis µ2

et µ2puis µ1, cela produira la même réécriture obtenue par deux “chemins” différents.

Voici, dans l’exemple suivant, une illustration de ce phénomène.

Exemple 42 Soit Q = p(u, w) ∧ r(u, v) une requête, R1 = q(x) → p(x, y) et R2 =

t(x′) → r(x, y) deux règles. Il existe deux unificateurs mono-pièce agrégés µ 1 =

({p(u, w)}, {p(x, y)}, {{u, x}, {w, y}}) de Q avec R1 et µ2 = ({r(u, v)}, {r(x′, y′)},

{{u, x′}, {v, y}}) de Q avec R 2.

En appliquant µ1 sur Q on obtient Q1 = q(u) ∧ r(u, v) sur laquelle on peut

appliquer µ2 et obtenir Q12 = q(u) ∧ t(u). En appliquant µ2 sur Q on obtient Q2 =

p(u, w) ∧ t(u) sur laquelle on peut appliquer µ1 et obtenir Q21= q(u) ∧ t(u).

Or Q12 et Q21 sont identiques.

Afin d’éviter la génération de requêtes identiques liée à ce phénomène, nous avons développé un opérateur de réécriture aram qui calcule en une étape les réécritures obtenues avec les unificateurs mono-pièce agrégés et, en utilisant l’agrégation, les réécritures que l’on aurait obtenues après l’enchaînement de plusieurs de ces uni- ficateurs compatibles. En effet, soit µ1 et µ2 deux unificateurs mono-pièce agrégés

compatibles, la réécriture produite par µ1 ⋄ µ2 est plus générale que la réécriture

produite par l’application de µ1 puis µ2 ou µ2 puis µ1. Ainsi, on obtient en un pas

toutes les réécritures impliquant ces unificateurs. Pour éviter de calculer à nouveau ces réécritures, on utilise un système de marquage qui empêche que ces unificateurs soient utilisés une autre fois. Le système de marquage marque tous les atomes nou- vellement ajoutés, et un unificateur doit pour être utilisé unifier au moins un atome marqué.

Définition 4.16 (Marquage d’atomes) Soit Q une requête, µ = (Q′, C, P ) un

unificateur par pièce de Q avec une règle R, β(Q, R, µ) = P (hyp(R)) ∪ P (Q \ Q′).

Les atomes marqués de β(Q, R, µ) sont les atomes de P (hyp(R)).

Une requête marquée est une requête qui contient des atomes marqués selon la règle de marquage précédente. Tous les atomes de la requête initiale sont supposés marqués.

4.6. PERSPECTIVE D’AMÉLIORATION 65

L’opérateur de réécriture aram associe à une requête marquée Q et à un ensemble de règles, toutes les réécritures produites par un unificateur mono-pièce agrégé µ = (Q′, C, P ) dont Qcontient au moins un atome marqué. De plus, il associe aussi

toutes les réécritures produites par toutes les agrégations possibles des unificateurs compatibles utilisés pour produire la première partie des réécritures.

Dans la figure 4.2, on peut retrouver l’illustration des réécritures produites par sra à partir de la requête et des règles de l’exemple 42, dans la figure 4.3, celle des réécritures produites pas l’opérateur aram s’il ne tenait pas compte du marquage et enfin dans la figure 4.4 celles produites par l’opérateur aram tenant compte du marquage (les atomes soulignés sont les atomes marqués).

Figure 4.2 – Exemple 42 - sra

Figure 4.4 – Exemple 42 - aram

Voici sur un exemple le comportement de aram, illustrer par la figure 4.5, où le soulignement signifie qu’un atome est marqué.

Exemple 43 Soit Q = p(u, w)∧r(u, v)∧s(u, z) une requête, R = {R1, R2, R3, R4, R5}

un ensemble de règles avec R1 = q(x) → p(x, y), R2 = t(x) → r(x, y), R3 = h(x) →

s(x, y), R4 = g(x) → h(x) et R5 = f (x) → h(x). Q étant la requête initiale, tous

ses atomes sont marqués.

Il existe trois unificateurs mono-pièce agrégés utilisant un atome marqué :

• µ1 = ({p(u, w)}, {p(x, y)}, {{u, x}, {w, y}}) de Q avec R1,

• µ2 = ({r(u, v)}, {r(x, y)}, {{u, x}, {v, y}}) de Q avec R2,

• µ3 = ({s(u, z)}, {s(x, y)}, {{u, x}, {z, y}}) de Q avec R3.

µ1, µ2 et µ3 sont compatibles. aram produit donc à partir de Q et R les réécritures

avec µ1, µ2, µ3, µ1 ⋄ µ2, µ1 ⋄ µ3 et µ1 ⋄ µ2 ⋄ µ3 respectivement qui correspondent

aux requêtes Q1 = q(u) ∧ r(u, v) ∧ s(u, z), Q2 = p(u, w) ∧ t(u) ∧ s(u, z), Q3 =

p(u, w) ∧ r(u, v) ∧ h(u), Q4 = q(u) ∧ t(u) ∧ s(u, z), Q5 = p(u, w) ∧ t(u) ∧ h(u) et

Q6 = q(u) ∧ t(u) ∧ h(u) respectivement.

A partir de Q1, aram ne produit aucune réécriture car les unificateurs mono-pièce

agrégés µ2, µ3, qui existent sur Q1 ne réécrivent pas d’atomes marqués.

A partir de Q2, aram ne produit aucune réécriture car les unificateurs mono-pièce

agrégés µ1, µ3, qui existent sur Q2 ne réécrivent pas d’atomes marqués.

A partir de Q3, aram ne produit aucune réécriture avec µ1, µ2 car ils ne ré-

écrivent pas d’atomes marqués. En revanche, il produit deux réécritures avec µ4 =

({h(u)}, {h(x)}, {{u, x}}) et µ5 = ({h(u)}, {h(x)}, {{u, x}}) deux unificateurs par

pièce agrégés de Q avec R4 et R5 respectivement. Ces réécritures sont Q7 = p(u, w)∧

r(u, v) ∧ g(u) et Q8 = p(u, w) ∧ r(u, v) ∧ f (u) respectivement. Par contre, µ4 et µ5

ne sont pas compatibles, il ne produit donc pas de réécritures avec µ4⋄ µ5.

A partir de Q4, aram ne produit aucune réécriture avec µ3, car il ne réécrit pas

4.6. PERSPECTIVE D’AMÉLIORATION 67

A partir de Q5, aram ne produit aucune réécriture avec µ1, car il ne réécrit pas

d’atomes marqués. En revanche, il produit deux réécritures avec µ4 et µ5 qui sont

Q9 = p(u, w) ∧ t(u) ∧ g(u) et Q10 = p(u, w) ∧ t(u) ∧ f (u) respectivement. Par contre,

µ4 et µ5 ne sont pas compatibles, il ne produit donc pas de réécritures avec µ4⋄ µ5.

A partir de Q6, aram produit deux réécritures avec µ4 et µ5 qui sont Q11 =

q(u) ∧ t(u) ∧ g(u) et Q12 = q(u) ∧ t(u) ∧ f (u) respectivement. Par contre, µ4 et µ5

ne sont pas compatibles, il ne produit donc pas de réécritures avec µ4⋄ µ5.

Figure 4.5 – Exemple 43

Il est trivial de voir que cet opérateur n’est pas élagable au sens de la définition 3.8, en effet, si on prend une requête identique à une autre mais dont aucun atome n’est marqué, elle est plus générale que la première pourtant elle ne produira aucune réécriture.

Dans [König et al., 2013], on a pu confirmer, par des expérimentations prélimi- naires, le fait que aram produit moins de requêtes intermédiaires que sra. L’opérateur de réécriture aram applique en un pas tous les unificateurs mono-pièce agrégés et leurs agrégations compatibles. Ensuite, il suffit de ne considérer que les unificateurs impliquant un atome nouvellement créé. Ce comportement permet de mettre à pro- fit le graphe de dépendance des règles (GRD pour "graph of rule dependencies") [Baget et al., 2009]. En effet, le GRD indique la dépendance entre règles, une règle R1 dépend d’une règle R2 s’il existe un atome de concl(R2) qui est unifiable par

un unificateur par pièce avec un atome de hyp(R1). Soit Q une requête et R1, R2

deux règles, soit Q′ la réécriture de Q avec un unificateur par pièce de Q avec R 1. Il

est facile de vérifier que si R1 ne dépend pas de R2, il ne peut y avoir d’unificateur

par pièce de Q′ avec R

2 utilisant un atome nouvellement ajouté (marqué). Ainsi, le

GRD nous permet de ne chercher des unificateurs mono-pièce agrégés d’une requête Q qu’avec les règles dont dépendent la règle qui a permis de produire Q.