generators.tdTransducer("counter"):
( { F:2, flip:1, part:0, S:0 },
  { +:2, 0:0, 1:0 },
  { q },
  {
    q[S] -> 0,
    q[part] -> 1,
    q[F[x1,x2]] -> (1 + (q[x1] + q[x2])),
    q[flip[x1]] -> q[x1]
  },
  q )
