2264 ? fold add_formula_for_arg (ary - 1 downto 0) |
2264 ? fold add_formula_for_arg (ary - 1 downto 0) |
2265 end |
2265 end |
2266 |
2266 |
2267 fun result_type_of_decl (_, _, T, _, ary, _) = chop_fun ary T |> snd |
2267 fun result_type_of_decl (_, _, T, _, ary, _) = chop_fun ary T |> snd |
2268 |
2268 |
|
2269 fun rationalize_decls ctxt (decls as decl :: (decls' as _ :: _)) = |
|
2270 let |
|
2271 val T = result_type_of_decl decl |
|
2272 |> map_type_tvar (fn (z, _) => TVar (z, HOLogic.typeS)) |
|
2273 in |
|
2274 if forall (type_generalization ctxt T o result_type_of_decl) decls' then |
|
2275 [decl] |
|
2276 else |
|
2277 decls |
|
2278 end |
|
2279 | rationalize_decls _ decls = decls |
|
2280 |
2269 fun problem_lines_for_sym_decls ctxt format conj_sym_kind mono type_enc |
2281 fun problem_lines_for_sym_decls ctxt format conj_sym_kind mono type_enc |
2270 (s, decls) = |
2282 (s, decls) = |
2271 case type_enc of |
2283 case type_enc of |
2272 Simple_Types _ => |
2284 Simple_Types _ => |
2273 decls |> map (decl_line_for_sym ctxt format mono type_enc s) |
2285 decls |> rationalize_decls ctxt |
|
2286 |> map (decl_line_for_sym ctxt format mono type_enc s) |
2274 | Guards (_, level) => |
2287 | Guards (_, level) => |
2275 let |
2288 let |
2276 val decls = |
2289 val decls = decls |> rationalize_decls ctxt |
2277 case decls of |
|
2278 decl :: (decls' as _ :: _) => |
|
2279 let val T = result_type_of_decl decl in |
|
2280 if forall (type_generalization ctxt T o result_type_of_decl) |
|
2281 decls' then |
|
2282 [decl] |
|
2283 else |
|
2284 decls |
|
2285 end |
|
2286 | _ => decls |
|
2287 val n = length decls |
2290 val n = length decls |
2288 val decls = |
2291 val decls = |
2289 decls |> filter (should_encode_type ctxt mono level |
2292 decls |> filter (should_encode_type ctxt mono level |
2290 o result_type_of_decl) |
2293 o result_type_of_decl) |
2291 in |
2294 in |