src/Pure/term.ML
changeset 12499 1b56e1732a61
parent 12306 749a04f0cfb0
child 12802 c69bd9754473
equal deleted inserted replaced
12498:3b0091bf06e8 12499:1b56e1732a61
   173 end;
   173 end;
   174 
   174 
   175 signature TERM =
   175 signature TERM =
   176 sig
   176 sig
   177   include BASIC_TERM
   177   include BASIC_TERM
   178   val invent_names: int -> string -> string list
   178   val invent_names: string list -> string -> int -> string list
       
   179   val invent_type_names: string list -> int -> string list
       
   180   val add_tvarsT: (indexname * sort) list * typ -> (indexname * sort) list
       
   181   val add_tvars: (indexname * sort) list * term -> (indexname * sort) list
       
   182   val add_vars: (indexname * typ) list * term -> (indexname * typ) list
       
   183   val add_frees: (string * typ) list * term -> (string * typ) list
   179   val indexname_ord: indexname * indexname -> order
   184   val indexname_ord: indexname * indexname -> order
   180   val typ_ord: typ * typ -> order
   185   val typ_ord: typ * typ -> order
   181   val typs_ord: typ list * typ list -> order
   186   val typs_ord: typ list * typ list -> order
   182   val term_ord: term * term -> order
   187   val term_ord: term * term -> order
   183   val terms_ord: term list * term list -> order
   188   val terms_ord: term list * term list -> order
   740 fun variantlist ([], used) = []
   745 fun variantlist ([], used) = []
   741   | variantlist(b::bs, used) = 
   746   | variantlist(b::bs, used) = 
   742       let val b' = variant used b
   747       let val b' = variant used b
   743       in  b' :: variantlist (bs, b'::used)  end;
   748       in  b' :: variantlist (bs, b'::used)  end;
   744 
   749 
   745 fun invent_names n prfx = Library.tl (variantlist (Library.replicate (n + 1) prfx, []));
   750 fun invent_names used prfx n = variantlist (Library.replicate n prfx, prfx :: used);
       
   751 fun invent_type_names used = invent_names used "'";
   746 
   752 
   747 
   753 
   748 
   754 
   749 (** Consts etc. **)
   755 (** Consts etc. **)
   750 
   756 
   931   | foldl_term_types f (x, Bound _) = x
   937   | foldl_term_types f (x, Bound _) = x
   932   | foldl_term_types f (x, t as Abs (_, T, b)) = foldl_term_types f (f t (x, T), b)
   938   | foldl_term_types f (x, t as Abs (_, T, b)) = foldl_term_types f (f t (x, T), b)
   933   | foldl_term_types f (x, t $ u) = foldl_term_types f (foldl_term_types f (x, t), u);
   939   | foldl_term_types f (x, t $ u) = foldl_term_types f (foldl_term_types f (x, t), u);
   934 
   940 
   935 fun foldl_types f = foldl_term_types (fn _ => f);
   941 fun foldl_types f = foldl_term_types (fn _ => f);
       
   942 
       
   943 (*collect variables*)
       
   944 val add_tvarsT = foldl_atyps (fn (vs, TVar v) => v ins vs | (vs, _) => vs);
       
   945 val add_tvars = foldl_types add_tvarsT;
       
   946 val add_vars = foldl_aterms (fn (vs, Var v) => v ins vs | (vs, _) => vs);
       
   947 val add_frees = foldl_aterms (fn (vs, Free v) => v ins vs | (vs, _) => vs);
   936 
   948 
   937 
   949 
   938 
   950 
   939 (** type and term orders **)
   951 (** type and term orders **)
   940 
   952