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: ] |