395 |
395 |
396 local |
396 local |
397 val lfpI = thm "lfpI" |
397 val lfpI = thm "lfpI" |
398 val coinduct3_mono_lemma = thm "coinduct3_mono_lemma" |
398 val coinduct3_mono_lemma = thm "coinduct3_mono_lemma" |
399 fun mk_thm s = prove_goal (the_context ()) s (fn mono::prems => |
399 fun mk_thm s = prove_goal (the_context ()) s (fn mono::prems => |
400 [fast_tac (claset () addIs ((mono RS coinduct3_mono_lemma RS lfpI)::prems)) 1]) |
400 [fast_tac (@{claset} addIs ((mono RS coinduct3_mono_lemma RS lfpI)::prems)) 1]) |
401 in |
401 in |
402 val ci3_RI = mk_thm "[| mono(Agen); a : R |] ==> a : lfp(%x. Agen(x) Un R Un A)" |
402 val ci3_RI = mk_thm "[| mono(Agen); a : R |] ==> a : lfp(%x. Agen(x) Un R Un A)" |
403 val ci3_AgenI = mk_thm "[| mono(Agen); a : Agen(lfp(%x. Agen(x) Un R Un A)) |] ==> a : lfp(%x. Agen(x) Un R Un A)" |
403 val ci3_AgenI = mk_thm "[| mono(Agen); a : Agen(lfp(%x. Agen(x) Un R Un A)) |] ==> a : lfp(%x. Agen(x) Un R Un A)" |
404 val ci3_AI = mk_thm "[| mono(Agen); a : A |] ==> a : lfp(%x. Agen(x) Un R Un A)" |
404 val ci3_AI = mk_thm "[| mono(Agen); a : A |] ==> a : lfp(%x. Agen(x) Un R Un A)" |
405 |
405 |
406 fun mk_genIs thy defs genXH gen_mono s = prove_goalw thy defs s |
406 fun mk_genIs thy defs genXH gen_mono s = prove_goalw thy defs s |
407 (fn prems => [rtac (genXH RS iffD2) 1, |
407 (fn prems => [rtac (genXH RS iffD2) 1, |
408 simp_tac (simpset ()) 1, |
408 SIMPSET' simp_tac 1, |
409 TRY (fast_tac (claset () addIs |
409 TRY (fast_tac (@{claset} addIs |
410 ([genXH RS iffD2,gen_mono RS coinduct3_mono_lemma RS lfpI] |
410 ([genXH RS iffD2,gen_mono RS coinduct3_mono_lemma RS lfpI] |
411 @ prems)) 1)]) |
411 @ prems)) 1)]) |
412 end; |
412 end; |
413 |
413 |
414 bind_thm ("ci3_RI", ci3_RI); |
414 bind_thm ("ci3_RI", ci3_RI); |