```(* Resets the state when the reset signal has a rising edge *)
(* y(0) = false y(n) = not (x(n-1)) & x(n) *)
let node rising_bool(x) = y where
rec y = false -> not (pre x) & x

(* Resets the state when the reset signal has a falling edge *)
let node falling_bool(x) = rising_bool(not x)

let node either_bool(x) = rising_bool(x) or falling_bool(x)

(* Resets and holds the output to the initial condition while
* the reset signal is nonzero *)
let node level_bool(x) = l where
rec l = x or (false fby x) & (not x)

(* Resets the output to the initial condition
* when the reset signal is nonzero *)
let node sampled_level_bool(x) = x

(*
we get:

with a note that ``For the discrete-time integrator block, all trigger
detections are based on signals with positive values.''

*)

let node rising_float(x) = r where
rec r = (false fby (x < 0.0)) & (x >= 0.0)

let node strictly_rising_float(x) = r where
rec r = (false fby (x <= 0.0)) & (x > 0.0)

let node falling_float(x) = r where
rec r = (false fby (x > 0.0)) & (x <= 0.0)

let node strictly_falling_float(x) = r where
rec r = (false fby (x >= 0.0)) & (x < 0.0)

(* Resets and holds the output to the initial condition while
* the reset signal is nonzero *)
let node level(x) = l where
rec z = (x = 0.0)
and l = (x >= 0.0) & (not z or ((false fby not z) & z))

(* Resets the output to the initial condition
* when the reset signal is nonzero *)

let node sampled_level(x) = (x > 0.0)
```