in x,y : int where x>0 /\ y>0
local t : int where t=x
out z,w : int where (z,w)=(0,0)
l1: while (t>0) do
l2: if (w+1 = y)
then
l3: (z,w,t) := (z+1,0,t-1)
else
l4: (z,w,t) := (z,w+1,t-1);
l5:
|
in x : int where x>=0
local u,w : int where (u,w)=(1,1)
out z : int where z=0
l0: while (w<=x) do
l1: (z,u,w) := (z+1, u+2, w+u+2);
l2:
|
local get, put: channel of bool;
Sem :: [
local x : bool;
s1: loop forever do [
s2: get ==> x;
s3: put ==> x
];
s4:
]
||
P1 :: [
local y : bool where y = true;
p0: loop forever do [
p1: noncritical;
p2: get <== y;
p3: critical;
p4: put <== y
];
p5:
]
||
P2 :: [
local z : bool where z = true;
m0: loop forever do [
m1: noncritical;
m2: get <== z;
m3: critical;
m4: put <== z
];
m5:
]
|