fact: Fixpoint PM_plus (e f:expr) {struct e} : expr := let d := expr_plus e f in match e, f with | expr_plus e1 e2, expr_int _ => expr_plus e1 (PM_plus e2 f) | expr_int i, expr_int j => MM_plus e f | expr_plus e1 e2, f => match eq_monom e1 f with | true => PM_plus e2 (MM_plus e1 f) | false => match lt_monom e1 f with | true => expr_plus e1 (PM_plus e2 f) | false => expr_plus f e end end | expr_int i, f => expr_plus f e | _, _ => d end.
imports: CoRN.logic.CLogic Coq.Bool.Bool