------------------------------------------------------------------
-- Temporal help nodes

------------------------------------------------------------------
-- Sofar(X) is true now iff X has been continuously true up to now

node Sofar( X : bool )
returns ( Y : bool );
let
  Y = X and (true -> pre Y);
tel

------------------------------------------------------------------
-- First(X) is a constant stream which has the value that X had
-- in the first instant.

node First( X : int )
returns ( a : int );
let
  a = X -> pre a;
tel

------------------------------------------------------------------
-- Since(X,Y) is true now iff X has been true at some point, 
-- and Y has been continuously true since _after_ then.


node Since( X, Y : bool )
returns ( SinceXY : bool );
let
  SinceXY = X or (Y and (false -> pre SinceXY));
tel

------------------------------------------------------------------
-- SinceIncl(X,Y) is true iff X has been true at some point,
-- and Y has been continuously true since then.

node SinceIncl( X, Y : bool )
returns ( SinceXY : bool );
let
  SinceXY = Y and (X or (false -> pre SinceXY));
tel