src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML
changeset 57776 1111a9a328fe
parent 57771 0265ccdb9e6f
child 57780 e1a3d025552d
equal deleted inserted replaced
57775:40eea08c0cc5 57776:1111a9a328fe
    91       lines (* axioms (facts) need no proof lines *)
    91       lines (* axioms (facts) need no proof lines *)
    92     else
    92     else
    93       map (replace_dependencies_in_line (name, [])) lines
    93       map (replace_dependencies_in_line (name, [])) lines
    94   | add_line_pass1 line lines = line :: lines
    94   | add_line_pass1 line lines = line :: lines
    95 
    95 
    96 fun normalize role t =
    96 fun normalize role =
    97   t |> role = Conjecture ? (HOLogic.dest_Trueprop #> s_not #> HOLogic.mk_Trueprop)
    97   role = Conjecture ? (HOLogic.dest_Trueprop #> s_not #> HOLogic.mk_Trueprop)
    98 
    98 
    99 fun add_lines_pass2 res [] = rev res
    99 fun add_lines_pass2 res [] = rev res
   100   | add_lines_pass2 res ((line as (name, role, t, rule, deps)) :: lines) =
   100   | add_lines_pass2 res ((line as (name, role, t, rule, deps)) :: lines) =
   101     let
   101     let
   102       val norm_t = normalize role t
   102       val norm_t = normalize role t
   240 
   240 
   241         fun isar_steps outer predecessor accum [] =
   241         fun isar_steps outer predecessor accum [] =
   242             accum
   242             accum
   243             |> (if tainted = [] then
   243             |> (if tainted = [] then
   244                   cons (Prove (if outer then [Show] else [], [], no_label, concl_t, [],
   244                   cons (Prove (if outer then [Show] else [], [], no_label, concl_t, [],
   245                     (the_list predecessor, []), massage_methods systematic_methods', ""))
   245                     sort_facts (the_list predecessor, []), massage_methods systematic_methods', ""))
   246                 else
   246                 else
   247                   I)
   247                   I)
   248             |> rev
   248             |> rev
   249           | isar_steps outer _ accum (Have (id, (gamma, c)) :: infs) =
   249           | isar_steps outer _ accum (Have (id, (gamma, c)) :: infs) =
   250             let
   250             let
   251               val l = label_of_clause c
   251               val l = label_of_clause c
   252               val t = prop_of_clause c
   252               val t = prop_of_clause c
   253               val rule = rule_of_clause_id id
   253               val rule = rule_of_clause_id id
   254               val skolem = is_skolemize_rule rule
   254               val skolem = is_skolemize_rule rule
   255 
   255 
   256               val deps = fold add_fact_of_dependencies gamma ([], [])
   256               val deps = ([], [])
       
   257                 |> fold add_fact_of_dependencies gamma
       
   258                 |> sort_facts
   257               val meths =
   259               val meths =
   258                 (if skolem then skolem_methods
   260                 (if skolem then skolem_methods
   259                  else if is_arith_rule rule then arith_methods
   261                  else if is_arith_rule rule then arith_methods
   260                  else if is_datatype_rule rule then datatype_methods
   262                  else if is_datatype_rule rule then datatype_methods
   261                  else systematic_methods')
   263                  else systematic_methods')
   294               val l = label_of_clause c
   296               val l = label_of_clause c
   295               val t = prop_of_clause c
   297               val t = prop_of_clause c
   296               val step =
   298               val step =
   297                 Prove (maybe_show outer c [], [], l, t,
   299                 Prove (maybe_show outer c [], [], l, t,
   298                   map isar_case (filter_out (null o snd) cases),
   300                   map isar_case (filter_out (null o snd) cases),
   299                   (the_list predecessor, []), massage_methods systematic_methods', "")
   301                   sort_facts (the_list predecessor, []), massage_methods systematic_methods', "")
   300             in
   302             in
   301               isar_steps outer (SOME l) (step :: accum) infs
   303               isar_steps outer (SOME l) (step :: accum) infs
   302             end
   304             end
   303         and isar_proof outer fix assms lems infs =
   305         and isar_proof outer fix assms lems infs =
   304           Proof (fix, assms, lems @ isar_steps outer NONE [] infs)
   306           Proof (fix, assms, lems @ isar_steps outer NONE [] infs)