• Aucun résultat trouvé

La détection de boucles pour les α -clauses

5.2 Procédure de preuve pour les α -clauses

5.2.2 La détection de boucles pour les α -clauses

Comme nous l’avons mentionné précédemment, l’espace de recherche a une structure d’arbre. La détection de boucles s’applique lorsque pour toutes les ins-tancess d’un terme donné t, la branche dans l’espace de recherche qui correspond au casα =s est soit fermée (c’est-à-dire une clause de la forme α��s�, où s� �s, est générée), soit elle peut être réductible, par décalage, à une branche corres-pondant à un terme strictement plus petit. Nous pouvons alors fermer la branche

α=t, par "descente infinie".

La règle de détection de boucles est formalisée par le théorème suivant :

Théorème 77 Soit S un ensemble de α-clauses. Supposons qu’il existe un en-semble {t1, . . . , tn} couvrant pour t tel que :

1. Pour tout i∈�1, n�, il existe un ti-ensemble Si ⊆S.

2. Pour tout i �1, n� et pour tout terme fermé s ti, une des conditions suivantes est vérifiée :

(a) Si |=�s.

(b) Il existe un entierj ∈�1, n�et un décalageθstel queSi |=shift(Sj, tjs) et s�tjθs.

Nous avons alors S |={α ��t}.

Preuve. SoitI un modèle deS. Nous procédons comme suit : nous supposons que

I(α) =tγ, pour une certaine substitution γ, et nous dérivons une contradiction. PuisqueT est couvrant pourt, il existei∈�1, n�tel quetγ �ti. Comme I |=S et Si ⊆S, nous avonsI |=Si. Nous supposons que size(I(α))est minimal c’est-à-dire que pour toute interprétationJ, si size(J(α))<size(I(α))et s’il existej ∈�1, n�

tel que J(α) tj alors J �|= Sj. Comme I |= Si, nous avons Si �|= α �� (car

I(α) =tγ). Ce qui implique, d’après la propriété 2, qu’il existe j ∈�1, n� tel que Si |= shift(Sj, tj,θtγ) et tjθtγ. Nous avons alors I |= shift(Sj, tj,θtγ). Soit J

D’après le lemme 75, comme I |= shift(Sj, tj,θtγ) et Sj est un tj-ensemble, nous avonsJ |=Sj. Nous avonsI(α) = �tjθtγ, doncJ(α) = θtγ1(tj)�tj, et d’après la proposition 73, size(J(α))<size(I(α)). CommeI est minimal, nous déduisons

J �|=Sj, et cela est une contradiction.

En pratique, trouver les ensemblesSi et les substitutions de décalage θs et vérifier les conditions

1. Si |=α ��s

2. Si |=shift(Sj, tjs)

n’est pas faisable (car ces conditions sont de nature sémantique et non syntaxique). Nous devons imposer des conditions syntaxiques plus fortes. Donc nous vérifions plutôt que

1. une clause de la forme [�|α��s�](avec s� �s) est dérivée d’une clause de Si

2. shift(Sj, ti,θs)est dérivée de Si.

Remarque 78 Le théorème 45 du chapitre 3 peut être vu comme un corollaire du théorème 77. Dans ce cas, l’ensemble de termes {t1, . . . , tn} est de la forme

{si(0), . . . , si+j−1(0), si+j(x)} (un tel ensemble est couvrant pour si(x)). Pour

k = 1, . . . , j −1, Sk est de la forme {n �= i +k −1}, et Sn S1, ..., Sn−1 sont les ensembles de clauses {n �= i+ 1} et Sn est l’ensemble S de la définition 44. On vérifie facilement que, si (i, j) est une boucle inductive pour S, alors la pro-priété 2 du théorème 77 est satisfaite (les instances de t1, . . . , tn−1 satisfont 2.a et celles de tn satisfont 2.b). Ainsi les résultats du chapitre 3 sont des conséquences de ceux du présent chapitre. Nous avons préféré les présenter indépendamment car les définitions sont plus simples et plus naturelles.

Nous présentons maintenant un exemple d’application.

Exemple 79 Soit l’ensemble de clauses suivant :

