You are on page 1of 36

Chapitre 4

Vrification de modles:

Automates de Bchi et SPIN


(Holzmann Chap. 6)

Chap 7

http://w3.uqo.ca/luigi/INF6001/

Proprits dtats et excutions (chanes)


X=X/2

s0

X=13

s1
X0

X=X/2+1

s2

X>0

s3

Nous pouvons affirmer des proprits pour: Des tats: p.ex. ltat s1, X=13 toujours (invariant) pas besoin de logique temporelle ici

X: entier et / a rsultat entier

Des excutions, p.ex. x0 ou x0, mais pas x0. Observez que dans ce cas le contrle est sur les transitions.
tat dacceptation .

INF6001 Chap 7

Comment vrifier les proprits temporelles?

Nous avons une machine dont nous pouvons observer certaines proprits, p.ex.

quune variable a toujours une certaine valeur ou une proprit temporelle

Solution:

excuter la machine en parallle avec une autre machine qui observe et vrifie ces proprits composition synchrone nous pouvons aussi vrifier une proprit ngative, c.-.-d. que la machine ne satisfait pas une proprit

never automata
3

INF6001 Chap 7

Vrification de modle

Modle vrifier

Machine exprimant des proprits vrifier

Composition synchrone

INF6001 Chap 7

Exemple
AB pour vrifier p

s1
Cet AB synchronise avec un autre AB seulement si la proprit p reste toujours vraie, toutes les transitions

INF6001 Chap 7

Acceptation dans les automates de Bchi


Un automate rgulier accepte toutes les chanes qui conduisent un tat final Un AB accepte toutes les chanes infinies qui passent un nombre infini de fois par un tat final Pour chaque expression de logique temporelle, il y a un AB qui accepte les chanes qui satisfont cette expression

Il existe un algorithme pour effectuer cette construction, pas discut dans ce cours

Incompltude des AB
LAB de gauche ne considre pas le cas de recevoir un p Ceci simplifie la comprhension et la vrification, car les transitions qui ne conduisent pas au rsultat dsir ne sont pas prises en considration

s1

s1

s2

INF6001 Chap 7

Exemple
AB pour vrifierp

true

s0

s1

Cet AB est prt accepter des transitions o p est faux, mais il est content seulement quand p devient vrai.

INF6001 Chap 7

Exemple
AB pour vrifier que p
(enfin toujours p)

true

s0

s1

true accepte p et autres mais aprs un certain p, il naccepte que des p aprs

INF6001 Chap 7

10

Comparer avec AB dterministe


LAB ci-dessous nest pas bon pour p Car sil y a un 1er p qui nest pas suivi par p il rejette.
Il faut dans ce cas continuer chercher un p futur aprs lequel p

s0

s1

Cet AB montre aussi les limites de lexpressivit des oprateurs , car ce quil exprime (aprs le 1er p, toujours p) nest pas exprimable avec ces oprateurs seulement. faut utiliser U: p U p

INF6001 Chap 7

11

Autre exemple impliquant U (until fort)

true

s0

q
pUq

s1

INF6001 Chap 7

16

Exemple p
true p
toujours finalement p (infiniment souvent p)

s0

s1

true
Accepte seulement quand il continuera dy avoir des p dans le futur

INF6001 Chap 7

18

Exemple: utiliser les notions dquivalence

p
true

toujours finalement p

s0

p true

s1

Un p doit tre trouv, aprs on peut trouver autre chose, mais il faut retourner sur p

INF6001 Chap 7

20

Exemple (pas trs intuitif, mais)


(p q) = ( p q)
Dornavant, un p est suivi toujours par un q.
Utilisant la formule de droite, nous voyons que:
cause du fait que faux vrai = vrai, p na pas besoin de se produire afin que q se produise et rende la formule vraie

INF6001 Chap 7

21

Exemple continuation
(p q) = ( p q)
Dornavant, un p est suivi toujours par un q

pq
true

true

s0

s1

q
Accepte tant que p q est vrai, peut aussi passer un tat o un q doit se produire plus tard
INF6001 Chap 7
22

Never claims: exigences ngatives


Nous verrons quen principe il est plus efficace de contrler labsence de comportements dfendus plutt que de contrler que tous les comportements soient permis LAB appropri est donc obtenu par ngation dune formule de logique temporelle

INF6001 Chap 7

24

Ngation de la formule prcdente:


(p q) = ( p q)

Dornavant, un p est suivi toujours par un q


Donc cette formule est fausse sil y aura un p et puis aucun q

INF6001 Chap 7

25

Automate ngation: never automata


Supposons que nous voulions quun comportement niant la formule prcdente soit dtect:
(p q) = ( p q) = ( p q) = (p q) = par dfinition de par loi de dualit par loi de De Morgan par dualit

(p q)

