• Aucun résultat trouvé

4.4 Example

4.4.2 Échec de terminaison

{p0,⊤& 0> n−1,¬pn} {p0,⊤,0> n−1,¬pn} {p0,⊤,0> n−1,¬pn, n6= 0}

irr´eductible, non clos contradiction

&

iterated∧ iterated

Figure 4.2: Application deStabà p0∧(Vni=01pi⇒pi+1)∧ ¬pn

Par correction, le schéma est donc satisfaisable. À la lueur de la feuille irréductible non close, nous voyons plus précisément qu’il existe un modèle pour toutn <0. Notons que la partie gauche de l’arbre peut très bien être infinie (d’ailleurs elle l’est, comme nous le verrons avec l’exemple suivant) concrétisant ainsi la nécessité de l’équité dans les hypothèses du théorème 4.9. En particulier, une implémentation doit s’assurer d’appliquer les règles de façon équitable pour ne pas passer tout son temps dans la branche infinie (et donc ne jamais terminer).

4.4.2 Échec de terminaison

Nous ne présentons qu’un exemple jouet, c.-à-d. rapide et trivial, parce que nous allons voir que, sans détection de cycle,Stabne va pas bien loin. Nous appliquonsStabà l’exemple récurrentp0∧(Vni=01pi⇒ pi+1)∧ ¬pn&n 0 (c.-à-d. l’exemple précédent mais avec la contrainte n 0), que nous savons insatisfaisable (cf l’exemple 3.9). Le tableau obtenu est (partiellement) donné en figure 4.3.

Il est facile de voir que la branche marquée “. . . ” sera étendue indéfiniment: les flèches en pointillés montrent que la preuve est en train de se “répéter”, la procédure ne s’arrête donc jamais. Ces flèches présentent pour la première fois de façon informelle la notion de cycle. Cette notion est étudiée formelle-ment dans le chapitre suivant. L’objectif est d’ajouter àStab un mécanisme permettant de détecter ces cycles et de fermer les feuilles correspondantes.

4.4. EXAMPLE 39 {p0∧(Vn−1 i=0 pi⇒pi+1)∧ ¬pn&n≥0} {p0∧(Vn−1 i=0 pi⇒pi+1)∧ ¬pn, n≥0} {p0,(Vn−1 i=0 pi⇒pi+1)∧ ¬pn, n≥0} {p0,Vn−1 i=0pi⇒pi+1,¬pn, n≥0} {p0, pn−1⇒pn∧Vn−2 i=0 pi⇒ pi+1&n−1≥0,¬pn, n≥0} {p0, pn−1⇒pn∧Vn−2 i=0 pi⇒ pi+1, n−1≥0,¬pn, n≥0} {p0, pn−1 pn,Vn−2 i=0 pi pi+1, n−1≥0,¬pn, n≥0} {p0,¬pn−1,Vn−2 i=0pi⇒pi+1, n−1≥0,¬pn, n≥0} {p0,¬pn−1, pn−2 ⇒pn−1∧Vn−3 i=0 pi⇒ pi+1&n−2≥0, n−1≥0,¬pn, n≥0} {p0,¬pn−1, pn−2 pn−1∧ Vn−3 i=0 pi pi+1, n− 2 0, n−1≥0,¬pn, n≥0} & iterated {p0, pn,Vn−2 i=0pi⇒pi+1, n−1≥0,¬pn, n≥0} {p0, pn,Vn−2 i=0 pi⇒pi+1, n−1≥ 0,¬pn, n≥0, n6=n} × contradiction & {p0,⊤&n−1<0,¬pn, n≥0} {p0,⊤, n−1<0,¬pn, n≥0} {p0,⊤, n 1 < 0,¬pn, n 0, n6= 1} × contradiction & iterated∧ & {p0,¬pn−1, pn−2⇒pn−1,Vn−3 i=0pi⇒pi+1, n− 2≥0, n−1≥0,¬pn, n≥0} {p0,¬pn−1,¬pn−2,Vn−3 i=0 pi⇒pi+1, n−1≥0, n−2≥0,¬pn, n≥0} . . . {p0,¬pn−1, pn−1,Vn−3 i=0pi⇒pi+1, n−1≥0, n−2≥0,¬pn, n≥0} {p0,¬pn−1, pn−1,Vn−3 i=0 pi⇒pi+1, n−1≥0, n−2≥0,¬pn, n≥0, n−16=n−1} × contradiction {p0,¬pn−1,⊤&n−2 < 0, n− 1≥0,¬pn, n≥0} {p0,¬pn−1,⊤&n−2 < 0, n− 1≥0,¬pn, n≥0, n−16= 1} × contradiction iterated∧

CHAPTER

5

Cycle Detection

