//Composes elements of group func Compose(a, b gt.Element) *Composite { c := &Composite{ left: a.CloneLiteral(), right: b.CloneLiteral(), } c.init() return c }
//turns $a$ and $e\cdot a$ or $a\cdot e$ depending on "left". This is a step of proof. func Unsimplify(el gt.Element, left bool) *Composite { if left { n := Compose(NewIdentity(), el) n.setToken(el.token()) return n } else { n := Compose(el, NewIdentity()) n.setToken(el.token()) return n } }