321 |
321 |
322 fun gen_simp_tac mode (ss as Simpset {unsafe_finish_tac, ...}) = |
322 fun gen_simp_tac mode (ss as Simpset {unsafe_finish_tac, ...}) = |
323 basic_gen_simp_tac mode (ss setSSolver unsafe_finish_tac); |
323 basic_gen_simp_tac mode (ss setSSolver unsafe_finish_tac); |
324 |
324 |
325 |
325 |
326 val simp_tac = gen_simp_tac (false, false); |
326 val simp_tac = gen_simp_tac (false, false, false); |
327 val asm_simp_tac = gen_simp_tac (false, true); |
327 val asm_simp_tac = gen_simp_tac (false, true, false); |
328 val full_simp_tac = gen_simp_tac (true, false); |
328 val full_simp_tac = gen_simp_tac (true, false, false); |
329 val asm_full_simp_tac = gen_simp_tac (true, true); |
329 val asm_full_simp_tac = gen_simp_tac (true, true, false); |
330 |
330 |
331 (*not totally safe: may instantiate unknowns that appear also in other subgoals*) |
331 (*not totally safe: may instantiate unknowns that appear also in other subgoals*) |
332 val safe_asm_full_simp_tac = basic_gen_simp_tac (true, true); |
332 val safe_asm_full_simp_tac = basic_gen_simp_tac (true, true, false); |
333 |
333 |
334 (** The abstraction over the proof state delays the dereferencing **) |
334 (** The abstraction over the proof state delays the dereferencing **) |
335 |
335 |
336 fun Simp_tac i st = simp_tac (simpset ()) i st; |
336 fun Simp_tac i st = simp_tac (simpset ()) i st; |
337 fun Asm_simp_tac i st = asm_simp_tac (simpset ()) i st; |
337 fun Asm_simp_tac i st = asm_simp_tac (simpset ()) i st; |
338 fun Full_simp_tac i st = full_simp_tac (simpset ()) i st; |
338 fun Full_simp_tac i st = full_simp_tac (simpset ()) i st; |
339 fun Asm_full_simp_tac i st = asm_full_simp_tac (simpset ()) i st; |
339 fun Asm_full_simp_tac i st = asm_full_simp_tac (simpset ()) i st; |
340 |
|
341 |
340 |
342 |
341 |
343 (** simplification meta rules **) |
342 (** simplification meta rules **) |
344 |
343 |
345 fun simp mode (Simpset {mss, subgoal_tac, loop_tacs, finish_tac, unsafe_finish_tac}) thm = |
344 fun simp mode (Simpset {mss, subgoal_tac, loop_tacs, finish_tac, unsafe_finish_tac}) thm = |
348 fun prover m th = apsome fst (Seq.pull (tacf m th)); |
347 fun prover m th = apsome fst (Seq.pull (tacf m th)); |
349 in |
348 in |
350 Drule.rewrite_thm mode prover mss thm |
349 Drule.rewrite_thm mode prover mss thm |
351 end; |
350 end; |
352 |
351 |
353 val simplify = simp (false, false); |
352 val simplify = simp (false, false, false); |
354 val asm_simplify = simp (false, true); |
353 val asm_simplify = simp (false, true, false); |
355 val full_simplify = simp (true, false); |
354 val full_simplify = simp (true, false, false); |
356 val asm_full_simplify = simp (true, true); |
355 val asm_full_simplify = simp (true, true, false); |
357 |
356 |
358 |
357 |
359 end; |
358 end; |