• Aucun résultat trouvé

Étude d’un cas intermédiaire

Dans le document Courtage sémantique de services de calcul (Page 109-115)

Nous venons de voir que dans les cas où toutes les équations possèdent les mêmes va-riables dans les deux membres ou dans le cas où les équations sont appliquées dans un sens précis et que les variables d’un membre sont incluses dans celles de l’autre membre, l’algo-rithme est correct et complet. Néanmoins, cela restreint beaucoup l’ensemble des équations et nous souhaitons ne pas imposer de contraintes sur ces équations.

Voyons ce qui se passe quand nous avons des ensembles de variables différents. Le problème intervient au niveau de l’application des équations, carσ2(e1)contient encore des variables : celles deV ar(e1)\V ar(e2). Nous avons alors un problème d’unification équa-tionnelle à résoudre, avec des variables différentes dans les deux membres.

Nous pouvons décider de traiter ces variables libres comme des constantes, auquel cas l’algorithme reste correct, mais nous perdons la complétude, puisque nous perdons les solutions où ces variables doivent prendre des valeurs particulières.

Exemple 4.4.1

Solution que nous trouverions :

((x∗y) +z) +v=? a+b (x∗y) +z=? a

(x∗y) +z= 0 +? a x∗y= 0?

x∗y= 0? ∗x2 x= 0? y=? x2

0= 0? z=? a

x1=? a v =? b

La substitution associée est :{x7→0, y 7→x2, z7→a, v7→b}.

Exemple 4.4.2

Solution que nous rejetterions :

((x∗x) +z) +v=? a+b (x∗x) +z=? a

(x∗x) +z= 0 +? a x∗x= 0?

x∗x= 0? ∗x2 x= 0? 0=? x2

ÉCHEC 0= 0?

z=? a

x1=? a v=? b

x2 étant considérée comme une constante et les constantes étant différentes deux à deux, nous rejetons0=? x2.

Ceci n’est bien sûr pas acceptable, nous avons donc décidés de traiter ces variables comme des variables à part entière et donc de leur associer des valeurs. Cela implique que nous devons propager ces valeurs pour détecter les erreurs. Cela n’est nécessaire que si la variable apparaît deux fois dans le terme.

Traitons d’abord le cas oùe1 est linéaire pour les variables de V ar(e1)\V ar(e2).

Nous refusons donc des équations de la formex∗x−1 =I (par contre si elle est appliquée dans le sens inverse, elle sera acceptée carV ar(I)⊂V ar(x∗x−1), voir 4.2.2.4, 94), mais acceptons celles de la forme0∗x= 0.

Nous venons de voir que les contraintes sur ces variables n’ont pas besoin d’être propagées, donc la décomposition des termes et l’application des équations ne sont pas mo-difiées. Par contre, ces variables libres pouvant prendre une forme quelconque nous devons ajouter une règle de transformation :

f(t)=? x

{x7→f(x1, ..., xn)}(f(t))=? f(x1, ..., xn)

A,σ La substitution solution sera{x7→f(x1, ..., xn)} ◦σ

Cette transformation ne peut s’appliquer que dans le cas oùxest une variable libre et lesxidoivent être des nouvelles variables, elles-mêmes considérées comme des variables libres.

Les formes résolues et les substitutions associées changent. Les formes résolues sont maintenant celles de la formes=? r, où :

– sest une constante et rest une constante. Si les deux constantes sont différentes, il y a échec. La substitution associée est∅.

– sest une constante et r est une variable. La substitution associée est {r 7→ s}.

Nous sommes ici dans le cas d’une variable libre qui doit être contrainte.

– sest une variable. La substitution associée est{s7→r}.

Nous conservons la propriétéDom(σ|V ar(s)) =V ar(s). Les variables desetrétant différentes, nous sommes sûrs que les assignations de deux variables apparaissent effecti-vement dans la substitution. Par contre, dansσ, nous voyons aussi apparaître les variables libres.

Exemple 4.4.3

L’exemple 4.4.2 est alors sous une forme résolue et la substitution associée est : {x7→0, x2 7→0, z7→a, v7→b}.

Exemple 4.4.4

Exemple illustrant l’utilité de la nouvelle transformation :

((x∗(y1+y2)) +z) +v=? a+b (x∗(y1+y2)) +z=? a

