• Aucun résultat trouvé

Algorithme

Dans le document Algèbres de Processus Réversibles (Page 80-84)

5.3 Extraction de CTS

5.3.2 Algorithme

Le lemme 5.3.1 se contente de donner le correspondant d’une trace tran-sactionnelle dans l’espace des configurations d’une structure de flot. A des fins calculatoires, on caractérise à présent les configurations transactionnelles de façon plus constructive :

Lemme 5.3.2 Soient p un processus CCS et Ep son déploiement dans les

FES, alors X ∈ ConfT(Ep) si et seulement si ∀e ∈ X : e ≺k(X).

On montre d’abord l’implication. Supposons e ∈ X tel que λ1(e) '∈ K et

e '≺+ k(X). Dans ce cas, X\ {e} est une configuration contenant toujours

k(X), ce qui contredit l’hypothèse X ∈ ConfT(Ep). L’autre direction du

lemme est immédiate en notant que si e ≺+ k(X) alors tout sous-ensemble

de X contenant k(X) n’est plus clos à gauche pour la relation de flot. ! Le lemme 5.3.2 implique que pour générer les configurations correspon-dant aux transactions d’un processus p, il suffit de sélectionner les événe-ments dont les actions sont des validations et de construire les configurations minimales les contenant, à la manière de l’exemple 5.2.1, en sélectionnant progressivement les antécédents nécessaires à la clôture de la configura-tion. Nous procédons maintenant à la description formelle de la méthode de construction du CTS. Soit une structure de flot E = )E, ≺, #, λ+. Un

événement e ∈ E est une validation si λ1(e) ∈ K et on note EK ⊆ E,

l’ensemble des validations de E. Une configuration X ∈ Conf(E) est

66 CHAPITRE 5. SYSTÈMES DE TRANSITIONS CAUSALES. une configuration silencieuse X telle que X ∪ {e} ∈ Conf(E) ; on note alors

e ∈ EK1 . Soit p un processus CCS marqué et ∆ l’ensemble de ses définitions

récursives, la procédure d’extraction du CTS de p est donnée figure 5.3.

0. etats.CTS ← {U∆(p)} ; tr.CTS ← ∅ ; S ← {U∆(p)} ; //S contient les FES à analyser.

1. tant que S '= ∅ faire : 2. S ← S\ {E = )E, ≺, #, λ+} ; 3. V ← E1

K;

4. tant que V '= ∅ faire : 5. V ← V \ {e} ;

6. C ← min_conf (E, e) ;//C contient l’ensemble des X ∈ ConfT(E) tq. e ∈ X

7. tant que C '= ∅ faire : 8. C ← C\ {X} ; 9. tr.CTS ← tr.CTS ∪ 0 Ek(X)=⇒ E|X 1 ;

10. si (E|X) '∈ etats.CTS alors S ← S ∪ {E|X} ; 11. etats.CTS ← etats.CTS ∪ {E} ;

12. rendre CTS ;

Fig. 5.3 – Algorithme d’extraction du CTS de p.

Le CTS qu’on construit au cours de cet algorithme est représenté sous la forme d’une paire CTS := )etats, tr+ où etats correspond à l’ensemble des états du CTS désignés par etats.CTS et tr ⊆ etats × K × etats à la relation de transition désignée par tr.CTS. À l’initialisation de l’algo-rithme, CTS ne contient que l’état initial et aucune transition ne lui est encore associée. On appelle S l’ensemble des états du CTS dont on doit

extraire les configurations minimales ; S vaut initialement {U(p)}. Pour

chaque E ∈ S, on construit l’ensemble E1

K des validations directement

ac-cessibles, i.e les événements dont les étiquettes sont dans K et qui ne sont précédés d’aucune autre validation. Pour chacune de ces validations e, l’al-gorithme fait appel à la fonction min_conf(E, e) qui construit l’ensemble des configurations minimales contenant e. Pour réaliser cette fonction on procède comme pour l’exemple 5.2.1 : on commence par supposer qu’on a un ensemble X contenant e et on ajoute progressivement les événements qui sont nécessaires pour que X soit une configuration. Lorsqu’un choix dans

un ensemble E = {e1, . . . , en} se présente pour la continuation de X, on

5.4. DISCUSSION. 67 reste compatible avec la définition 5.1.2 et on poursuit avec la construction

des configurations incompatibles X ∪ Ei, . . . , X ∪ Ek. Si aucune

continua-tion pour X n’est possible et que X n’est pas close à gauche, alors on jette

