src/HOL/Tools/ATP/atp_translate.ML
changeset 45780 cef82dc1462d
parent 45779 eb7b74c7a69b
child 45828 3b8606fba2dd
equal deleted inserted replaced
45779:eb7b74c7a69b 45780:cef82dc1462d
  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