src/Pure/term.ML
changeset 21682 53c9a026fcb7
parent 21493 47050cdc1694
child 21742 a330e58226d0
equal deleted inserted replaced
21681:8b8edcdb4da8 21682:53c9a026fcb7
   154   val argument_type_of: term -> typ
   154   val argument_type_of: term -> typ
   155   val head_name_of: term -> string
   155   val head_name_of: term -> string
   156   val add_tvarsT: typ -> (indexname * sort) list -> (indexname * sort) list
   156   val add_tvarsT: typ -> (indexname * sort) list -> (indexname * sort) list
   157   val add_tvars: term -> (indexname * sort) list -> (indexname * sort) list
   157   val add_tvars: term -> (indexname * sort) list -> (indexname * sort) list
   158   val add_vars: term -> (indexname * typ) list -> (indexname * typ) list
   158   val add_vars: term -> (indexname * typ) list -> (indexname * typ) list
       
   159   val add_varnames: term -> indexname list -> indexname list
   159   val add_tfreesT: typ -> (string * sort) list -> (string * sort) list
   160   val add_tfreesT: typ -> (string * sort) list -> (string * sort) list
   160   val add_tfrees: term -> (string * sort) list -> (string * sort) list
   161   val add_tfrees: term -> (string * sort) list -> (string * sort) list
   161   val add_frees: term -> (string * typ) list -> (string * typ) list
   162   val add_frees: term -> (string * typ) list -> (string * typ) list
   162   val add_varnames: term -> indexname list -> indexname list
   163   val hidden_polymorphism: term -> typ -> (indexname * sort) list
   163   val strip_abs_eta: int -> term -> (string * typ) list * term
   164   val strip_abs_eta: int -> term -> (string * typ) list * term
   164   val fast_indexname_ord: indexname * indexname -> order
   165   val fast_indexname_ord: indexname * indexname -> order
   165   val indexname_ord: indexname * indexname -> order
   166   val indexname_ord: indexname * indexname -> order
   166   val sort_ord: sort * sort -> order
   167   val sort_ord: sort * sort -> order
   167   val typ_ord: typ * typ -> order
   168   val typ_ord: typ * typ -> order
   484 val add_varnames = fold_aterms (fn Var (xi, _) => insert (op =) xi | _ => I);
   485 val add_varnames = fold_aterms (fn Var (xi, _) => insert (op =) xi | _ => I);
   485 val add_tfreesT = fold_atyps (fn TFree v => insert (op =) v | _ => I);
   486 val add_tfreesT = fold_atyps (fn TFree v => insert (op =) v | _ => I);
   486 val add_tfrees = fold_types add_tfreesT;
   487 val add_tfrees = fold_types add_tfreesT;
   487 val add_frees = fold_aterms (fn Free v => insert (op =) v | _ => I);
   488 val add_frees = fold_aterms (fn Free v => insert (op =) v | _ => I);
   488 
   489 
       
   490 (*extra type variables in a term, not covered by the type*)
       
   491 fun hidden_polymorphism t T =
       
   492   let
       
   493     val tvarsT = add_tvarsT T [];
       
   494     val extra_tvars = fold_types (fold_atyps
       
   495       (fn TVar v => if member (op =) tvarsT v then I else insert (op =) v | _ => I)) t [];
       
   496   in extra_tvars end;
       
   497 
   489 
   498 
   490 (** Comparing terms, types, sorts etc. **)
   499 (** Comparing terms, types, sorts etc. **)
   491 
   500 
   492 (* alpha equivalence -- tuned for equalities *)
   501 (* alpha equivalence -- tuned for equalities *)
   493 
   502