fact: Definition instantiate {A} (x y : A) : t unit := '(m: h, _) <- decompose x; dcase h as e in mif is_evar e then let t := reduce (RedWhd [rl:RedBeta]) t in r <- inst_evar x y; match r with | mSome _ => M.ret tt | _ => raise (CantInstantiate x y) end else raise (NotAnEvar h) .
imports: Strings.String NArith.BinNat Mtac2(Logic Datatypes Logic List Utils MTele Pattern Specif)