equal
deleted
inserted
replaced
109 fun polymorphicT T = Type ("_polymorphic_", [T]); |
109 fun polymorphicT T = Type ("_polymorphic_", [T]); |
110 |
110 |
111 fun pretyp_of is_param (params, typ) = |
111 fun pretyp_of is_param (params, typ) = |
112 let |
112 let |
113 fun add_parms (TVar (xi as (x, _), S)) ps = |
113 fun add_parms (TVar (xi as (x, _), S)) ps = |
114 if is_param xi andalso is_none (AList.lookup (op =) ps xi) |
114 if is_param xi andalso not (AList.defined (op =) ps xi) |
115 then (xi, mk_param S) :: ps else ps |
115 then (xi, mk_param S) :: ps else ps |
116 | add_parms (TFree _) ps = ps |
116 | add_parms (TFree _) ps = ps |
117 | add_parms (Type (_, Ts)) ps = fold add_parms Ts ps; |
117 | add_parms (Type (_, Ts)) ps = fold add_parms Ts ps; |
118 |
118 |
119 val params' = add_parms typ params; |
119 val params' = add_parms typ params; |
135 (* preterm(s)_of *) |
135 (* preterm(s)_of *) |
136 |
136 |
137 fun preterm_of const_type is_param ((vparams, params), tm) = |
137 fun preterm_of const_type is_param ((vparams, params), tm) = |
138 let |
138 let |
139 fun add_vparm (ps, xi) = |
139 fun add_vparm (ps, xi) = |
140 if is_none (AList.lookup (op =) ps xi) then |
140 if not (AList.defined (op =) ps xi) then |
141 (xi, mk_param []) :: ps |
141 (xi, mk_param []) :: ps |
142 else ps; |
142 else ps; |
143 |
143 |
144 fun add_vparms (ps, Var (xi, Type ("_polymorphic_", _))) = ps |
144 fun add_vparms (ps, Var (xi, Type ("_polymorphic_", _))) = ps |
145 | add_vparms (ps, Var (xi, _)) = add_vparm (ps, xi) |
145 | add_vparms (ps, Var (xi, _)) = add_vparm (ps, xi) |