PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array,...

12
PAT Advanced Tutorial

Transcript of PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array,...

Page 1: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

PAT Advanced Tutorial

Page 2: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

Outline

• Alphabet calculation and declaration

• Global Variables– Var, array, size

• Tips

• Examples– Dining Philosophers– Peterson’s Algorithm

Page 3: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

Alphabet calculation and declaration

• PAT automatically calculates the alphabet of the expression.VM() = insertcoin -> coffee -> VM();

VM() = insertcoin -> Inserted(); Inserted() = coffee -> VM();

• User can explicitly specify the alphabet for a particular processClock(i) = tick.i -> Clock(i+1);System = Clock(0) || Skip;#alphabet Clock {tick};#alphabet Clock {tick.i};

Page 4: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

Global Variables

• Variable declaration (No type)– Simple variable

• var x;• var y = 0;• var z = false;

– Array• var array = [0, 1, 3, 5];• var floor[5]; • var floor[N];

– Channel• channel c 5;

• Scope: Global

Page 5: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

Process Parameters vs. Global Variables

• Used in event expressions– GV can (supported from v1.3.0)– PP can

• Used as parameter for process– GV can (supported from v1.3.0)– PP can

• LHS of event assignment– GV can– PP can NOT

• RHS of event assignment– Both can

var x = 0;P(i) = a.x -> P(i); P(i) = a.i -> P(i);

var x = 0;P(i) = a -> P(x); P(i) = a -> P(i+2);

var x = 0;P(i) = a{x=9;} -> P(i); P(i) = a{i=9;} -> P(i); (wrong)

var x = 0;P(i) = a{x=x+1;} -> P(x); P(i) = a{x=i+1;} -> P(i);

Page 6: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

Finite Model

• # of different process needs to be finite– P(i) = a.i -> P(i); – P(i) = a.i -> P(i+1); (infinite)

• Value range of global variables needs to be finite– var x = 0;– P(i) = a{x=x+1;} -> P(i); (infinite)

• Out of memory exception will be thrown• Check for infinite model

– System = P(0);– #define out x > 100;– #assert System reaches out;

Page 7: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

Data Race!

• var x = 0;

• P = a{x=1;} -> P;

• Q = a{x=2;} -> Q;

• S = P || Q;

Page 8: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

Fairness

• PAT supports two ways of adding fairness into the systems– Event annotation: wf, sf, wl, sl

• wl(pick.i.i)– Process level option: weak fairness, strong local

fairness, strong global fairness• When do we need fairness?

– Counterexamples with loop. • Leader election in ring example.

• How to add fairness?– Try process level option first.– Ask us.

Page 9: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

What properties to test?

• Deadlock free

• Safety properties: bad things never happen– #define badthing …– #assert System reaches badthing

• Liveness properties: good things eventually happen– #assert System |= []<> goodthing

Page 10: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

Dining Philosophers

Page 11: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

Peterson's algorithm

Page 12: PAT Advanced Tutorial. Outline Alphabet calculation and declaration Global Variables –Var, array, size Tips Examples –Dining Philosophers –Peterson’s.

PAT Model of Peterson’s Algorithm• var flag[2];• var turn = 0;

• var counter = 0;

• P0 = set0.1{flag[0] = 1;} -> set0.2{turn=1;} -> LoopTest(1); cs.0{counter = counter +1;} -> exit.0{flag[0] = 0;counter = counter -1;} -> P0;

• LoopTest(i) = if(flag[i] == 1 && turn == i)• {• loop -> LoopTest(i)• }• else• {• Skip• };

• P1 = set1.1{flag[1] = 1;} -> set1.2{turn=0;} -> LoopTest(0); cs.1{counter = counter +1;} -> exit.1{flag[1] = 0;counter = counter -1;} -> P1;

• Peterson() = P0() ||| P1();

• #define goal counter > 1;• #assert Peterson() reaches goal;• #assert Peterson() |= []<> cs.0;