D’après le théorème d’incomplétude, nous savons qu’aucune procédure ne peut décider la satisfaisabilité des schémas. Cependant, comme nous l’avons vu en section 4.4.2, l’intuition permet parfois de repérer des “cycles” dans la construction (divergente) d’une preuve. Dans ce chapitre, nous formalisons cette notion afin d’améliorer la terminaison en détectant ces cycles de manière automatique. Nous proposons une première définition générale mais indécidable (section 5.1). Puis nous prenons l’approche opposée avec un raffinement décidable, presque trivial, de la définition générale : l’“égalité à un décalage près” (section 5.2). Enfin en section 5.3 nous proposons des extensions qui, à partir d’un raffinement quelconque de la définition générale, construisent un raffinement plus puissant. Ces extensions appliquées à l’égalité à un décalage près seront suffisantes pour prouver tous les résultats de décidabilité de ce mémoire. Enfin nous revenons sur l’exemple qui divergeait avecStab (section 4.4.2) pour constater que la détection de cycle évite la divergence (section 5.4).

Le contenu de ce chapitre a été développé tout au long de [ACP09b, ACP09a, ACP10d, ACP10a] et particulièrement dans [ACP10b].

5.1 General Definition

L’existence d’un cycle signifie qu’un nœud “boucle” sur un autre nœud. De façon informelle, nous voulons qu’un nœud boucle sur un autre si nous pouvons montrer que la procédure se comporte de la même façon sur les deux nœuds. Cependant, présentée de cette manière, la notion de bouclage est dépendante de la procédure. Nous préfèrons donc définir cette notion par rapport au problème lui-même, c.-à-d. en termes de satisfaisabilité1. Ainsi, nous pouvons introduire la notion de bouclage, en première approximation, de la façon suivante : si la satisfaisabilité d’un nœud ν3 est équivalente à la satisfaisabilité d’un nœud déjà vuν2, alors il ne sert à rien de le développer. En fait il suffit même que la satisfaisabilité deν2soit seulement conséquence de la satisfaisabilité deν3.

De même, si la satisfaisabilité deν2implique la satisfaisabilité d’un autre nœudν1, alors il ne sert à rien de développer ν2, et ainsi de suite. Nous voyons bien que si nous voulons conclure, il faut s’assurer qu’il y a bien une “progression” dans cette série de nœuds. Pour ce faire, il faut que les modèles du nœud sur lequel nous bouclons soient inférieurs aux modèles du nœud qui boucle, par rapport à un ordre quelconque sur les modèles. Et si nous voulons nous assurer que nous finirons bien par trouver un modèle, cet ordre doit être bien fondé.

Nous obtenons ainsi la définition suivante :

1

Bien que ce ne soit pas le point de vue élaboré dans ce mémoire, il serait aussi intéressant de tenter de formaliser cette notion de “comportement identique” de la procédure : peut-être en s’orientant vers les notions de bisimulation, ou en s’intéressant aux travaux qui étudient les connections entre géométrie et théorie de la preuve. Il y a en effet fort à parier que le problème clé dans le cadre d’une telle étude serait la caractérisation d’une bonne notion de forme normale d’une preuve (“bonne” par rapport au problème qui nous intéresse ici).

Definition 5.1 (Bouclage). Soit un ordre strict et bien fondé sur les interprétations. Nous disons qu’un schéma s1 boucle sur un schéma s2 par rapport à ssi pour tout modèle M1 des1 il existe un modèle M2 de s2 t.q. M2 M1. Nous appelons s1 le bourgeon, s2 le compagnon2 et un ordre de bouclage.

En fait, le lecteur l’aura peut-être reconnu, nous effectuons simplement une preuve par descente infinie [Wika] : si l’existence d’un contre-exemple à un certain rang d’un ordre bien fondé implique l’existence d’un contre-exemple à un rang inférieur, alors il ne peut pas y avoir de contre-exemple du tout, par bonne fondation. C’est une variante classique de la preuve par récurrence mise en évidence, semble-t-il, par Fermat.

Example 5.2. Soit une variable n. Pour toutes interprétations I1 et I2 telles que I1arith(n) 1

et I2arith(n) 1, nous définissons I1 I2 ssi I1arith(n) < I2arith(n). Comme nous avons imposé I1arith(n)≥1 etI2arith(n)≥1, cet ordre est bien fondé (il est évidemment strict).

Il est évident que tout modèle deVn

i=1pi&n≥1 donne ànune valeur supérieure ou égale à 1, nous pouvons donc appliquer l’ordre sur les interprétations. Alors, s1

def

= Vni=11pi&n−1 ≥1 boucle bien sur s2

def

= Vni=1pi&n≥1 par rapport à ≺standard (par rapport à n) : soit un modèle M1 des1, nous pouvons construire un modèle M2 des2 parM2arith(n)def=M1arith(n)−1 et pour tout i∈[1;M2arith(n)]

: M2prop(pi)def

=M1prop(pi). Il est clair queM2 est bien un modèle des2 et que M2≺M1. En pratique, lorsqu’un cycle est détecté, la branche du nœud qui boucle est close.

Definition 5.3 (Règle de bouclage). Nous appelons règle de bouclage la règle comme quoi si un nœud boucle sur un autre nœud de l’arbre, alors la branche est close.

Nous emploierons plutôt le termebloquée pour clairement distinguer ce cas de celui où une branche est close de façon classique. Dans toute la suite, nous supposons l’ordre de bouclage≺fixé.