102 val mem_term: term * term list -> bool |
102 val mem_term: term * term list -> bool |
103 val subset_term: term list * term list -> bool |
103 val subset_term: term list * term list -> bool |
104 val eq_set_term: term list * term list -> bool |
104 val eq_set_term: term list * term list -> bool |
105 val ins_term: term * term list -> term list |
105 val ins_term: term * term list -> term list |
106 val union_term: term list * term list -> term list |
106 val union_term: term list * term list -> term list |
|
107 val inter_term: term list * term list -> term list |
107 val could_unify: term * term -> bool |
108 val could_unify: term * term -> bool |
108 val subst_free: (term * term) list -> term -> term |
109 val subst_free: (term * term) list -> term -> term |
109 val subst_atomic: (term * term) list -> term -> term |
110 val subst_atomic: (term * term) list -> term -> term |
110 val subst_vars: (indexname * typ) list * (indexname * term) list -> term -> term |
111 val subst_vars: (indexname * typ) list * (indexname * term) list -> term -> term |
111 val typ_subst_TVars: (indexname * typ) list -> typ -> typ |
112 val typ_subst_TVars: (indexname * typ) list -> typ -> typ |
515 |
516 |
516 fun union_term (xs, []) = xs |
517 fun union_term (xs, []) = xs |
517 | union_term ([], ys) = ys |
518 | union_term ([], ys) = ys |
518 | union_term ((x :: xs), ys) = union_term (xs, ins_term (x, ys)); |
519 | union_term ((x :: xs), ys) = union_term (xs, ins_term (x, ys)); |
519 |
520 |
|
521 fun inter_term ([], ys) = [] |
|
522 | inter_term (x::xs, ys) = |
|
523 if mem_term (x,ys) then x :: inter_term(xs,ys) else inter_term(xs,ys); |
|
524 |
520 (** Equality, membership and insertion of sorts (string lists) **) |
525 (** Equality, membership and insertion of sorts (string lists) **) |
521 |
526 |
522 fun eq_sort ([]:sort, []) = true |
527 fun eq_sort ([]:sort, []) = true |
523 | eq_sort ((s::ss), (t::ts)) = s=t andalso eq_sort(ss,ts) |
528 | eq_sort ((s::ss), (t::ts)) = s=t andalso eq_sort(ss,ts) |
524 | eq_sort (_, _) = false; |
529 | eq_sort (_, _) = false; |