291 done |
291 done |
292 |
292 |
293 lemma isodefl_cprod_u: |
293 lemma isodefl_cprod_u: |
294 assumes "isodefl (u_map\<cdot>d1) t1" and "isodefl (u_map\<cdot>d2) t2" |
294 assumes "isodefl (u_map\<cdot>d1) t1" and "isodefl (u_map\<cdot>d2) t2" |
295 shows "isodefl (u_map\<cdot>(cprod_map\<cdot>d1\<cdot>d2)) (sprod_defl\<cdot>t1\<cdot>t2)" |
295 shows "isodefl (u_map\<cdot>(cprod_map\<cdot>d1\<cdot>d2)) (sprod_defl\<cdot>t1\<cdot>t2)" |
296 using assms unfolding isodefl_def |
296 using isodefl_sprod [OF assms] unfolding isodefl_def |
297 apply (simp add: emb_u_def prj_u_def liftemb_prod_def liftprj_prod_def) |
297 unfolding emb_u_def prj_u_def liftemb_prod_def liftprj_prod_def |
298 apply (simp add: emb_u_def [symmetric] prj_u_def [symmetric]) |
298 by (simp add: cfcomp1 encode_prod_u_map) |
299 apply (simp add: cfcomp1 encode_prod_u_map cast_sprod_defl sprod_map_map) |
|
300 done |
|
301 |
299 |
302 lemma encode_cfun_map: |
300 lemma encode_cfun_map: |
303 "encode_cfun\<cdot>(cfun_map\<cdot>f\<cdot>g\<cdot>(decode_cfun\<cdot>x)) |
301 "encode_cfun\<cdot>(cfun_map\<cdot>f\<cdot>g\<cdot>(decode_cfun\<cdot>x)) |
304 = sfun_map\<cdot>(u_map\<cdot>f)\<cdot>g\<cdot>x" |
302 = sfun_map\<cdot>(u_map\<cdot>f)\<cdot>g\<cdot>x" |
305 unfolding encode_cfun_def decode_cfun_def |
303 unfolding encode_cfun_def decode_cfun_def |
306 apply (simp add: sfun_eq_iff cfun_map_def sfun_map_def) |
304 apply (simp add: sfun_eq_iff cfun_map_def sfun_map_def) |
307 apply (rule cfun_eqI, rename_tac y, case_tac y, simp_all) |
305 apply (rule cfun_eqI, rename_tac y, case_tac y, simp_all) |
308 done |
306 done |
309 |
307 |
310 lemma isodefl_cfun: |
308 lemma isodefl_cfun: |
311 "isodefl (u_map\<cdot>d1) t1 \<Longrightarrow> isodefl d2 t2 \<Longrightarrow> |
309 assumes "isodefl (u_map\<cdot>d1) t1" and "isodefl d2 t2" |
312 isodefl (cfun_map\<cdot>d1\<cdot>d2) (sfun_defl\<cdot>t1\<cdot>t2)" |
310 shows "isodefl (cfun_map\<cdot>d1\<cdot>d2) (sfun_defl\<cdot>t1\<cdot>t2)" |
313 apply (rule isodeflI) |
311 using isodefl_sfun [OF assms] unfolding isodefl_def |
314 apply (simp add: cast_sfun_defl cast_isodefl) |
312 by (simp add: emb_cfun_def prj_cfun_def cfcomp1 encode_cfun_map) |
315 apply (simp add: emb_cfun_def prj_cfun_def encode_cfun_map) |
|
316 apply (simp add: sfun_map_map isodefl_strict) |
|
317 done |
|
318 |
313 |
319 subsection {* Setting up the domain package *} |
314 subsection {* Setting up the domain package *} |
320 |
315 |
321 use "Tools/Domain/domain_isomorphism.ML" |
316 use "Tools/Domain/domain_isomorphism.ML" |
322 use "Tools/Domain/domain_axioms.ML" |
317 use "Tools/Domain/domain_axioms.ML" |