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) |