fact: Definition open_and_apply@{a+} {A:Type@{a}} (t : gtactic A) : goal gs_any -> M (mlist (A *m goal gs_any)) := mfix1 open (g: goal gs_any) : M _ := match g return M _ with | Metavar _ _ g | AnyMetavar _ _ g => t (Metavar _ _ g) | @AHyp C f => M.nu (FreshFrom f) mNone (fun x : C => open (f x) >>= close_goals x) | HypLet B f => M.nu_let (FreshFrom f) f (fun (x : B) (g : goal gs_any) => open g >>= let_close_goals x) | HypRem x f => M.remove x (open f) >>= rem_hyp x | HypReplace x e f => M.replace x e (open f) >>= rep_hyp x e end.
imports: Strings.String ssrmatching.ssrmatching Mtac2(Logic Datatypes List Utils Logic intf.Sorts) Strings.String NArith.BinNat NArith.BinNatDef