code: func findMoreEquiv(g *memo.Group, elem *list.Element) (eraseCur bool, err error) {
  	expr := elem.Value.(*memo.GroupExpr)
  	for _, rule := range GetTransformationRules(expr.ExprNode) {
  		pattern := rule.GetPattern()
  		if !pattern.Operand.Match(memo.GetOperand(expr.ExprNode)) {
  			continue
  		}
  		// Create a binding of the current Group expression and the pattern of
  		// the transformation rule to enumerate all the possible expressions.
  		iter := memo.NewExprIterFromGroupElem(elem, pattern)
  		for ; iter != nil && iter.Matched(); iter.Next() {
  			if !rule.Match(iter) {
  				continue
  			}
  
  			newExpr, erase, err := rule.OnTransform(iter)
  			if err != nil {
  				return false, err
  			}
  
  			eraseCur = eraseCur || erase
  			if !g.Insert(newExpr) {
  				continue
  			}
  
  			// If the new Group expression is successfully inserted into the
  			// current Group, we mark the Group expression and the Group as
  			// unexplored to enable the exploration on the new Group expression
  			// and all the antecedent groups.
  			newExpr.Explored = false
  			g.Explored = false
  		}
  	}
  	return eraseCur, nil
  }
docs: // findMoreEquiv finds and applies the matched transformation rules.