src/Pure/term.ML
changeset 32198 9bdd47909ea8
parent 32020 9abf5d66606e
child 32738 15bb09ca0378
equal deleted inserted replaced
32197:bc341bbe4417 32198:9bdd47909ea8
   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