true

s0

p q

s1

Donc si un comportement tombe dans ltat s1, il nest pas conforme aux exigences INF6001 Chap 7
26

Proprits dun systme


Pour prouver qu un systme jouit des proprits spcifies par des expression de logique temporelle, il faut montrer que tous les comportements du systme ont ces proprits Nous appelons langage dun automate lensemble de chanes, lensemble des comportements, quil accepte Proprits ou exigences positives

Toutes les excutions du systme satisfont aux proprits Pour prouver une exigence positive, nous devons prouver que le langage du systme est inclus dans le langage de lAB qui exprime lexigence Aucune excution du systme ne satisfait aux proprits Le langage du systme et le langage de lexigence doivent avoir intersection vide Si lintersection est non vide, les excutions dans lintersection sont des contreexemples, montrant dans quelles situations la proprit est viole
27

Proprits ou exigences ngatives


INF6001 Chap 7

Deux manires de prouver ou refuser une proprit

Prouver que tous les comportements du systme satisfont la proprit Chercher un comportement du systme qui satisfait la ngation de la proprit! (un contrexemple)

Clairement, cette deuxime stratgie pourrait aboutir plus rapidement, car

ds quun contrexemple est trouv, nous savons que la proprit est fausse et nous navons pas besoin de continuer

INF6001 Chap 7

28

Never claims
Donc un model checker comme SPIN systmatiquement nie les proprits quon veut vrifier et cherche un contrexemple au lieu de chercher prouver que une proprit souhaite est toujours vraie

Si un contrexemple est trouv, on sait que la proprit est fausse et on a sauv du temps Si un contrexemple nest pas trouv, on sait que la proprit est vraie et on a fait le mme travail que dans le cas o on aurait cherch prouver la proprit positive directement

Les proprits nies sappellent never claims


INF6001 Chap 7
29

Preuve dexigences ngatives


tant donn un systme S et une formule LTL f contrler pour S

Construire un AB Af pour la ngation de f

Il naccepte que les chanes qui satisfont f, qui violent f

Calculer la composition synchrone des machines S et Af Contrler si le langage accept par cet automate est vide Sil est vide, toutes les excutions de S satisfont f

Sil a des excutions, il y a au moins une excution dans S qui est un contre-exemple pour f

En pratique, la composition synchrone souvent na pas besoin dtre calcule dans sa totalit car ds quon trouve un contre-exemple on a prouv que lexigence nest pas satisfaite
35

INF6001 Chap 7

Analyse de modles, Model Checking


Modle M
byte n; proctype Aap() { do :: n++ :: noot!MIES od }

Proprit [] (n<3)

Espace dtats

Analyseur

M |

Explosion dtats.

OUI Proprit satisfaite

NON, + contre_exemple

INF6001 Chap 7

47

Dfinition[Clarke & Emerson 1981]


Model checking is an automated technique that, given a finite-state model of a system and a logical property, systematically checks whether this property holds for (a given initial state in) that model.

INF6001 Chap 7

48

Promela et SPIN
Promela est un langage pour la spcification des systmes rpartis

SPIN est lanalyseur (model checker) et son point de dpart est la thorie que nous venons de discuter

INF6001 Chap 7

49

Promela
Protocol/Process Meta Language Influenc par le CSP de Hoare Et par C

Mais il est un langage pour la spcification de modles Pas un langage dimplantation

De comprhension facile pour les implmenteurs Admet la communication


Par variables globales partages Synchrone, directe Asynchrone, par canaux


50

INF6001 Chap 7

Promela Model
A Promela model consist of:

mtype, constants, typedefs (records) chan ch = [dim] of {type, } asynchronous: dim > 0 rendez-vous: dim == 0

type declarations channel declarations

global variable declarations


process declarations [init process]

- simple vars - structured vars - vars can be accessed by all processes


behaviour of the processes: local variables + statements initialises variables and starts processes 51

INF6001 Chap 7

Example of a Promela model

Promela Model
mtype = {REQ,ACK}; message types (constants) typedef Msg { byte a[2]; record declaration mtype tp; } ; chan toR = [1] of {Msg}; channel declaration bool flag; global variable proctype Sender() { Msg m; ... m.a[0]=2; m.a[1]=7; m.tp = REQ; toR ! m; } Inputs/outputs proctype Receiver(byte n) { Msg m; local variable ... toR ? m; } creates processes init { run Sender(); run Receiver(2); } A Promela model corresponds to a (usually very large, but) finite transition system, so no unbounded data no unbounded channels no unbounded processes no unbounded process creation

INF6001 Chap 7

52

Processes

(1)

A process type (proctype) consist of


proctype Sender(chan in; chan out) { bit sndB, rcvB; local variables do Une sortie et puis -> :: out ! MSG, sndB -> in ? ACK, rcvB; if body :: sndB == rcvB -> sndB = 1-sndB :: else -> skip fi The body consist of a od sequence of statements. }