(x∗(y1+y2)) +z= 0 +? a x∗(y1+y2)= 0?

x∗(y1+y2)= 0? ∗x2 x= 0? y1+y2 =? x2

y1+y2 ?

=x3+x4

y1=? x3 y2 =? x4 0= 0?

z=? a

x1=? a v=? b

La substitution associée est :{x7→0, x27→x3+x4, y1 7→x3, y27→x4, z7→a, v7→b}.

Dans l’exemple, la variable x2 est une variable libre, elle peut donc prendre une forme quelconque. Par application de la nouvelle transformation, elle sera en fait affectée à l’addition de deux autres variables libres (x3+x4).

La substitution solution, indique que sixest affecté à0,zàa,vàbet quelque soit les valeurs dey1 ety2le service répondra à la requête.

4.4.1 Preuve de la correction

Nous reprenons le même principe que pour prouver la correction de l’algorithme précédent, mais cette fois la propriété que nous voulons montrer est :

Poursun terme etr une requête, si l’algorithme résout le problème s =? r en créant une substitutionσ, il est alors possible de construire une suite de transformationsAtelle que :

– σ|V ar(s)A|V ar(s)

– λV ar(s).s−→λV ar(θ(r)).θ(r)A avecDom(θ)⊂V ar(r)etIm(θ) =∅.

Comme à la racineV ar(r) =∅, si la propriété est vraie à la racine nous aurons bien la correction de notre algorithme.

4.4.1.1 Preuve : aux feuilles

Les feuilles de l’arbre sont sous formes résolues, elles sont donc de la forme : – c1 =? c2, oùc1etc2 sont deux constantes égales car nous avons une forme résolue

et la substitution associée est alors∅. La propriété est donc vérifiée avecθ=∅.

– v=? c, oùvest une variable etcune constante.

La substitution associée est{v7→c}.

Or :

– λv.v−−−−−→ccste(v,c) – σcste(v,c)={v7→c}.

La propriété est donc vérifiée avecθ=∅.

– v=? t, oùvest une variable ettun terme.

La substitution associée est{v7→t}.

Or :

– λv.v−−−−−−→tcomp(v,t) – σcomp(v,t) ={v7→t}.

La propriété est donc vérifiée avecθ=∅.

– c=? v, oùvest une variable libre etcune constante.

La substitution associée est{v7→c}. Notons laθ.

Nous avonsc= θ(v), donc la suite de transformations vide répond au problème.

La substitution associée est la substitution vide.

La propriété est donc vérifiée.

La propriété est donc vérifiée aux feuilles de l’arbre.

4.4.1.2 Preuve : aux nœuds Décomposition

f(s1, ..., sp)=? f(r1, ..., rp) s1=? r1

σ1, A1

σ1(s2)=? r2

σ2, A2

... σp−1(...σ1(sp))=? rp

σp, Ap

Supposons que la propriété est vraie pour les différents fils, montrons qu’elle est vraie pourf(s1, ..., sp)=? f(r1, ..., rp). Nous noterons[[A]]la suite de transformations associée à l’arbreA.

Nous appliquons le même principe que dans la preuve précédente f(s1, ..., sp)

[[A1]]

−−−→ λ.f(θ1(r1), σ1(s2), ..., σ1(sp)) par hypothèse de récurrence sur le premier fils

[[A2]]

−−−→ λ.f(θ1(r1), θ2(r2), ..., σ21(sp))) par hypothèse de récurrence sur le deuxième fils ...

[[Ap]]

−−−→ f(θ1(r1), θ2(r2), ..., θp(rp)) par hypothèse de récurrence sur le dernier fils

Puisque les seules variables qui peuvent apparaître dans r sont les variables libres des équations et que les équations sont linéaires par rapport à ces variables, elles n’apparaîtront qu’une fois, donc pouri6=j,Dom(θi)∩Dom(θj) =∅. Soitθ=θ1∪...∪θp,θ=θ1◦...◦θp

car les images desθisont vides.

Nous avons donc :

– λ.f(s1, ..., sp)−−−−−−−→λ.θ(f[[A1]];...;[[Ap]] (r1, r2, ..., rp))

– Les différentes substitutions ont des domaines disjoints et des images vides : (σ1◦...◦σp)|V ar(s)= (σA1◦...◦σAp)|V ar(s)

La propriété est donc vraie.

Application d’une équation

s=? r s=? σ2(e1)

