fact: Definition inlist A (x : A) := mfix1 f (s : list A) : M (In x s) := mmatch s as s' return M (In x s') with | [? s'] (x :: s') => ret (in_eq _ _) | [? y s'] (y :: s') => r <- f s'; ret (in_cons y _ _ r) | _ => raise NotFound end.
imports: Mtac2.Mtac2 Arith.Arith Lists.List Strings.String