src/HOL/HOLCF/Domain.thy
changeset 40830 158d18502378
parent 40774 0437dbc127b3
child 40834 a1249aeff5b6
equal deleted inserted replaced
40826:a3af470a55d2 40830:158d18502378
   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"