σ1, A1

e2 =? r

σ2, A2

Supposons que la propriété est vraie pour les deux fils, montrons qu’elle est vraie pours=? r.

Par hypothèse de récurrence, nous avons :λ.s−−−→λ.θ[[A1]] 12(e1)).

Notons queDom(θ1)⊂(V ar(e1)\V ar(e2))doncθ1(e2) =e2. λ.s

[[A1]]

−−−→ λ.θ12(e1)) par hypothèse de récurrence sur le problèmes=? σ2(e1)

= λ.σ21(e1))

eq(ǫ,θ1◦σ2,e1,e2)

−−−−−−−−−−→ λ.σ21(e2))

= λ.σ2(e2)

[[A2]]E

−−−−→ θ2(r) par hypothèse de récurrence sur le problèmee2 ?

=r et en utilisant la propriété 2.5.1 (page 53)

Nous avons donc :

– λV ar(s).s−−−−−−−−−−−−−−−−→θ[[A1]];eq(ǫ,σ2,e1,e2);[[A2]]E 2(r) – σ[[A1]];eq(ǫ,σ2,e1,e2);[[A2]]

E[[A1]]. Orσ1|V ar(s)[[A1]]|V ar(s)par hypothèse.

La propriété est donc vraie.

Introduction de symboles

f(t)=? x

{x7→f(x1, ..., xn)}(f(t))=? f(x1, ..., xn)

A11

Nous avons :

λ.f(t)

comp(x,f(x1,...,xn))

−−−−−−−−−−−−→ λ.{x7→f(x1, ..., xn)}(f(t))

[[A1]]

−−−→ λ.θ(f(x1, ..., xn)) Nous avons donc :

– λV ar(s).f(t)−−−−−−−−−−−−−−−→λ.θ(fcomp(x,f(x1,...,xn));[[A1]] (x1, ..., xn))

– σ|V ar(f(t)) = ({x7→f(x1, ..., xn)} ◦σ1)|V ar(f(t))1|V ar(f(t)). La propriété est donc vraie.

4.4.2 Discussion de la complétude

Nous n’avons pas pour l’instant de preuve de la complétude. Néanmoins, la méthode de construction de cet algorithme, en partant d’un algorithme complet dans un cas parti-culier et en traitant spécifiquement les éléments ajoutés est raisonnable car elle préserve la complétude du cas précèdent. Nous avons quelques éléments pour émettre la conjoncture que l’algorithme est toujours complet.

Néanmoins, la règle d’introduction d’un symbole (inspirée de Root Imitation du système de Gallier et Snyder) n’est peut être pas aussi générale qu’il le faudrait. En effet, les variables intermédiaires ont une forme quelconque. Ici nous choisissons de leur donner une forme identique au terme avec lequel elles sont comparées. Cela limite le nombre de problèmes engendrés à partir d’une telle forme, mais nous perdons peut-être la complétude.

Cependant, nous supposons que si nous perdons des solutions, ce sont des solutions moins générales que les solutions trouvées (dans le sens où nous avons une variable libre alors que la solution perdue à une constante contrainte).

En effet, si nous supposons que la variable libre n’est pas de la forme du terme avec lequel elle est comparée, nous allons essayer de les rendre égaux en appliquant des équa-tions. Nous verrons alors apparaître des contraintes supplémentaires, qui ne sont en fait pas indispensables, puisqu’une solution peut être obtenue sans ces contraintes et avec la forme la plus générale possible.

Exemple 4.4.5

La suite de décomposition suivante, où x, y et z sont des variables du service et x1 une variable libre :

x∗y+z=? x1 x∗y+z=? x2+x3 x∗y =? x2

x∗y =? x4∗x5 x=? x4 y=? x5

z=? x3

conduit à la solution très générale :{x7→x4, y7→x5, z 7→x3}.

Par contre, si nous n’imposons aucune forme aux variables libres, nous pouvons par exemple construire :

x∗y+z=? x1 x∗y+z=? x2∗x3 x∗y+z=? x2∗x3+ 0

x∗y=? x2∗x3 x=? x2 y =? x3

z= 0?

x4 =? x2∗x3

qui engendre la substitution {x 7→ x2, y 7→ x3, z 7→ 0} qui est plus contrainte que la précédente.

Dans le document Courtage sémantique de services de calcul (Page 109-115)