generators.ET0LTreeGrammar:
  (
    { I, R, S1, S2, A },
    { subst:2, invert:1, X1:0, refine:2, line:0, F:2, G:2, I:2, J:1 },
    {
      {
        I -> invert[I],
        R -> refine[R,R],
        
        S1 -> F[F[S1,A],G[S2,S2]],
        A ->  G[S1,S1],
        S2 -> F[S1,A]
      },
      {
        I -> invert[X1],
        R -> refine[X1,X1],
 
        S1 -> F[line,line],
        A ->  F[line,line],
        S2 -> line
      }
    },
    subst[subst[I, R],I[S1,S1]]
  )
