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 |