• Aucun résultat trouvé

3.5 Vérification du système

3.5.1 Algorithme d’application

Nous définissons l’opération (Algorithme 1) qui permet l’application d’un transducteur de treillis à un automate de treillis. Cet algorithme itère sur les transitions du transducteur, récupérant les gardes de longueur n, puis cherche dans l’automate les séquences (de longueur n) telles que toute intersection entre gardes et lettres correspondantes ne soit pas vide. À partir des transitions éligibles, nous introduisons de nouvelles séquences où chaque transition correspond à l’application d’une des fonctions de la transition du transducteur sur l’ensemble des intersections de γiioù γ est une garde et σ, un état. N.B. Comme de nouvelles transitions peuvent être créées (i.e. m > n), il est nécessaire d’introduire de nouveaux états intermédiaires entre p0et pn. Une fois ces transitions calculées, nous déterminons les états initiaux (resp. finaux) du nouvel automate en regardant si les deux états de départ (resp. d’arrivée) des nouvelles transitions appartiennent aux états initiaux (resp. finaux) du transducteur et de l’automate. Finalement, nous filtrons les transitions inatteignables par la fonction trim qui consiste en l’intersection des états

atteignables et co-atteignables1 de l’automate avant de déterminiser l’automate résultat. En effet, dans la définition de notre transducteur, il est possible de créer des transitions de la forme γ1·. . . · γn / ε. En appliquant notre algorithme, ce type de transition peut alors générer des ε-transitions. Les automates de treillis étant nécessairement déterministes, nous devons les éliminer. Pour cela, nous utilisons, clas-siquement [HMU06], un algorithme de fermeture transitive pour construire un équivalent déterministe.

Algorithme 1 : Application(T , A)

pour tout q −−−−−−−−−−−−−−−−→ qγ1·...·γn/ f1·...·fm 0∈ ∆T faire pour tout p0−−→ pσ1 1· · ·−−→ pσn n ∈ ∆A faire

si { ∀i ∈ {1 . . . n} | σii , ⊥} alors QT0 ← QT0∪ {(p0, q), (p1, q), . . . , (pn, q0)} args ← {σ11, . . . , σnn} ∆T0 ← ∆T0∪ {(p0, q) f1(ar g s) −−−−−−−→ (p1, q) · · · fm(ar g s) −−−−−−−−→ (pn, q0)} fin si fin fin

pour tout (p, q) ∈ QT0faire si p ∈ QiA∧ p ∈ QiT alors QTi 0 ← QTi 0∪ {(p, q)} fin si si p ∈ QAf ∧ p ∈ QTf alors QTf 0 ← QTf 0∪ {(p, q)} fin si fin T0← hΣA,QT0 ,QT0 i ,QT0 f ,∆T0i retournerε-removal(trim(T0))

Nous prouvons désormais la correction de cet algorithme. Ceci revient à montrer que le résultat de l’application du transducteur d’un mot du langage de l’automate est contenu dans le langage de l’application du transducteur à l’automate.

Lemme 3. Soit T = hΛ,QT,QT 0,QT

f,∆Ti, un transducteur de treillis et A = hΛ,QA,QA 0,QA

f,∆Ai, un automate de treillis, nous avons :

T(L ( A)) ⊆ L (T ( A))

Démonstration. Par définition, w0 ∈ T (w) avec w ∈ L ( A) si p0 w1/w 0 1 −−−−− p1 w2/w0 2 −−−−− . . . wn/w 0 n −−−−−− pn2 avec p0 ∈ QT0, pn ∈ QTf, w= w1.w2. . . wn, w0= w0 1.w0 2. . . w0

net ∀i= 1..n,∃(pi−1,Gi, Fi, pi) ∈ ∆T avec wi v Gi et wi0= F(wi).

Puisque w ∈ L ( A), il vient ∃q0...qn ∈ QA avec q0 ∈ Q0A, qn ∈ QAf tel que, q0 −− qw1 1 w2

−− . . . −−−wn qn.

En d’autres mots, ∀i = 1 . . . n il y a une séquence de transitions telle que : qi−1 λ(i, 1)

−−−−→. . .−−−−−−λ(i, mi )→ qi

avec wi v λ(i,1) . . . λ(i, mi).

1. Ensemble des états atteignables dans l’automate depuis les états initiaux (resp. finaux) 2. p w/w

0

3.5. VÉRIFICATION DU SYSTÈME 47

Ainsi, wi ⊆ Giuλ(i,1) . . . λ(i, mi) et F (wi)= w0

i v F (Giuλ(i,1) . . . λ(i, mi)). Par définition de T ( A),(p0, q0) w

0 1

−− . . . w 0 n

−−− (pn, qn) est un chemin accepté de T ( A), donc w0 ∈ L (T ( A)).

 Complexité

