generators.tdTransducer:
  (
    { refine:4, invert:1, chair:0 },
    { refine:4, invert:1, blackChair:0, chair:0, lighten:1, +:2 },
    { q0, q1, q2, c },
    {
      q0[invert[x1]] -> (invert[q1[x1]] + invert[c[x1]]),
      q0[chair] -> (blackChair + chair),
      
      q1[invert[x1]] -> invert[q1[x1]],
      q1[refine[x1,x2,x3,x4]] ->
        refine[lighten[q2[x1]],lighten[q2[x2]],q1[x3],lighten[q2[x4]]],
      q1[chair] -> blackChair,
      
      q2[refine[x1,x2,x3,x4]] ->
        refine[lighten[q2[x1]],lighten[q2[x2]],lighten[q2[x3]],lighten[q2[x4]]],
      q2[chair] -> blackChair,
      
      c[invert[x1]] -> invert[c[x1]],
      c[refine[x1,x2,x3,x4]] -> refine[c[x1],c[x2],c[x3],c[x4]],
      c[chair] -> chair
    },
    q0
  )
