diff --git a/content/conception_formelle/2_verification/index.md b/content/conception_formelle/2_verification/index.md index 3550284..af87a7e 100644 --- a/content/conception_formelle/2_verification/index.md +++ b/content/conception_formelle/2_verification/index.md @@ -1,7 +1,7 @@ --- title: "Conception formelle : Validation et vérification" date: 2023-01-13 -tags: ["Bugs", model-checking"] +tags: ["Bugs", "model-checking"] categories: ["Conception formelle", "Cours"] mathjax: true --- @@ -151,3 +151,80 @@ Nous utilisons aussi la logique ensemblistes (union, intersection etc.). Nous avons dans les graphes deux type de propriétés : les **états** et les **transitions**. + +### Les constantes + +Pour chaque automate, nous avons des constantes de disponibles. Commençons par +les constantes vides : + + * `empty_s`: état vide + * `empty_t`: transition vide + +Nous avons ensuite les *sets de **tout*** : + + * `any_s`: tous les états + * `any_t`: toutes les transitions + +Les sets d'états initiaux: `initial` + +Et un ensemble de transitions " `self`, `epsilon`, `self-epsilon` : boucles sur +les états. + +Il est possible de calcules des expressions élémentaires via des variables, par +exemple: + +\\([ s%2 = 0 ]\\) + +Permet de trouver les états pairs. + +### Opérateurs ensemblistes + +Il est possible d'utiliser des opérateurs ensemblistes comme l'union et +l'intersection + +Soit \\(F_1\\) et \\(F_2\\) deux formules du même type: + +\\( +[\\![ F_1 \text{ et } F_2 ]\\!] = [\\![ F_1 \\&\\& F_2 ]\\!] = [\\![ F_1 \cap F_2 ]\\!] +\\\ +[\\![ F_1 \text{ ou } F_2 ]\\!] = [\\![ F_1 \\| F_2 ]\\!] = [\\![ F_1 \cup F_2 ]\\!] +\\) + +### Opérateur source, destination + +Soit \\(T\\) une formule de transitions + + * \\(\text{src}(T)\\) représente l'ensemble des états source d'au moins une + transition de \\(T\\) + * \\(\text{tgt}(T)\\) représente l'ensemble des états destination d'au moins + une transition de \\(T\\) + +Soit \\(S\\) une formule d'état + + * \\(\text{rsrc}(S)\\) représente les transitions qui ont leurs source dans au + moins un état de \\(S\\) + * \\(\text{rtgt}(S)\\) représente les transitions qui ont leurs destination + dans au moins un état de \\(S\\) + +### Exemples + +\\(\text{any_s} - \text{src}(\text{any_t})\\) rerésente les états qui sont +source d'aucune transition, dont on ne peut pas sortir (état puit) + +\\(\text{src}(\text{rtgt}(S) \cap T)\\) représente les états sources de +transitions vers \\(D\\) (**à vérifier**) + +### Reach, coreach et loop + +Ces opérateurs permettent de calculer des formules, dans les explications +suivantes \\(S\\) est une formule d'état et \\(T, T_1, T_2\\) des formulesde +transitions: + + * \\(\text{reach}(S,T)\\) représente tous les états au départ de \\(S\\) avec + \\(T\\) comme transitions + * \\(\text{coreach}(S,T)\\) représente tous les états avec comme destnation + \\(S\\) et utilisants \\(T\\) comme transitions. + * \\(\text{loop}(T_1,T_2)\\) représente les *Strongly Connected Components* + (SCC). C'est une formule de transition tel que \\(T_3 \subseteq T_2\\) et + \\(T_3 \cap T_1 \neq \emptyset\\) +