La complexité de notre algorithme d’application de transducteur dépend de la taille de la partition π de l’automate de treillis utilisée et de la longueur maximum N des gardes utilisées dans les transitions du transducteur. Ainsi, la complexité est :

O(|∆T| · |π|N · N+ |QA| · |QT|)

Démonstration. Dans l’algorithme 1, il y a deux imbrications de boucles « pour tout » :

1. Première imbrication : le premier niveau sera exécuté au plus |∆T| fois ; pour le second il y a tout au plus |π|nséquences à considérer dans l’automate A, car celui-ci est partitionné, ce qui implique qu’il y a au plus |π| transitions sortant de chaque état, et comme N est défini comme la longueur maximale des séquences apparaissant dans les gardes, on a bien toujours n ≥ N quelle que soit la séquence, d’où une majoration par |π|N. Enfin, dans la conditionnelle, on effectue tout au plus O(n) calculs, ce qui donne, pour cette première implication, une complexité O(|∆T| · |π|N · N ) 2. Seconde imbrication : il y a au plus |QT ( A)| ≤ |QA| · |QT| paires à considérer

La complexité au pire cas est donc bien de l’ordre de O(|∆T| · |π|N · N+ |QA| · |QT|).  En pratique, le cardinal des partitions de l’automate est en relation avec la taille du code cependant, dans notre sémantique, nous n’avons pas de séquences de gardes de longueur supérieure à 2. En outre, le nombre d’états du transducteur est, par construction, toujours égal à 1.

3.5.2 Calcul de l’espace d’atteignabilité

Comme énoncé plus haut, nous cherchons à calculer une sur-approximation de l’ensemble des états atteignables. Dans la littérature, cette sur-approximation du T(I ) a été étudiée dans [BHV04] où les auteurs calculent des abstractions entre deux ensembles d’états successifs jusqu’à obtenir un point fixe. Notre méthode est similaire à ceci près que nous manipulons des automates de treillis et pouvons utiliser des opérations d’élargissementO en tant que fonction d’abstraction. Notre calcul de point fixe prend la forme d’une itération de Kleene présentée par la Figure 3.7. Cet algorithme termine car la suite calculée sera stationnaire au delà d’un certain rang, du fait des propriétés de l’opérateur d’élargissement détaillé plus bas.

En théorie, ce calcul itératif peut donner un résultat très imprécis. Cependant, notre analyse utilise un treillis contenant les localités de chaque processus. Ainsi, en pratique, nous pouvons effectuer une première amélioration sur la précision de notre analyse en appliquant l’opérateurO seulement à certaines localités (e.g. au point d’entrée des boucles) sachant que l’opérateur d’élargissement n’est nécessaire que pour casser les cycles de dépendance. Dans [Bou93], l’auteur donne une étude détaillée sur les choix des localités où appliquer cet opérateur.

A0= I An+1=     An si T (An) v An AnO (Ant T (An)) sinon Tα(I )= lim n→+∞An Figure 3.7 – Calcul de Tα(I )

Comme décrit dans [LJ07], l’opérateur d’élargissement appliqué à deux automates de treillis consiste d’abord à calculer les formes des deux automates (shape automata) et à tester leur isomorphisme. En ef-fet, la forme d’un automate de treillis partitionné A est obtenue en remplaçant toute transition (q, λ, q0) de A par une transition (q, σ−1(λ), q0), autrement dit on remplace tout élément du treillis par le représen-tant de sa classe d’équivalence. Comme il n’y a qu’un nombre fini de classes d’équivalence, shape(A) est bien un automate fini.

Nous rappelons la définition de l’application de l’opérateur d’élargissement appliqué à deux auto-mates de treillis. Soient deux autoauto-mates de treillis A1et A2, que l’on suppose normalisés (i.e. détermi-nistes minimaux).

— Si shape(A1) et shape(A2), qui sont eux aussi déterministes et minimaux, reconnaissent le même langage, alors ils sont isomorphes ; appelons ι : shape(A1) → shape(A2) cet iso-morphisme, l’automate de treillis A1∇A2 est obtenu ainsi : c’est un automate qui a le même ensemble d’états que A1 et, pour toute transition (q1, λ1, q0

1) de A1, il existe une transition (ι(q1), λ2, ι(q0

1)) dans A2et donc on ajoute une transition (q1, λ1Λλ2, q0

1) dans A1∇A2. — Sinon, on considère l’automate A1∪ A2. Soit ≡ une relation d’équivalence, dont le nombre de

classes d’équivalences est borné par un entier N (par exemple : la bisimulation bornée à l’ordre k[LJ07]). Alors A1∇A2est défini comme le quotient (A1∪ A2)\ ≡.

[LJ07] a prouvé qu’il s’agit bien d’un opérateur d’élargissement, qui est paramétrable par le choix de l’élargissement sur le treillis numérique ∇Λet le choix de la relation d’équivalence ≡.