src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML
changeset 55279 df41d34d1324
parent 55275 e1bf9f0c5420
child 55280 f0187a12b8f2
equal deleted inserted replaced
55278:73372494fd80 55279:df41d34d1324
   228               val t = prop_of_clause c
   228               val t = prop_of_clause c
   229               val rule = rule_of_clause_id id
   229               val rule = rule_of_clause_id id
   230               val skolem = is_skolemize_rule rule
   230               val skolem = is_skolemize_rule rule
   231 
   231 
   232               fun prove sub by = Prove (maybe_show outer c [], [], l, t, sub, by)
   232               fun prove sub by = Prove (maybe_show outer c [], [], l, t, sub, by)
   233               fun do_rest l step = isar_steps outer (SOME l) (step :: accum) infs
   233               fun steps_of_rest l step = isar_steps outer (SOME l) (step :: accum) infs
   234 
   234 
   235               val deps = fold add_fact_of_dependencies gamma no_facts
   235               val deps = fold add_fact_of_dependencies gamma ([], [])
   236               val meths =
   236               val meths =
   237                 (if skolem then skolem_methods
   237                 (if skolem then skolem_methods
   238                  else if is_arith_rule rule then arith_methods
   238                  else if is_arith_rule rule then arith_methods
   239                  else if is_datatype_rule rule then datatype_methods
   239                  else if is_datatype_rule rule then datatype_methods
   240                  else metislike_methods)
   240                  else metislike_methods)
   244               if is_clause_tainted c then
   244               if is_clause_tainted c then
   245                 (case gamma of
   245                 (case gamma of
   246                   [g] =>
   246                   [g] =>
   247                   if skolem andalso is_clause_tainted g then
   247                   if skolem andalso is_clause_tainted g then
   248                     let val subproof = Proof (skolems_of (prop_of_clause g), [], rev accum) in
   248                     let val subproof = Proof (skolems_of (prop_of_clause g), [], rev accum) in
   249                       isar_steps outer (SOME l) [prove [subproof] (no_facts, meths)] infs
   249                       isar_steps outer (SOME l) [prove [subproof] (([], []), meths)] infs
   250                     end
   250                     end
   251                   else
   251                   else
   252                     do_rest l (prove [] by)
   252                     steps_of_rest l (prove [] by)
   253                 | _ => do_rest l (prove [] by))
   253                 | _ => steps_of_rest l (prove [] by))
   254               else
   254               else
   255                 do_rest l (if skolem then Prove ([], skolems_of t, l, t, [], by) else prove [] by)
   255                 steps_of_rest l
       
   256                   (if skolem then Prove ([], skolems_of t, l, t, [], by) else prove [] by)
   256             end
   257             end
   257           | isar_steps outer predecessor accum (Cases cases :: infs) =
   258           | isar_steps outer predecessor accum (Cases cases :: infs) =
   258             let
   259             let
   259               fun isar_case (c, subinfs) =
   260               fun isar_case (c, subinfs) =
   260                 isar_proof false [] [(label_of_clause c, prop_of_clause c)] [] subinfs
   261                 isar_proof false [] [(label_of_clause c, prop_of_clause c)] [] subinfs