149 val could_unify: term * term -> bool |
149 val could_unify: term * term -> bool |
150 val strip_abs_eta: int -> term -> (string * typ) list * term |
150 val strip_abs_eta: int -> term -> (string * typ) list * term |
151 val match_bvars: (term * term) * (string * string) list -> (string * string) list |
151 val match_bvars: (term * term) * (string * string) list -> (string * string) list |
152 val map_abs_vars: (string -> string) -> term -> term |
152 val map_abs_vars: (string -> string) -> term -> term |
153 val rename_abs: term -> term -> term -> term option |
153 val rename_abs: term -> term -> term -> term option |
|
154 val lambda_name: string * term -> term -> term |
154 val close_schematic_term: term -> term |
155 val close_schematic_term: term -> term |
155 val maxidx_typ: typ -> int -> int |
156 val maxidx_typ: typ -> int -> int |
156 val maxidx_typs: typ list -> int -> int |
157 val maxidx_typs: typ list -> int -> int |
157 val maxidx_term: term -> int -> int |
158 val maxidx_term: term -> int -> int |
158 val has_abs: term -> bool |
159 val has_abs: term -> bool |
717 (abs lev t $ (abs lev u handle Same.SAME => u) |
718 (abs lev t $ (abs lev u handle Same.SAME => u) |
718 handle Same.SAME => t $ abs lev u) |
719 handle Same.SAME => t $ abs lev u) |
719 | _ => raise Same.SAME); |
720 | _ => raise Same.SAME); |
720 in abs 0 body handle Same.SAME => body end; |
721 in abs 0 body handle Same.SAME => body end; |
721 |
722 |
722 fun lambda v t = |
723 fun term_name (Const (x, _)) = Long_Name.base_name x |
723 let val x = |
724 | term_name (Free (x, _)) = x |
724 (case v of |
725 | term_name (Var ((x, _), _)) = x |
725 Const (x, _) => Long_Name.base_name x |
726 | term_name _ = Name.uu; |
726 | Free (x, _) => x |
727 |
727 | Var ((x, _), _) => x |
728 fun lambda_name (x, v) t = |
728 | _ => Name.uu) |
729 Abs (if x = "" then term_name v else x, fastype_of v, abstract_over (v, t)); |
729 in Abs (x, fastype_of v, abstract_over (v, t)) end; |
730 |
|
731 fun lambda v t = lambda_name ("", v) t; |
730 |
732 |
731 (*Form an abstraction over a free variable.*) |
733 (*Form an abstraction over a free variable.*) |
732 fun absfree (a,T,body) = Abs (a, T, abstract_over (Free (a, T), body)); |
734 fun absfree (a,T,body) = Abs (a, T, abstract_over (Free (a, T), body)); |
733 fun absdummy (T, body) = Abs (Name.internal Name.uu, T, body); |
735 fun absdummy (T, body) = Abs (Name.internal Name.uu, T, body); |
734 |
736 |