414 |
414 |
415 subsubsection {* Representable type constructors *} |
415 subsubsection {* Representable type constructors *} |
416 |
416 |
417 text "Functions between representable types are representable." |
417 text "Functions between representable types are representable." |
418 |
418 |
419 instantiation "->" :: (rep, rep) rep |
419 instantiation cfun :: (rep, rep) rep |
420 begin |
420 begin |
421 |
421 |
422 definition emb_cfun_def: "emb = udom_emb oo cfun_map\<cdot>prj\<cdot>emb" |
422 definition emb_cfun_def: "emb = udom_emb oo cfun_map\<cdot>prj\<cdot>emb" |
423 definition prj_cfun_def: "prj = cfun_map\<cdot>emb\<cdot>prj oo udom_prj" |
423 definition prj_cfun_def: "prj = cfun_map\<cdot>emb\<cdot>prj oo udom_prj" |
424 |
424 |
782 use "Tools/Domain/domain_take_proofs.ML" |
782 use "Tools/Domain/domain_take_proofs.ML" |
783 use "Tools/Domain/domain_isomorphism.ML" |
783 use "Tools/Domain/domain_isomorphism.ML" |
784 |
784 |
785 setup {* |
785 setup {* |
786 fold Domain_Isomorphism.add_type_constructor |
786 fold Domain_Isomorphism.add_type_constructor |
787 [(@{type_name "->"}, @{term cfun_defl}, @{const_name cfun_map}, @{thm REP_cfun}, |
787 [(@{type_name cfun}, @{term cfun_defl}, @{const_name cfun_map}, @{thm REP_cfun}, |
788 @{thm isodefl_cfun}, @{thm cfun_map_ID}, @{thm deflation_cfun_map}), |
788 @{thm isodefl_cfun}, @{thm cfun_map_ID}, @{thm deflation_cfun_map}), |
789 |
789 |
790 (@{type_name "++"}, @{term ssum_defl}, @{const_name ssum_map}, @{thm REP_ssum}, |
790 (@{type_name ssum}, @{term ssum_defl}, @{const_name ssum_map}, @{thm REP_ssum}, |
791 @{thm isodefl_ssum}, @{thm ssum_map_ID}, @{thm deflation_ssum_map}), |
791 @{thm isodefl_ssum}, @{thm ssum_map_ID}, @{thm deflation_ssum_map}), |
792 |
792 |
793 (@{type_name "**"}, @{term sprod_defl}, @{const_name sprod_map}, @{thm REP_sprod}, |
793 (@{type_name sprod}, @{term sprod_defl}, @{const_name sprod_map}, @{thm REP_sprod}, |
794 @{thm isodefl_sprod}, @{thm sprod_map_ID}, @{thm deflation_sprod_map}), |
794 @{thm isodefl_sprod}, @{thm sprod_map_ID}, @{thm deflation_sprod_map}), |
795 |
795 |
796 (@{type_name "*"}, @{term cprod_defl}, @{const_name cprod_map}, @{thm REP_cprod}, |
796 (@{type_name "*"}, @{term cprod_defl}, @{const_name cprod_map}, @{thm REP_cprod}, |
797 @{thm isodefl_cprod}, @{thm cprod_map_ID}, @{thm deflation_cprod_map}), |
797 @{thm isodefl_cprod}, @{thm cprod_map_ID}, @{thm deflation_cprod_map}), |
798 |
798 |