--A messed up counter:
--x = 0: 0,1,2,3,4,3,4,...
--x = 1: 0,1,2,3,4,5,2,3,4,5,...
--A is MSB, C is LSB
--property: never reach state 6 or 7

node loop6counter (x:bool) returns (out:bool);
var a,b,c:bool;
let
  a = false -> (pre(b) and pre(c)) or
               (pre(x) and pre(a) and not pre(c));
  b = false -> (not pre(b) and pre(c)) or
               (pre(b) and not pre(c)) or
               (not pre(x) and pre(a));
  c = false -> not pre(c);
  out = a and c;
tel

node intloop6counter (x:bool) returns (out:bool);
var time: int;
let
  time = 0 -> if pre(time) = 5 then 2
            else if pre(time) = 4 then
              if not pre(x) then 3 
              else 5
            else pre time + 1;
  out = (time = 5);
tel


node twisted_counters (x:bool) returns (OK:bool);
var b,d:bool;
let
  b = loop6counter(x);
  d = intloop6counter(x);
  OK = b = d;
tel