src/HOL/HOLCF/Library/List_Predomain.thy
changeset 41437 5bc117c382ec
parent 41323 ae1c227534f5
child 42151 4da4fc77664b
equal deleted inserted replaced
41436:480978f80eae 41437:5bc117c382ec
    95 done
    95 done
    96 
    96 
    97 subsection {* Lists are a predomain *}
    97 subsection {* Lists are a predomain *}
    98 
    98 
    99 definition list_liftdefl :: "udom u defl \<rightarrow> udom u defl"
    99 definition list_liftdefl :: "udom u defl \<rightarrow> udom u defl"
   100   where "list_liftdefl = (\<Lambda> a. udefl\<cdot>(slist_defl\<cdot>(u_defl\<cdot>a)))"
   100   where "list_liftdefl = (\<Lambda> a. udefl\<cdot>(slist_defl\<cdot>(u_liftdefl\<cdot>a)))"
   101 
   101 
   102 lemma cast_slist_defl: "cast\<cdot>(slist_defl\<cdot>a) = emb oo slist_map\<cdot>(cast\<cdot>a) oo prj"
   102 lemma cast_slist_defl: "cast\<cdot>(slist_defl\<cdot>a) = emb oo slist_map\<cdot>(cast\<cdot>a) oo prj"
   103 using isodefl_slist [where fa="cast\<cdot>a" and da="a"]
   103 using isodefl_slist [where fa="cast\<cdot>a" and da="a"]
   104 unfolding isodefl_def by simp
   104 unfolding isodefl_def by simp
   105 
   105 
   120     unfolding liftemb_list_def liftprj_list_def
   120     unfolding liftemb_list_def liftprj_list_def
   121     by (intro ep_pair_comp ep_pair_slist_map' ep_pair_strictify_up
   121     by (intro ep_pair_comp ep_pair_slist_map' ep_pair_strictify_up
   122       ep_pair_emb_prj predomain_ep ep_pair_u, simp add: ep_pair.intro)
   122       ep_pair_emb_prj predomain_ep ep_pair_u, simp add: ep_pair.intro)
   123   show "cast\<cdot>LIFTDEFL('a list) = liftemb oo (liftprj :: udom u \<rightarrow> ('a list) u)"
   123   show "cast\<cdot>LIFTDEFL('a list) = liftemb oo (liftprj :: udom u \<rightarrow> ('a list) u)"
   124     unfolding liftemb_list_def liftprj_list_def liftdefl_list_def
   124     unfolding liftemb_list_def liftprj_list_def liftdefl_list_def
   125     apply (simp add: list_liftdefl_def cast_udefl cast_slist_defl cast_u_defl cast_liftdefl)
   125     apply (simp add: list_liftdefl_def cast_udefl cast_slist_defl cast_u_liftdefl cast_liftdefl)
   126     apply (simp add: slist_map'_oo u_emb_bottom cfun_eq_iff)
   126     apply (simp add: slist_map'_oo u_emb_bottom cfun_eq_iff)
   127     done
   127     done
   128 qed
   128 qed
   129 
   129 
   130 end
   130 end
   160 lemma isodefl_list_u [domain_isodefl]:
   160 lemma isodefl_list_u [domain_isodefl]:
   161   fixes d :: "'a::predomain \<rightarrow> 'a"
   161   fixes d :: "'a::predomain \<rightarrow> 'a"
   162   assumes "isodefl' d t"
   162   assumes "isodefl' d t"
   163   shows "isodefl' (list_map d) (list_liftdefl\<cdot>t)"
   163   shows "isodefl' (list_map d) (list_liftdefl\<cdot>t)"
   164 using assms unfolding isodefl'_def liftemb_list_def liftprj_list_def
   164 using assms unfolding isodefl'_def liftemb_list_def liftprj_list_def
   165 apply (simp add: list_liftdefl_def cast_udefl cast_slist_defl cast_u_defl)
   165 apply (simp add: list_liftdefl_def cast_udefl cast_slist_defl cast_u_liftdefl)
   166 apply (simp add: cfcomp1 encode_list_u_map)
   166 apply (simp add: cfcomp1 encode_list_u_map)
   167 apply (simp add: slist_map'_slist_map' u_emb_bottom)
   167 apply (simp add: slist_map'_slist_map' u_emb_bottom)
   168 done
   168 done
   169 
   169 
   170 setup {*
   170 setup {*