----------------------------------------------------------------
node COUNT(init,incr:int;reset:bool) returns (n:int);
let
n = init -> if reset then init else pre(n)+incr;
tel
----------------------------------------------------------------
node TWO_STATES (init,set,reset:bool) returns (state:bool);
let
state = init -> if set and not pre(state) then true
else if reset and pre(state) then false
else pre(state);
tel
----------------------------------------------------------------
-- node stopwatch (start_stop,reset: bool) returns (time:int);
-- var CK, running: bool;
-- let
-- time = current(COUNT((0,1,reset) when CK));
-- CK = true -> running or reset;
-- running = TWO_STATES(false, start_stop, start_stop);
-- tel
----------------------------------------------------------------
-- first attempt:
----------------------------------------------------------------
node stopwatch (start_stop,reset: bool) returns (time:int);
var CK, running: bool;
let
time = 0 -> if CK then COUNT(0,1,reset) else pre time;
CK = true -> running or reset;
running = TWO_STATES(false, start_stop, start_stop);
tel