generators.ET0LTreeGrammar:
  (
    { X1, tile, tile2 },
    { subst:2, tile:0, tile2:0, invert:1, refine:4, refine2:4, X1:0 },
    {
      {
        X1    -> invert[X1],
        tile  -> refine[tile2, tile2, tile, tile],
        tile2 -> refine2[tile2, tile, tile, tile2]
      }
    },
    subst[X1, tile]
  )
