(* Causality loop *)

node tr(x,y,z,t:bool) returns (v:bool)
let
    v = x or y or z or t;
tel

node f(v:bool) returns (x,y,z,t:bool)
let
    (x,y,z,t) = (v,v,v,v);
tel

node c(v:bool) returns (x,y,z,t:bool)
let
    (x,y,z,t) = (v,v,v,v);
tel

node j(v:bool) returns (x,y,z,t:bool)
let
    (x,y,z,t) = (v,v,v,v);
tel

node g() returns (y:bool)
var x,x1,x2,x3,y1,y2,y3,z,z1,z2,z3,t,t1,t2,t3,v:bool;
let
  x = x1 or x2 or x3;
  y = y1 or y2 or y3;
  z = z1 or z2 or z3;
  t = t1 or t2 or t3;
  (x1,y1,z1,t1) = f(v);
  (x2,y2,z2,t2) = c(v);
  (x3,y3,z3,t3) = j(v);
  v = tr(x,y,z,t);
tel