a name a list of formal parameters local variable declarations name body

formal parameters

INF6001 Chap 7

53

Statements
The body of a process consists of a sequence of statements. A statement is either

executable: the statement can depends on the global be executed immediately. state of the system. blocked: the statement cannot be executed.

executable/blocked

An assignment is always executable. An expression is also a statement; it is executable if it evaluates to non-zero.


2 < 3 x < 27 smaller 27 3 + x
INF6001 Chap 7

always executable only executable if value of x is executable if x is not equal to 3


54

Statements

(2)

Statements are separated by a semi-colon: ;. or by the equivalent ->

The skip statement is always executable.

does nothing, only changes process process counter

A run statement is only executable if a new process can be created (remember: the number of processes is
bounded).
int x; proctype Aap() { int y=1; skip; run Noot(); x=2; x>2 && y==1; skip; }

Executable if Noot can be created Can only become executable if some other process makes x greater than 2.

INF6001 Chap 7

55

Statements

(3)

assert(<expr>);

The assert-statement is always executable. If <expr> evaluates to zero, SPIN will exit with an error, as the <expr> has been violated. The assert-statement is often used within Promela models, to check whether certain properties are always valid in a state.
proctype monitor() { assert(n <= 3); } proctype receiver() {
byte msg; ...

toReceiver ? msg; assert(msg != ERROR);


...

INF6001 Chap 7

56

Interleaving Semantics
Promela processes execute concurrently. Non-deterministic scheduling of the processes. Processes are interleaved (statements of different processes do not occur at the same time).

exception: rendez-vous communication.

All statements are atomic; each statement is executed without interleaving with other processes. Each process may have several different possible actions enabled at each point of execution.

only one choice is made, non-deterministically.


= randomly 57

INF6001 Chap 7

Bit altern en SPIN http://spinroot.com/spin/Man/Manual.html


1 #define MAX 5 2 3 mtype = { mesg, ack, nak, err }; 4 5 proctype sender(chan in, out) 6 { byte o, s, r; 7 8 o=MAX-1; 9 do 10 :: o = (o+1)%MAX; /* next msg */ 11 again: if 12 :: out!mesg(o,s) /* send */ 13 :: out!err(0,0) /* distort */ 14 :: skip /* or lose */ 15 fi; 16 if 17 :: timeout -> goto again 18 :: in?err(0,0) -> goto again 19 :: in?nak(r,0) -> goto again 20 :: in?ack(r,0) -> 21 if 22 :: (r == s) -> goto progress 23 :: (r != s) -> goto again 24 fi 25 fi; 26 progress: s = 1-s /* toggle seqno */ 27 od 28 } 29 30 proctype receiver(chan in, out) 31 { byte i; /* actual input */ 32 byte s; /* actual seqno */ 33 byte es; /* expected seqno */ 34 byte ei; /* expected input */ 35 36 do 37 :: in?mesg(i, s) -> 38 if 39 :: (s == es) ->

40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 progress:

assert(i == ei);
es = 1 - es; ei = (ei + 1)%MAX; if :: out!ack(s,0) :: out!err(0,0) :: skip fi :: (s != es) -> if :: out!nak(s,0) :: out!err(0,0) :: skip fi

/* send, * /* distort */ /* or lose

/* send, */ /* distort */ /* or lose */


fi :: in?err ->

out!nak(s,0) od } init { chan s_r = [1] of { mtype,byte,byte }; chan r_s = [1] of { mtype,byte,byte }; atomic { run sender(r_s, s_r); run receiver(s_r, r_s) } }

INF6001 Chap 7

We want to verify that data that is sent can only be delivered to the receiver without any deletions or reorderings, despite the possibility of arbitrary message loss. The assertion on line 40 verifies precisely that. Note that if it were ever possible for the protocol to fail to meet the above requirement, the assertion can be violated (autres dtails intressants dans le site)

58

Xspin in a nutshell
Xspin allows the user to

edit Promela models (+ syntax check) simulate Promela models random interactive with dialog boxes to set guided various options and directives verify Promela models to tune the verification process exhaustive bitstate hashing model additional features Xspin suggest abstractions to a Promela model (slicing) Xspin can draw automata for each process LTL property manager Help system (with verification/simulation guidelines)
59

INF6001 Chap 7

Conclusions sur SPIN


Bases thoriques trs solides

Logique temporelle linaire et automates de Bchi

Outil trs performant Loutil de vrification le plus utilis dans notre domaine
Excellent survol pratique sur SPIN et plusieurs des concepts que nous avons vu:

http://plan9.bell-labs.com/sys/doc/spin.html

INF6001 Chap 7

60

You might also like