# HG changeset patch # User huffman # Date 1258655213 28800 # Node ID 71a6750651284559d625a5f09eaf4bffca32a5c4 # Parent d280c5ebd7d7a3dc4222460b7d9540fa546ad434 change example to use recursion with continuous function space diff -r d280c5ebd7d7 -r 71a675065128 src/HOLCF/ex/Domain_Proofs.thy --- a/src/HOLCF/ex/Domain_Proofs.thy Thu Nov 19 10:25:17 2009 -0800 +++ b/src/HOLCF/ex/Domain_Proofs.thy Thu Nov 19 10:26:53 2009 -0800 @@ -16,8 +16,8 @@ datatypes: domain 'a foo = Foo1 | Foo2 (lazy 'a) (lazy "'a bar") - and 'a bar = Bar (lazy 'a) (lazy "'a baz") - and 'a baz = Baz (lazy 'a) (lazy "'a foo convex_pd") + and 'a bar = Bar (lazy "'a baz \ tr") + and 'a baz = Baz (lazy "'a foo convex_pd \ tr") *) @@ -33,14 +33,14 @@ where "foo_bar_baz_deflF = (\ a. Abs_CFun (\(t1, t2, t3). ( ssum_defl\REP(one)\(sprod_defl\(u_defl\a)\(u_defl\t2)) - , sprod_defl\(u_defl\a)\(u_defl\t3) - , sprod_defl\(u_defl\a)\(u_defl\(convex_defl\t1)))))" + , u_defl\(cfun_defl\t3\REP(tr)) + , u_defl\(cfun_defl\(convex_defl\t1)\REP(tr)))))" lemma foo_bar_baz_deflF_beta: "foo_bar_baz_deflF\a\t = ( ssum_defl\REP(one)\(sprod_defl\(u_defl\a)\(u_defl\(fst (snd t)))) - , sprod_defl\(u_defl\a)\(u_defl\(snd (snd t))) - , sprod_defl\(u_defl\a)\(u_defl\(convex_defl\(fst t))))" + , u_defl\(cfun_defl\(snd (snd t))\REP(tr)) + , u_defl\(cfun_defl\(convex_defl\(fst t))\REP(tr)))" unfolding foo_bar_baz_deflF_def by (simp add: split_def) @@ -62,11 +62,11 @@ unfolding foo_defl_def bar_defl_def baz_defl_def by (subst fix_eq, simp add: foo_bar_baz_deflF_beta) -lemma bar_defl_unfold: "bar_defl\a = sprod_defl\(u_defl\a)\(u_defl\(baz_defl\a))" +lemma bar_defl_unfold: "bar_defl\a = u_defl\(cfun_defl\(baz_defl\a)\REP(tr))" unfolding foo_defl_def bar_defl_def baz_defl_def by (subst fix_eq, simp add: foo_bar_baz_deflF_beta) -lemma baz_defl_unfold: "baz_defl\a = sprod_defl\(u_defl\a)\(u_defl\(convex_defl\(foo_defl\a)))" +lemma baz_defl_unfold: "baz_defl\a = u_defl\(cfun_defl\(convex_defl\(foo_defl\a))\REP(tr))" unfolding foo_defl_def bar_defl_def baz_defl_def by (subst fix_eq, simp add: foo_bar_baz_deflF_beta) @@ -191,11 +191,11 @@ unfolding REP_foo REP_bar REP_baz REP_simps by (rule foo_defl_unfold) -lemma REP_bar': "REP('a bar) = REP('a\<^sub>\ \ ('a baz)\<^sub>\)" +lemma REP_bar': "REP('a bar) = REP(('a baz \ tr)\<^sub>\)" unfolding REP_foo REP_bar REP_baz REP_simps by (rule bar_defl_unfold) -lemma REP_baz': "REP('a baz) = REP('a\<^sub>\ \ ('a foo convex_pd)\<^sub>\)" +lemma REP_baz': "REP('a baz) = REP(('a foo convex_pd \ tr)\<^sub>\)" unfolding REP_foo REP_bar REP_baz REP_simps by (rule baz_defl_unfold) @@ -211,16 +211,16 @@ definition foo_abs :: "one \ ('a\<^sub>\ \ ('a bar)\<^sub>\) \ 'a foo" where "foo_abs \ coerce" -definition bar_rep :: "'a bar \ 'a\<^sub>\ \ ('a baz)\<^sub>\" +definition bar_rep :: "'a bar \ ('a baz \ tr)\<^sub>\" where "bar_rep \ coerce" -definition bar_abs :: "'a\<^sub>\ \ ('a baz)\<^sub>\ \ 'a bar" +definition bar_abs :: "('a baz \ tr)\<^sub>\ \ 'a bar" where "bar_abs \ coerce" -definition baz_rep :: "'a baz \ 'a\<^sub>\ \ ('a foo convex_pd)\<^sub>\" +definition baz_rep :: "'a baz \ ('a foo convex_pd \ tr)\<^sub>\" where "baz_rep \ coerce" -definition baz_abs :: "'a\<^sub>\ \ ('a foo convex_pd)\<^sub>\ \ 'a baz" +definition baz_abs :: "('a foo convex_pd \ tr)\<^sub>\ \ 'a baz" where "baz_abs \ coerce" text {* Prove isomorphism rules. *} @@ -268,14 +268,9 @@ definition foo_bar_baz_mapF :: - "(_ \ _) - \ (_ foo \ _ foo) \ (_ bar \ _ bar) \ (_ baz \ _ baz) - \ (_ foo \ _ foo) \ (_ bar \ _ bar) \ (_ baz \ _ baz)" -(* - "('a \ 'b) - \ ('a foo \ 'b foo) \ ('a bar \ 'b bar) \ ('a baz \ 'b baz) - \ ('a foo \ 'b foo) \ ('a bar \ 'b bar) \ ('a baz \ 'b baz)" -*) + "('a \ 'b) \ + ('a foo \ 'b foo) \ ('a bar \ 'b bar) \ ('b baz \ 'a baz) \ + ('a foo \ 'b foo) \ ('a bar \ 'b bar) \ ('b baz \ 'a baz)" where "foo_bar_baz_mapF = (\ f. Abs_CFun (\(d1, d2, d3). ( @@ -283,9 +278,9 @@ ssum_map\ID\(sprod_map\(u_map\f)\(u_map\d2)) oo foo_rep , - bar_abs oo sprod_map\(u_map\f)\(u_map\d3) oo bar_rep + bar_abs oo u_map\(cfun_map\d3\ID) oo bar_rep , - baz_abs oo sprod_map\(u_map\f)\(u_map\(convex_map\d1)) oo baz_rep + baz_abs oo u_map\(cfun_map\(convex_map\d1)\ID) oo baz_rep )))" lemma foo_bar_baz_mapF_beta: @@ -295,9 +290,9 @@ ssum_map\ID\(sprod_map\(u_map\f)\(u_map\(fst (snd d)))) oo foo_rep , - bar_abs oo sprod_map\(u_map\f)\(u_map\(snd (snd d))) oo bar_rep + bar_abs oo u_map\(cfun_map\(snd (snd d))\ID) oo bar_rep , - baz_abs oo sprod_map\(u_map\f)\(u_map\(convex_map\(fst d))) oo baz_rep + baz_abs oo u_map\(cfun_map\(convex_map\(fst d))\ID) oo baz_rep )" unfolding foo_bar_baz_mapF_def by (simp add: split_def) @@ -310,7 +305,7 @@ definition bar_map :: "('a \ 'b) \ ('a bar \ 'b bar)" where "bar_map = (\ f. fst (snd (fix\(foo_bar_baz_mapF\f))))" -definition baz_map :: "('a \ 'b) \ ('a baz \ 'b baz)" +definition baz_map :: "('a \ 'b) \ ('b baz \ 'a baz)" where "baz_map = (\ f. snd (snd (fix\(foo_bar_baz_mapF\f))))" text {* Prove isodefl rules for all map functions simultaneously. *} @@ -323,8 +318,7 @@ isodefl (baz_map\d) (baz_defl\t)" apply (simp add: foo_map_def bar_map_def baz_map_def) apply (simp add: foo_defl_def bar_defl_def baz_defl_def) - apply (rule parallel_fix_ind - [where F="foo_bar_baz_deflF\t" and G="foo_bar_baz_mapF\d"]) + apply (rule parallel_fix_ind) apply (intro adm_conj adm_isodefl cont2cont_fst cont2cont_snd cont_id) apply (simp only: fst_strict snd_strict isodefl_bottom simp_thms) apply (simp only: foo_bar_baz_mapF_beta @@ -336,7 +330,8 @@ isodefl_foo_abs isodefl_bar_abs isodefl_baz_abs - isodefl_ssum isodefl_sprod isodefl_ID_REP isodefl_u isodefl_convex + isodefl_ssum isodefl_sprod isodefl_ID_REP + isodefl_u isodefl_convex isodefl_cfun isodefl_d ) apply assumption+