fact: Definition simpl_prop_auto := mfix1 f (p : Prop) : M p := mmatch p in Prop as p' return M p' with | True => ret I | [? p1 p2 ] p1 /\ p2 => r1 <- f p1 ; r2 <- f p2 ; ret (conj r1 r2) | [? p1 p2] p1 \/ p2 => mtry r1 <- f p1 ; ret (or_introl r1) with _ => r2 <- f p2 ; ret (or_intror r2) end | _ => raise NotFound end.
imports: Mtac2.Mtac2 Arith.Arith Lists.List Strings.String