equal
deleted
inserted
replaced
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 {* |