src/HOL/Tools/Datatype/datatype.ML
changeset 40719 acb830207103
parent 40237 96fff8c0a853
child 40929 7ff03a5e044f
equal deleted inserted replaced
40718:4d7211968607 40719:acb830207103
    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,