equal
deleted
inserted
replaced
52 val Inl_inject = @{thm Inl_inject}; |
52 val Inl_inject = @{thm Inl_inject}; |
53 val Inr_inject = @{thm Inr_inject}; |
53 val Inr_inject = @{thm Inr_inject}; |
54 val Suml_inject = @{thm Suml_inject}; |
54 val Suml_inject = @{thm Suml_inject}; |
55 val Sumr_inject = @{thm Sumr_inject}; |
55 val Sumr_inject = @{thm Sumr_inject}; |
56 |
56 |
|
57 val datatype_injI = |
|
58 @{lemma "(!!x. ALL y. f x = f y --> x = y) ==> inj f" by (simp add: inj_on_def)}; |
57 |
59 |
58 |
60 |
59 (** proof of characteristic theorems **) |
61 (** proof of characteristic theorems **) |
60 |
62 |
61 fun representation_proofs (config : config) (dt_info : info Symtab.table) |
63 fun representation_proofs (config : config) (dt_info : info Symtab.table) |
436 REPEAT (eresolve_tac (mp :: allE :: |
438 REPEAT (eresolve_tac (mp :: allE :: |
437 map make_elim (Suml_inject :: Sumr_inject :: |
439 map make_elim (Suml_inject :: Sumr_inject :: |
438 Lim_inject :: inj_thms') @ fun_congs) 1), |
440 Lim_inject :: inj_thms') @ fun_congs) 1), |
439 atac 1]))])])])]); |
441 atac 1]))])])])]); |
440 |
442 |
441 val inj_thms'' = map (fn r => r RS @{thm datatype_injI}) |
443 val inj_thms'' = map (fn r => r RS datatype_injI) (split_conj_thm inj_thm); |
442 (split_conj_thm inj_thm); |
|
443 |
444 |
444 val elem_thm = |
445 val elem_thm = |
445 Skip_Proof.prove_global thy5 [] [] (HOLogic.mk_Trueprop (mk_conj ind_concl2)) |
446 Skip_Proof.prove_global thy5 [] [] (HOLogic.mk_Trueprop (mk_conj ind_concl2)) |
446 (fn _ => |
447 (fn _ => |
447 EVERY [(indtac induct [] THEN_ALL_NEW Object_Logic.atomize_prems_tac) 1, |
448 EVERY [(indtac induct [] THEN_ALL_NEW Object_Logic.atomize_prems_tac) 1, |