# HG changeset patch # User huffman # Date 1294364438 28800 # Node ID 5bc117c382ec40f0de9ae6decc1edba7e364bf49 # Parent 480978f80eae29e8f246c84f1a532b1c70b68e02 rename constant u_defl to u_liftdefl; add new constant u_defl :: udom defl -> udom defl diff -r 480978f80eae -r 5bc117c382ec src/HOL/HOLCF/Domain.thy --- a/src/HOL/HOLCF/Domain.thy Thu Jan 06 16:52:35 2011 -0800 +++ b/src/HOL/HOLCF/Domain.thy Thu Jan 06 17:40:38 2011 -0800 @@ -274,9 +274,16 @@ done lemma isodefl_u: - "isodefl' d t \ isodefl (u_map\d) (u_defl\t)" + "isodefl d t \ isodefl (u_map\d) (u_defl\t)" apply (rule isodeflI) -apply (simp add: cast_u_defl isodefl'_def) +apply (simp add: cast_u_defl cast_isodefl) +apply (simp add: emb_u_def prj_u_def liftemb_eq liftprj_eq u_map_map) +done + +lemma isodefl_u_liftdefl: + "isodefl' d t \ isodefl (u_map\d) (u_liftdefl\t)" +apply (rule isodeflI) +apply (simp add: cast_u_liftdefl isodefl'_def) apply (simp add: emb_u_def prj_u_def liftemb_eq liftprj_eq) done @@ -319,7 +326,7 @@ lemmas [domain_defl_simps] = DEFL_cfun DEFL_sfun DEFL_ssum DEFL_sprod DEFL_prod DEFL_u - liftdefl_eq LIFTDEFL_prod + liftdefl_eq LIFTDEFL_prod u_liftdefl_liftdefl_of lemmas [domain_map_ID] = cfun_map_ID sfun_map_ID ssum_map_ID sprod_map_ID prod_map_ID u_map_ID @@ -327,6 +334,7 @@ lemmas [domain_isodefl] = isodefl_u isodefl_sfun isodefl_ssum isodefl_sprod isodefl_cfun isodefl_prod isodefl_prod_u isodefl'_liftdefl_of + isodefl_u_liftdefl lemmas [domain_deflation] = deflation_cfun_map deflation_sfun_map deflation_ssum_map diff -r 480978f80eae -r 5bc117c382ec src/HOL/HOLCF/Library/List_Predomain.thy --- a/src/HOL/HOLCF/Library/List_Predomain.thy Thu Jan 06 16:52:35 2011 -0800 +++ b/src/HOL/HOLCF/Library/List_Predomain.thy Thu Jan 06 17:40:38 2011 -0800 @@ -97,7 +97,7 @@ subsection {* Lists are a predomain *} definition list_liftdefl :: "udom u defl \ udom u defl" - where "list_liftdefl = (\ a. udefl\(slist_defl\(u_defl\a)))" + where "list_liftdefl = (\ a. udefl\(slist_defl\(u_liftdefl\a)))" lemma cast_slist_defl: "cast\(slist_defl\a) = emb oo slist_map\(cast\a) oo prj" using isodefl_slist [where fa="cast\a" and da="a"] @@ -122,7 +122,7 @@ ep_pair_emb_prj predomain_ep ep_pair_u, simp add: ep_pair.intro) show "cast\LIFTDEFL('a list) = liftemb oo (liftprj :: udom u \ ('a list) u)" unfolding liftemb_list_def liftprj_list_def liftdefl_list_def - apply (simp add: list_liftdefl_def cast_udefl cast_slist_defl cast_u_defl cast_liftdefl) + apply (simp add: list_liftdefl_def cast_udefl cast_slist_defl cast_u_liftdefl cast_liftdefl) apply (simp add: slist_map'_oo u_emb_bottom cfun_eq_iff) done qed @@ -162,7 +162,7 @@ assumes "isodefl' d t" shows "isodefl' (list_map d) (list_liftdefl\t)" using assms unfolding isodefl'_def liftemb_list_def liftprj_list_def -apply (simp add: list_liftdefl_def cast_udefl cast_slist_defl cast_u_defl) +apply (simp add: list_liftdefl_def cast_udefl cast_slist_defl cast_u_liftdefl) apply (simp add: cfcomp1 encode_list_u_map) apply (simp add: slist_map'_slist_map' u_emb_bottom) done diff -r 480978f80eae -r 5bc117c382ec src/HOL/HOLCF/Library/Sum_Cpo.thy --- a/src/HOL/HOLCF/Library/Sum_Cpo.thy Thu Jan 06 16:52:35 2011 -0800 +++ b/src/HOL/HOLCF/Library/Sum_Cpo.thy Thu Jan 06 17:40:38 2011 -0800 @@ -289,7 +289,7 @@ unfolding udefl_def by (simp add: cast_defl_fun1 ep_pair_strictify_up) definition sum_liftdefl :: "udom u defl \ udom u defl \ udom u defl" - where "sum_liftdefl = (\ a b. udefl\(ssum_defl\(u_defl\a)\(u_defl\b)))" + where "sum_liftdefl = (\ a b. udefl\(ssum_defl\(u_liftdefl\a)\(u_liftdefl\b)))" lemma u_emb_bottom: "u_emb\\ = \" by (rule pcpo_ep_pair.e_strict [unfolded pcpo_ep_pair_def, OF ep_pair_u]) @@ -321,7 +321,7 @@ ep_pair_ssum ep_pair_strictify_up, simp add: ep_pair.intro) show "cast\LIFTDEFL('a + 'b) = liftemb oo (liftprj :: udom u \ ('a + 'b) u)" unfolding liftemb_sum_def liftprj_sum_def liftdefl_sum_def - by (simp add: sum_liftdefl_def cast_udefl cast_ssum_defl cast_u_defl + by (simp add: sum_liftdefl_def cast_udefl cast_ssum_defl cast_u_liftdefl cast_liftdefl cfcomp1 ssum_map_map u_emb_bottom) qed @@ -360,7 +360,7 @@ assumes "isodefl' d1 t1" and "isodefl' d2 t2" shows "isodefl' (sum_map' d1 d2) (sum_liftdefl\t1\t2)" using assms unfolding isodefl'_def liftemb_sum_def liftprj_sum_def -apply (simp add: sum_liftdefl_def cast_udefl cast_ssum_defl cast_u_defl) +apply (simp add: sum_liftdefl_def cast_udefl cast_ssum_defl cast_u_liftdefl) apply (simp add: cfcomp1 encode_sum_u_sum_map) apply (simp add: ssum_map_map u_emb_bottom) done diff -r 480978f80eae -r 5bc117c382ec src/HOL/HOLCF/Representable.thy --- a/src/HOL/HOLCF/Representable.thy Thu Jan 06 16:52:35 2011 -0800 +++ b/src/HOL/HOLCF/Representable.thy Thu Jan 06 17:40:38 2011 -0800 @@ -163,8 +163,8 @@ subsection {* Type combinators *} -definition u_defl :: "udom u defl \ udom defl" - where "u_defl = defl_fun1 u_emb u_prj ID" +definition u_defl :: "udom defl \ udom defl" + where "u_defl = defl_fun1 u_emb u_prj u_map" definition prod_defl :: "udom defl \ udom defl \ udom defl" where "prod_defl = defl_fun2 prod_emb prod_prj prod_map" @@ -179,8 +179,9 @@ where "sfun_defl = defl_fun2 sfun_emb sfun_prj sfun_map" lemma cast_u_defl: - "cast\(u_defl\A) = u_emb oo cast\A oo u_prj" -unfolding u_defl_def by (simp add: cast_defl_fun1 ep_pair_u) + "cast\(u_defl\A) = u_emb oo u_map\(cast\A) oo u_prj" +using ep_pair_u finite_deflation_u_map +unfolding u_defl_def by (rule cast_defl_fun1) lemma cast_prod_defl: "cast\(prod_defl\A\B) = @@ -206,6 +207,20 @@ using ep_pair_sfun finite_deflation_sfun_map unfolding sfun_defl_def by (rule cast_defl_fun2) +text {* Special deflation combinator for unpointed types. *} + +definition u_liftdefl :: "udom u defl \ udom defl" + where "u_liftdefl = defl_fun1 u_emb u_prj ID" + +lemma cast_u_liftdefl: + "cast\(u_liftdefl\A) = u_emb oo cast\A oo u_prj" +unfolding u_liftdefl_def by (simp add: cast_defl_fun1 ep_pair_u) + +lemma u_liftdefl_liftdefl_of: + "u_liftdefl\(liftdefl_of\A) = u_defl\A" +by (rule cast_eq_imp_eq) + (simp add: cast_u_liftdefl cast_liftdefl_of cast_u_defl) + subsection {* Class instance proofs *} subsubsection {* Universal domain *} @@ -262,7 +277,7 @@ "prj = liftprj oo u_prj" definition - "defl (t::'a u itself) = u_defl\LIFTDEFL('a)" + "defl (t::'a u itself) = u_liftdefl\LIFTDEFL('a)" definition "(liftemb :: 'a u u \ udom u) = u_map\emb" @@ -279,12 +294,12 @@ by (intro ep_pair_comp ep_pair_u predomain_ep) show "cast\DEFL('a u) = emb oo (prj :: udom \ 'a u)" unfolding emb_u_def prj_u_def defl_u_def - by (simp add: cast_u_defl cast_liftdefl assoc_oo) + by (simp add: cast_u_liftdefl cast_liftdefl assoc_oo) qed (fact liftemb_u_def liftprj_u_def liftdefl_u_def)+ end -lemma DEFL_u: "DEFL('a::predomain u) = u_defl\LIFTDEFL('a)" +lemma DEFL_u: "DEFL('a::predomain u) = u_liftdefl\LIFTDEFL('a)" by (rule defl_u_def) subsubsection {* Strict function space *} diff -r 480978f80eae -r 5bc117c382ec src/HOL/HOLCF/ex/Domain_Proofs.thy --- a/src/HOL/HOLCF/ex/Domain_Proofs.thy Thu Jan 06 16:52:35 2011 -0800 +++ b/src/HOL/HOLCF/ex/Domain_Proofs.thy Thu Jan 06 17:40:38 2011 -0800 @@ -30,15 +30,15 @@ "udom defl \ udom defl \ udom defl \ udom defl \ udom defl \ udom defl \ udom defl" where "foo_bar_baz_deflF = (\ a. Abs_cfun (\(t1, t2, t3). - ( ssum_defl\DEFL(one)\(sprod_defl\(u_defl\(liftdefl_of\a))\(u_defl\(liftdefl_of\t2))) - , u_defl\(liftdefl_of\(sfun_defl\(u_defl\(liftdefl_of\t3))\DEFL(tr))) - , u_defl\(liftdefl_of\(sfun_defl\(u_defl\(liftdefl_of\(convex_defl\t1)))\DEFL(tr))))))" + ( ssum_defl\DEFL(one)\(sprod_defl\(u_defl\a)\(u_defl\t2)) + , u_defl\(sfun_defl\(u_defl\t3)\DEFL(tr)) + , u_defl\(sfun_defl\(u_defl\(convex_defl\t1))\DEFL(tr)))))" lemma foo_bar_baz_deflF_beta: "foo_bar_baz_deflF\a\t = - ( ssum_defl\DEFL(one)\(sprod_defl\(u_defl\(liftdefl_of\a))\(u_defl\(liftdefl_of\(fst (snd t))))) - , u_defl\(liftdefl_of\(sfun_defl\(u_defl\(liftdefl_of\(snd (snd t))))\DEFL(tr))) - , u_defl\(liftdefl_of\(sfun_defl\(u_defl\(liftdefl_of\(convex_defl\(fst t))))\DEFL(tr))))" + ( ssum_defl\DEFL(one)\(sprod_defl\(u_defl\a)\(u_defl\(fst (snd t)))) + , u_defl\(sfun_defl\(u_defl\(snd (snd t)))\DEFL(tr)) + , u_defl\(sfun_defl\(u_defl\(convex_defl\(fst t)))\DEFL(tr)))" unfolding foo_bar_baz_deflF_def by (simp add: split_def) @@ -62,13 +62,13 @@ text {* Unfold rules for each combinator. *} lemma foo_defl_unfold: - "foo_defl\a = ssum_defl\DEFL(one)\(sprod_defl\(u_defl\(liftdefl_of\a))\(u_defl\(liftdefl_of\(bar_defl\a))))" + "foo_defl\a = ssum_defl\DEFL(one)\(sprod_defl\(u_defl\a)\(u_defl\(bar_defl\a)))" unfolding defl_apply_thms by (subst fix_eq, simp add: foo_bar_baz_deflF_beta) -lemma bar_defl_unfold: "bar_defl\a = u_defl\(liftdefl_of\(sfun_defl\(u_defl\(liftdefl_of\(baz_defl\a)))\DEFL(tr)))" +lemma bar_defl_unfold: "bar_defl\a = u_defl\(sfun_defl\(u_defl\(baz_defl\a))\DEFL(tr))" unfolding defl_apply_thms by (subst fix_eq, simp add: foo_bar_baz_deflF_beta) -lemma baz_defl_unfold: "baz_defl\a = u_defl\(liftdefl_of\(sfun_defl\(u_defl\(liftdefl_of\(convex_defl\(foo_defl\a))))\DEFL(tr)))" +lemma baz_defl_unfold: "baz_defl\a = u_defl\(sfun_defl\(u_defl\(convex_defl\(foo_defl\a)))\DEFL(tr))" unfolding defl_apply_thms by (subst fix_eq, simp add: foo_bar_baz_deflF_beta) text "The automation for the previous steps will be quite similar to