![](//s1.studylibfr.com/store/data-gzf/aeeb30c54c70ea8226448a15cbe904ef/1/004416130.htmlex.zip/bg4.jpg)
3.2 Algorithme de model-checking
Nous proposons ici un algorithme pour le model-
checking de la logique en utilisant les résultats présen-
tés dans la section précédente.
Dans la suite de cette section, nous considérons le
problème de model checking A|= Φ et nous suppo-
sons que la formule Φest close. Nous définissons les
constantes KAet KΦcomme étant le nombre de sym-
boles nécessaires pour représenter l’arbre Aet la for-
mule Φrespectivement.
Dans [Cardelli, 2001], l’opérateur de plus grand
point fixe a été défini par νξ.ϕ =¬(µξ.¬ϕhξ← ¬ξi).
Nous en déduisons que les opérateurs de plus petit et
plus grand point fixe sont interchangeables et il nous
suffit d’établir un algorithme de model-checking pour
la logique dans laquelle l’opérateur µest remplacé par
l’opérateur ν. Remarquons que le plus petit point fixe
est plus facile à manipuler lorsqu’il s’agit de définir des
propriétés d’arbres finis, c’est pourquoi nous le gardons
dans la définitition de la logique.
Présentation de l’algorithme L’algorithme que nous
allons présenter est basé sur l’algorithme de model-
checking local du ν-calcul modal de [Winskel, 1991].
Avant d’exposer l’algorithme, nous introduisons une
forme généralisée des formules à point fixe qui est
νξ(M).ϕ où Mest un ensemble d’arbres. νξ.ϕ est
une abbréviation de νξ(∅).ϕ. L’ensemble Mjouera le
role d’historique permettant de détecter les boucles pen-
dant le model-checking des formules à point fixe. Nous
convenons que fn(νξ(M).ϕ) =def f n(νξ.ϕ).
Algorithme de model-checking
check(A,ψ) is
case ψof
0: return A== 0;
n[ϕ]: return A== n[A0]and check(A0,ϕ);
ϕ0|ϕ00 : for all A0|A00 ≡Ado
if check(A0,ϕ0) and check(A00,ϕ00)
then return true;
fi;
od;
return false;
>: return true;
¬ϕ: return not check(A,ϕ);
ϕ0∨ϕ00 : return check(A,ϕ0) or check(A,ϕ00);
∃x.ϕ : for n∈noms(A,ϕ) do
if check(A,ϕhx←ni) then return true; fi ;
od;
return false;
∃X.ϕ : for B∈ssarbres(A) do
if check(A,ϕhX←Bi) then return true; fi ;
od;
return false;
n=n0: return n== n0;
νξ(M).ϕ : if A∈Mthen return true;
else return
check(A,ϕhξ←νξ(M∪ {A}).ϕi);
fi;
esac;
La fonction auxiliaire noms(B, ψ)retourne l’en-
semble des noms qui apparaissent dans la formule ψ
et l’arbre Bplus un nouveau nom. Formellement, c’est
l’ensemble fn(B)∪fn(ψ)∪ {p}avec p6∈ fn(B)∪
fn(ψ). La fonction auxiliare ssarbres(B, ψ)retourne
l’ensemble des sous-arbres de Bauquel l’arbre p[0]
a été ajouté, avec pétant un nom qui n’apparaît pas
libre dans B. Formellement, c’est l’ensemble {C|Cv
B}∪{p[0]}avec p6∈ f n(B).
Pour prouver l’arrêt de la fonction check, nous in-
troduisons une famille de relations binaires Dsur les
formules1.
Définition 2 Deux formules ϕet ψsont en relation
pour A, noté ψAϕ(avec A∈ D) si l’une des
propriétés ci-dessous est vérifiée :
1. ψ=νξ(M).ψ0et ϕ=ψ0hξ←νξ(M∪ {B}).ψ0i,
Bétant un sous-arbre propre de An’apparaissant
pas dans M;
2. ϕest sous-formule propre de ψ.
Les lemmes 4 et 5 et la proposition 3 utilisent la fa-
mille de relations Dpour établir l’arrêt de la fonction
check.
Lemme 4 Soient ϕune formule généralisée et Aun
arbre, et soit ϕ=ϕ0, ϕ1, ..., ϕkune suite de formules
telle que ϕiAϕi−1pour tout idans {1, . . . , k}. Alors
k < KA∗KΦ.
Preuve La preuve est conséquence immédiate de la défi-
nition de Aet du fait que toute suite d’arbres (resp. de
formules) construite sur la relation de sous-arbre strict
(resp. sous-formule stricte) a une longueur d’au plus
KA(resp. KΦ).
Lemme 5 Soient A, B ∈ D et soit Bun sous-arbre de
A. Alors ϕBψ⇒ϕAψ.
Preuve En remarquant que tout sous-arbre strict de
Bet aussi sous-arbre strict de Ale lemme est consé-
quence immédiate de la définition de A.
Proposition 3 L’appel à check(A, Φ) se termine et re-
tourne comme résultat true ou false.
Preuve Il suffit de remarquer que toutes les exécutions
possibles de check(A, Φ) se terminent ou bien avec un
appel récursif, ou bien en retournant une valeur parmi
true ou false. Pour garantir la terminaison, nous uti-
lisons la relation A.
Tout d’abord, il est facile de se convaincre en rai-
sonnant par récurrence sur les exécutions possibles de
la fonction check que (1) tout appel à check(B, ψ)
produit pour le calcul de check(A, Φ) est tel que Bv
Aet (2) tout appel récursif check(C, ϕ)dans le corps
de check(B, ψ)est tel que ψBϕ. En utilisant le
lemme 5 et (2) nous déduisons que ϕAψ. Cette der-
nière constatation avec le lemme 4 nous permettent de
conclure que l’appel à check(A, Φ) ne peut pas gé-
nérer de suite infinie d’appels récursifs à la fonction
check.
La proposition qui suit établit que l’algorithmes de
model-checking proposé précédemment est correct.
1Malgré la notation, ce ne sont pas des relations d’ordre
4