(1) p(a)�V

(2) p(x)��V∨p(f(x))�V (3) p(x)��V∨p(g(x))�V (4) [p(x)��V |α�x]

déri-vons, avec notre procédure de preuve, les clauses suivantes : (5) [p(x)��V|α�f(x)] (2,4) (6) [p(x)��V |α�g(x)] (3,4) (7) [�|α�a] (1,4) (8) [�|α �f(a)] (1,5) (9) [�|α�g(a)] (1,6) (10) [p(x)��V |α�f(g(x))] (3,5) (11) [p(x)��V|α�f(f(x))] (2,5) (12) [p(x)��V|α �g(g(x))] (2,6) (13) [p(x)��V |α�g(f(x))] (3,6)

À ce stade, nous considérons le terme f(x) : nous remarquons que l’ensemble

{f(g(x)), f(f(x)), f(a)} est couvrant pourf(x). la clause 8correspond à la clause

α��f(a). La clause 10correspond à shift(C5, f(x), x�→g(x)) (où C5 est la clause

5 dérivée ci-dessus) et la clause 11 correspond à shift(C5, f(x), x �→ f(x)). Nous pouvons appliquer la règle de détection de boucles pour générer la clause α ��

f(x). De la même manière nous générons la clause α �� g(x). Comme l’ensemble

{f(x), g(x), a}est couvrant, l’ensemble considéré est insatisfaisable.

Exemple 80 On considère l’ensemble de α-clauses suivant

S ={[p(x)|α �x], p(a)��V, p(f(x))��V∨q(x)�V, q(f(x))��V∨q(x)�V, q(a)��V}

f(x) et a sont des SI-termes et x une SI-variable. Le calcul de superposition génère les clauses suivantes :

�a

α��fn(f(x))∨q(x) ∀n∈N

α��fn(f(a))∀n ∈N

Comme les clauses [p(x) �� V | α f(f(x))] et α �� f(a) peuvent être dérivées de [p(x) V | α f(x)] (avec les clauses de S[⊥]), et comme [p(x) V | α f(f(x))] = shift([p(x) V | α f(x)], f(x),{x f(x)}), et que l’ensemble

{a, f(x)}est couvrant (carf etasont les seuls symboles de domaine dansSI) nous pouvons alors appliquer la détection de boucles, et dériver la clauseα��f(x). Nous avons généré les clauses α��a etα ��f(x), donc S est insatisfaisable.

Complétude

Nous avons montré dans le chapitre 3 que le problème de l’insatisfaisabilité des

α-clauses n’est pas semi-décidable (théorème 34, les α-clauses étant strictement plus générales que les n-clauses). La procédure de preuve définie dans le chapitre 5 ne peut donc pas être complète dans le cas général. Nous montrons dans ce chapitre que nous pouvons garantir la complétude en imposant certaines conditions aux ensembles de clauses considérés. En premier lieu, nous allons introduire des conditions sémantiques très générales mais suffisantes pour assurer la complétude. Nous allons, dans le chapitre suivant, donner des exemples de classes syntaxiques concrètes qui vérifient ces conditions sémantiques.

6.1 Définitions préliminaires

Afin de simplifier les définitions et les preuves, nous supposons que les clauses ne contiennent aucune constante de sorte incluse dansSI (nous pouvons pour cela remplacer toute constanteapar une une fonctiona(x), oùxest une variable d’une nouvelle sorte dans SI (à noter que la signature doit contenir une constante de la même sorte que x pour garantir qu’il existe au moins un terme de sorte dans SI). Nous supposons aussi que pour chaqueα-clause de la forme [C|α �t],tn’est pas une variable ; cette condition n’est pas restrictive, nous pouvons garantir qu’elle est toujours vérifiée en introduisant un nouveau symbole de fonction f : s →s, s est la sorte de α et s est un nouveau symbole de sorte, puis en remplaçant dans toutes les contraintes desα-clauses le termet parf(t)(commef est l’unique symbole de la sorte s, pour toute interprétation I, I(α) est de la forme f(. . .)). Ces restrictions nous permettent de garantir que tous les SI-termes apparaissant dans les contraintes sont de la forme f1(. . .(fn(x)). . .), où n > 0 et x une SI -variable, ce qui simplifie certaines définitions.

variable. Nous introduisons dans la définition suivante une fonctionsuccqui représente, d’une certaine manière, la fonction successeur par rapport à� c’est-à-dire si t est unSI-terme alorssucc(t)est le plus petit terme (modulo�) tel quesucc(t)�t.

Définition 82 On note succ la fonction partielle telle que succ(t) def=

f1(. . .(fn1(x))) si t est de la forme f1(. . .(fn(x)). . .))pour une certaine variable x (succ est indéfini sinon).