X. On obtient au final un ensemble de configurations C ⊆ ConfT(E), tel

que C = {X | ∀e ∈ X : e ≺ k(X)}. Par le lemme 5.3.2, cet ensemble

corres-pond précisément aux traces transactionnelles issues de p. On ajoute alors au CTS de p les transactions correspondant à chacune des configurations ainsi construites. On vérifie enfin si le résidu de E par chacune de ces confi-gurations est déjà présent dans les états du CTS. Si tel n’est pas le cas, on l’ajoute dans l’ensemble S des états à étudier. Une fois que toutes les validations éligibles de E ont été traitées, on ajoute E aux états du CTS et on reprend en 1. tant qu’il reste des résidus dans S.

5.4 Discussion.

Afin de définir une méthode constructive pour extraire un système de transitions causales, nous avons utilisé le déploiement d’un processus dans une structure d’événements. De nombreuses approches antérieures ont ex-ploité des techniques similaires, basées sur des réseaux de Petri, afin de

définir des méthodes efficaces de vérification10. Dans le cadre des algèbres

de processus, l’opération de déploiement est moins immédiate en raison du besoin d’exprimer la composition de processus de façon modulaire. Dans cette optique, les structures de flot offrent le double avantage de se com-poser de façon relativement simple et de ne pas induire d’explosion dans le nombre d’événements à considérer après composition. Toutefois, les objets obtenus après déploiement sont des structures a priori infinies lorsque le processus initial contient des appels à des définitions récursives. Ce dernier point constitue un problème bien connu qui est classiquement traité en tra-vaillant sur un préfixe fini de la structure d’événements, obtenu en stoppant le déploiement du processus initial lorsqu’on est certain qu’aucune nouvelle

propriété ne pourra être observée11. Ce type de coupure nécessite, en

prin-cipe, que le processus déployé soit à états finis. Nous verrons comment traiter ce point clef, ainsi que plusieurs aspects d’implémentation dans le chapitre suivant.

10[McMillan, 1992, Esparza, 1994, Abdulla et al., 2000, Baldan et al., 1999]

Chapitre 6

Un outil de vérification

automatique.

Sommaire

6.1 Structures de flot récursives. . . . 69 6.1.1 Un déploiement borné. . . 69 6.1.2 Opérations sur les FESrec. . . 72 6.1.3 Algorithme sur les FESrec. . . 80 6.2 Module Causal : un outil de vérification. . . . 82 6.2.1 Représentation du conflit. . . 82 6.2.2 Banc d’essai. . . 85 6.3 Discussion. . . . 87

Nous avons vu, au chapitre précédent, qu’il est possible d’extraire le sys-tème de transitions causales d’un processus en tirant profit d’une sémantique de CCS basée sur les structures d’événements. Plus précisément, à supposer qu’on cherche à construire le système de transitions causales d’un proces-sus p, nous avons défini un algorithme permettant de générer un système de transitions isomorphe, dont les états sont des structures d’événements et dont les transitions sont étiquetées par des configurations particulières, dites minimales. Ces dernières sont caractérisées par la propriété suivante : un événement d’une configuration minimale est, soit l’unique validation de la configuration, soit un prédécesseur de cette validation pour la clôture tran-sitive de la relation de flot (cf. Lemme 5.3.2). Générer le CTS de p revient donc à construire pour chaque validation de p, l’ensemble des configurations minimales les contenant. L’intérêt de la méthode décrite est de générer les transactions d’un processus sans passer par des traces qui ne seraient pas transactionnelles où qui ne produiraient pas, in fine, de validation. Le

6.1. STRUCTURES DE FLOT RÉCURSIVES. 69 blème qui nous reste à résoudre, afin d’implémenter concrètement l’algo-rithme de la figure 5.3, est que les structures sur lesquelles notre procédure doit s’exécuter sont des objets potentiellement infinis. Dans ce chapitre nous définissons dans une première partie les structures de flot récursives qui cor-respondent à des préfixes finis de structures de flot. Nous verrons que sous certaines conditions et en utilisant ces structures récursives, l’algorithme du chapitre précédent termine lorsque le CTS du processus qu’on cherche à analyser est fini. Nous étudierons ensuite l’articulation générale de l’im-plémentation de cet algorithme réalisée dans un module Ocaml, ainsi qu’un banc d’essai permettant de comparer la méthode déclarative et la méthode directe, correspondant respectivement aux chemins de gauche et de droite de la figure 5.1.

6.1 Structures de flot récursives.

Dans le document Algèbres de Processus Réversibles (Page 80-84)

Documents relatifs