equal
deleted
inserted
replaced
165 (is_none o tyco_syntax) deresolve tycos |
165 (is_none o tyco_syntax) deresolve tycos |
166 |> intro_tyvars vs; |
166 |> intro_tyvars vs; |
167 val simple = case eqs |
167 val simple = case eqs |
168 of [((ts, _), _)] => forall Code_Thingol.is_IVar ts |
168 of [((ts, _), _)] => forall Code_Thingol.is_IVar ts |
169 | _ => false; |
169 | _ => false; |
170 val consts = fold Code_Thingol.add_constnames |
|
171 (map (snd o fst) eqs) []; |
|
172 val vars1 = reserved |
170 val vars1 = reserved |
173 |> intro_base_names |
171 |> intro_base_names_for (is_none o const_syntax) |
174 (is_none o const_syntax) deresolve consts |
172 deresolve (map (snd o fst) eqs); |
175 val params = if simple |
173 val params = if simple |
176 then (map (fn IVar (SOME x) => x) o fst o fst o hd) eqs |
174 then (map (fn IVar (SOME x) => x) o fst o fst o hd) eqs |
177 else aux_params vars1 (map (fst o fst) eqs); |
175 else aux_params vars1 (map (fst o fst) eqs); |
178 val vars2 = intro_vars params vars1; |
176 val vars2 = intro_vars params vars1; |
179 val (tys', ty') = Code_Thingol.unfold_fun_n (length params) ty; |
177 val (tys', ty') = Code_Thingol.unfold_fun_n (length params) ty; |