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 |