equal
deleted
inserted
replaced
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 |