Exemple 83

succ(f(g(x))) = succ(f(h(x))) =f(x) succ(f(x)) = succ(g(x)) =x

succ(x) n’est pas défini.

Nous avons vu dans le cas des n-clauses que l’espace de recherche S est hiérar-chisé en utilisant la notion de rang. Nous allons maintenant donner une définition plus générale de la notion de rang afin de l’appliquer aux α-clauses.

Définition 84 Lerang d’uneα-clauseC est définie comme suit :

— Si C est de la forme[D|α�i] etD est SI-plate alors rang(C)def=i. — Si C est de la forme [D | α i] et D n’est pas SI-plate alors rang(C) def=

succ(i).1.

SiC ne contient pas de paramètre α (la contrainte est à V) alors rang(C)def=⊥. Nous gardons la notation, introduite pour les n-clauses, pour les ensembles de

α-clauses de même rang c’est-à-dire si S est un ensemble de α-clauses et i un SI -terme alors S[i] (respectivement S[⊥]) est le sous-ensemble de α-clauses de S de rang i (de rang ⊥).

Exemple 85 Nous présentons dans le tableau suivant la valeur du rang pour chaqueα-clause C. C rang(C) p(x)�V∨. . . [p(x)�V|α �f(x)] f(x) [p(g(x))�V|α �f(g(x))] f(x) [q(f(x))|α�f(x)] x [q(x)|α�x] x α��g(x) g(x)

1. Cette définition nous permet de préserver le rang lors d’une instansiation c’est-à-dire nous voulons que les clauses de la forme[p(g(x))�V|α�f(g(x))]et[p(x)�V|α�f(x)]soient de

L’incomplétude de la procédure de preuve est liée au fait qu’il n’est pas toujours possible d’appliquer le théorème 77 (chapitre 5). En effet, il existe une infinité de clauses possibles, même modulo un décalage, donc rien ne permet de garantir qu’un cycle pourra être éventuellement détecté. Afin de pallier ce problème, une première idée consiste à imposer des conditions supplémentaires permettant de garantir que l’ensemble de clauses correspondant à toute valeur donnée du paramètre est fini. Cette condition est toutefois assez restrictive (elle implique aussi la terminaison). Par conséquent, nous allons la raffiner en appliquant la détection de cycles unique-ment sur un sous-ensemble de clauses, obtenu en restreignant l’espace de recherche à un ensemblefiniF. Nous allons montrer qu’il est possible de définir cet ensemble F de manière à ce que l’existence d’un cycle soit toujours garantie, si l’ensemble est insatisfaisable. Cela n’implique cependant pas la terminaison (ni la décidabi-lité), car, dans le cas où l’ensemble est satisfaisable pour une certaine valeur du paramètre, le calcul peut engendrer un ensemble infini de clauses correspondant à cette valeur du paramètre.

Nous supposerons dans ce chapitre et le suivant que les α-clauses sont construites sur une certaine classe syntactique de clausesC(c’est-à-dire pour toute clause [C | X], C est dans C). Nous définissons la classe F comme les α-clauses

SI-plates qui peuvent interagir avec lesα-clauses non plates. Nous montrerons par la suite que ces clauses sont suffisantes pour garantir l’existence d’un cycle.

Définition 86 On note F l’ensemble des clauses SI-plates C ∈Ctel que il existe deux clauses D, E ∈C vérifiant C, D�E et D n’est pas SI-plate. Si S est un ensemble de α-clauses, on note F(S) l’ensemble des α-clauses [C | X]

C∈F.