# HG changeset patch # User huffman # Date 1286811129 25200 # Node ID ad60d7311f4360954f62b96e1e79aca591c9fa81 # Parent a4b2971952f46898ca0b800685d575378da0a447 renamed type and constant 'sfp' to 'defl'; replaced syntax SFP('a) with DEFL('a) diff -r a4b2971952f4 -r ad60d7311f43 src/HOLCF/Algebraic.thy --- a/src/HOLCF/Algebraic.thy Mon Oct 11 07:09:42 2010 -0700 +++ b/src/HOLCF/Algebraic.thy Mon Oct 11 08:32:09 2010 -0700 @@ -72,36 +72,29 @@ subsection {* Defining algebraic deflations by ideal completion *} -text {* - An SFP domain is one that can be represented as the limit of a - sequence of finite posets. Here we use omega-algebraic deflations - (i.e. countable ideals of finite deflations) to model sequences of - finite posets. -*} - -typedef (open) sfp = "{S::fin_defl set. below.ideal S}" +typedef (open) defl = "{S::fin_defl set. below.ideal S}" by (fast intro: below.ideal_principal) -instantiation sfp :: below +instantiation defl :: below begin definition - "x \ y \ Rep_sfp x \ Rep_sfp y" + "x \ y \ Rep_defl x \ Rep_defl y" instance .. end -instance sfp :: po -using type_definition_sfp below_sfp_def +instance defl :: po +using type_definition_defl below_defl_def by (rule below.typedef_ideal_po) -instance sfp :: cpo -using type_definition_sfp below_sfp_def +instance defl :: cpo +using type_definition_defl below_defl_def by (rule below.typedef_ideal_cpo) definition - sfp_principal :: "fin_defl \ sfp" where - "sfp_principal t = Abs_sfp {u. u \ t}" + defl_principal :: "fin_defl \ defl" where + "defl_principal t = Abs_defl {u. u \ t}" lemma fin_defl_countable: "\f::fin_defl \ nat. inj f" proof @@ -130,52 +123,52 @@ done qed -interpretation sfp: ideal_completion below sfp_principal Rep_sfp -using type_definition_sfp below_sfp_def -using sfp_principal_def fin_defl_countable +interpretation defl: ideal_completion below defl_principal Rep_defl +using type_definition_defl below_defl_def +using defl_principal_def fin_defl_countable by (rule below.typedef_ideal_completion) text {* Algebraic deflations are pointed *} -lemma sfp_minimal: "sfp_principal (Abs_fin_defl \) \ x" -apply (induct x rule: sfp.principal_induct, simp) -apply (rule sfp.principal_mono) +lemma defl_minimal: "defl_principal (Abs_fin_defl \) \ x" +apply (induct x rule: defl.principal_induct, simp) +apply (rule defl.principal_mono) apply (simp add: below_fin_defl_def) apply (simp add: Abs_fin_defl_inverse finite_deflation_UU) done -instance sfp :: pcpo -by intro_classes (fast intro: sfp_minimal) +instance defl :: pcpo +by intro_classes (fast intro: defl_minimal) -lemma inst_sfp_pcpo: "\ = sfp_principal (Abs_fin_defl \)" -by (rule sfp_minimal [THEN UU_I, symmetric]) +lemma inst_defl_pcpo: "\ = defl_principal (Abs_fin_defl \)" +by (rule defl_minimal [THEN UU_I, symmetric]) subsection {* Applying algebraic deflations *} definition - cast :: "sfp \ udom \ udom" + cast :: "defl \ udom \ udom" where - "cast = sfp.basis_fun Rep_fin_defl" + "cast = defl.basis_fun Rep_fin_defl" -lemma cast_sfp_principal: - "cast\(sfp_principal a) = Rep_fin_defl a" +lemma cast_defl_principal: + "cast\(defl_principal a) = Rep_fin_defl a" unfolding cast_def -apply (rule sfp.basis_fun_principal) +apply (rule defl.basis_fun_principal) apply (simp only: below_fin_defl_def) done lemma deflation_cast: "deflation (cast\d)" -apply (induct d rule: sfp.principal_induct) +apply (induct d rule: defl.principal_induct) apply (rule adm_subst [OF _ adm_deflation], simp) -apply (simp add: cast_sfp_principal) +apply (simp add: cast_defl_principal) apply (rule finite_deflation_imp_deflation) apply (rule finite_deflation_Rep_fin_defl) done lemma finite_deflation_cast: "compact d \ finite_deflation (cast\d)" -apply (drule sfp.compact_imp_principal, clarify) -apply (simp add: cast_sfp_principal) +apply (drule defl.compact_imp_principal, clarify) +apply (simp add: cast_defl_principal) apply (rule finite_deflation_Rep_fin_defl) done @@ -190,9 +183,9 @@ done lemma cast_below_cast: "cast\A \ cast\B \ A \ B" -apply (induct A rule: sfp.principal_induct, simp) -apply (induct B rule: sfp.principal_induct, simp) -apply (simp add: cast_sfp_principal below_fin_defl_def) +apply (induct A rule: defl.principal_induct, simp) +apply (induct B rule: defl.principal_induct, simp) +apply (simp add: cast_defl_principal below_fin_defl_def) done lemma compact_cast_iff: "compact (cast\d) \ compact d" @@ -209,8 +202,8 @@ by (simp add: below_antisym cast_below_imp_below) lemma cast_strict1 [simp]: "cast\\ = \" -apply (subst inst_sfp_pcpo) -apply (subst cast_sfp_principal) +apply (subst inst_defl_pcpo) +apply (subst cast_defl_principal) apply (rule Abs_fin_defl_inverse) apply (simp add: finite_deflation_UU) done @@ -221,40 +214,40 @@ subsection {* Deflation membership relation *} definition - in_sfp :: "udom \ sfp \ bool" (infixl ":::" 50) + in_defl :: "udom \ defl \ bool" (infixl ":::" 50) where "x ::: A \ cast\A\x = x" -lemma adm_in_sfp: "adm (\x. x ::: A)" -unfolding in_sfp_def by simp +lemma adm_in_defl: "adm (\x. x ::: A)" +unfolding in_defl_def by simp -lemma in_sfpI: "cast\A\x = x \ x ::: A" -unfolding in_sfp_def . +lemma in_deflI: "cast\A\x = x \ x ::: A" +unfolding in_defl_def . lemma cast_fixed: "x ::: A \ cast\A\x = x" -unfolding in_sfp_def . +unfolding in_defl_def . -lemma cast_in_sfp [simp]: "cast\A\x ::: A" -unfolding in_sfp_def by (rule cast.idem) +lemma cast_in_defl [simp]: "cast\A\x ::: A" +unfolding in_defl_def by (rule cast.idem) -lemma bottom_in_sfp [simp]: "\ ::: A" -unfolding in_sfp_def by (rule cast_strict2) +lemma bottom_in_defl [simp]: "\ ::: A" +unfolding in_defl_def by (rule cast_strict2) -lemma sfp_belowD: "A \ B \ x ::: A \ x ::: B" -unfolding in_sfp_def +lemma defl_belowD: "A \ B \ x ::: A \ x ::: B" +unfolding in_defl_def apply (rule deflation.belowD) apply (rule deflation_cast) apply (erule monofun_cfun_arg) apply assumption done -lemma rev_sfp_belowD: "x ::: A \ A \ B \ x ::: B" -by (rule sfp_belowD) +lemma rev_defl_belowD: "x ::: A \ A \ B \ x ::: B" +by (rule defl_belowD) -lemma sfp_belowI: "(\x. x ::: A \ x ::: B) \ A \ B" +lemma defl_belowI: "(\x. x ::: A \ x ::: B) \ A \ B" apply (rule cast_below_imp_below) apply (rule cast.belowI) -apply (simp add: in_sfp_def) +apply (simp add: in_defl_def) done end diff -r a4b2971952f4 -r ad60d7311f43 src/HOLCF/Bifinite.thy --- a/src/HOLCF/Bifinite.thy Mon Oct 11 07:09:42 2010 -0700 +++ b/src/HOLCF/Bifinite.thy Mon Oct 11 08:32:09 2010 -0700 @@ -18,12 +18,12 @@ class bifinite = pcpo + fixes emb :: "'a::pcpo \ udom" fixes prj :: "udom \ 'a::pcpo" - fixes sfp :: "'a itself \ sfp" + fixes defl :: "'a itself \ defl" assumes ep_pair_emb_prj: "ep_pair emb prj" - assumes cast_SFP: "cast\(sfp TYPE('a)) = emb oo prj" + assumes cast_DEFL: "cast\(defl TYPE('a)) = emb oo prj" -syntax "_SFP" :: "type \ sfp" ("(1SFP/(1'(_')))") -translations "SFP('t)" \ "CONST sfp TYPE('t)" +syntax "_DEFL" :: "type \ defl" ("(1DEFL/(1'(_')))") +translations "DEFL('t)" \ "CONST defl TYPE('t)" interpretation bifinite: pcpo_ep_pair "emb :: 'a::bifinite \ udom" "prj :: udom \ 'a::bifinite" @@ -47,24 +47,24 @@ ideal_completion below Rep_compact_basis "approximants::'a::bifinite \ _" proof - obtain Y where Y: "\i. Y i \ Y (Suc i)" - and SFP: "SFP('a) = (\i. sfp_principal (Y i))" - by (rule sfp.obtain_principal_chain) - def approx \ "\i. (prj oo cast\(sfp_principal (Y i)) oo emb) :: 'a \ 'a" - interpret sfp_approx: approx_chain approx + and DEFL: "DEFL('a) = (\i. defl_principal (Y i))" + by (rule defl.obtain_principal_chain) + def approx \ "\i. (prj oo cast\(defl_principal (Y i)) oo emb) :: 'a \ 'a" + interpret defl_approx: approx_chain approx proof (rule approx_chain.intro) show "chain (\i. approx i)" unfolding approx_def by (simp add: Y) show "(\i. approx i) = ID" unfolding approx_def - by (simp add: lub_distribs Y SFP [symmetric] cast_SFP expand_cfun_eq) + by (simp add: lub_distribs Y DEFL [symmetric] cast_DEFL expand_cfun_eq) show "\i. finite_deflation (approx i)" unfolding approx_def apply (rule bifinite.finite_deflation_p_d_e) apply (rule finite_deflation_cast) - apply (rule sfp.compact_principal) + apply (rule defl.compact_principal) apply (rule below_trans [OF monofun_cfun_fun]) apply (rule is_ub_thelub, simp add: Y) - apply (simp add: lub_distribs Y SFP [symmetric] cast_SFP) + apply (simp add: lub_distribs Y DEFL [symmetric] cast_DEFL) done qed (* FIXME: why does show ?thesis fail here? *) @@ -74,30 +74,30 @@ subsection {* Type combinators *} definition - sfp_fun1 :: - "(nat \ 'a \ 'a) \ ((udom \ udom) \ ('a \ 'a)) \ (sfp \ sfp)" + defl_fun1 :: + "(nat \ 'a \ 'a) \ ((udom \ udom) \ ('a \ 'a)) \ (defl \ defl)" where - "sfp_fun1 approx f = - sfp.basis_fun (\a. - sfp_principal (Abs_fin_defl + "defl_fun1 approx f = + defl.basis_fun (\a. + defl_principal (Abs_fin_defl (udom_emb approx oo f\(Rep_fin_defl a) oo udom_prj approx)))" definition - sfp_fun2 :: + defl_fun2 :: "(nat \ 'a \ 'a) \ ((udom \ udom) \ (udom \ udom) \ ('a \ 'a)) - \ (sfp \ sfp \ sfp)" + \ (defl \ defl \ defl)" where - "sfp_fun2 approx f = - sfp.basis_fun (\a. - sfp.basis_fun (\b. - sfp_principal (Abs_fin_defl + "defl_fun2 approx f = + defl.basis_fun (\a. + defl.basis_fun (\b. + defl_principal (Abs_fin_defl (udom_emb approx oo f\(Rep_fin_defl a)\(Rep_fin_defl b) oo udom_prj approx))))" -lemma cast_sfp_fun1: +lemma cast_defl_fun1: assumes approx: "approx_chain approx" assumes f: "\a. finite_deflation a \ finite_deflation (f\a)" - shows "cast\(sfp_fun1 approx f\A) = udom_emb approx oo f\(cast\A) oo udom_prj approx" + shows "cast\(defl_fun1 approx f\A) = udom_emb approx oo f\(cast\A) oo udom_prj approx" proof - have 1: "\a. finite_deflation (udom_emb approx oo f\(Rep_fin_defl a) oo udom_prj approx)" @@ -106,23 +106,23 @@ apply (rule f, rule finite_deflation_Rep_fin_defl) done show ?thesis - by (induct A rule: sfp.principal_induct, simp) - (simp only: sfp_fun1_def - sfp.basis_fun_principal - sfp.basis_fun_mono - sfp.principal_mono + by (induct A rule: defl.principal_induct, simp) + (simp only: defl_fun1_def + defl.basis_fun_principal + defl.basis_fun_mono + defl.principal_mono Abs_fin_defl_mono [OF 1 1] monofun_cfun below_refl Rep_fin_defl_mono - cast_sfp_principal + cast_defl_principal Abs_fin_defl_inverse [unfolded mem_Collect_eq, OF 1]) qed -lemma cast_sfp_fun2: +lemma cast_defl_fun2: assumes approx: "approx_chain approx" assumes f: "\a b. finite_deflation a \ finite_deflation b \ finite_deflation (f\a\b)" - shows "cast\(sfp_fun2 approx f\A\B) = + shows "cast\(defl_fun2 approx f\A\B) = udom_emb approx oo f\(cast\A)\(cast\B) oo udom_prj approx" proof - have 1: "\a b. finite_deflation (udom_emb approx oo @@ -132,15 +132,15 @@ apply (rule f, (rule finite_deflation_Rep_fin_defl)+) done show ?thesis - by (induct A B rule: sfp.principal_induct2, simp, simp) - (simp only: sfp_fun2_def - sfp.basis_fun_principal - sfp.basis_fun_mono - sfp.principal_mono + by (induct A B rule: defl.principal_induct2, simp, simp) + (simp only: defl_fun2_def + defl.basis_fun_principal + defl.basis_fun_mono + defl.principal_mono Abs_fin_defl_mono [OF 1 1] monofun_cfun below_refl Rep_fin_defl_mono - cast_sfp_principal + cast_defl_principal Abs_fin_defl_inverse [unfolded mem_Collect_eq, OF 1]) qed @@ -156,22 +156,22 @@ "prj = (ID :: udom \ udom)" definition - "sfp (t::udom itself) = (\i. sfp_principal (Abs_fin_defl (udom_approx i)))" + "defl (t::udom itself) = (\i. defl_principal (Abs_fin_defl (udom_approx i)))" instance proof show "ep_pair emb (prj :: udom \ udom)" by (simp add: ep_pair.intro) next - show "cast\SFP(udom) = emb oo (prj :: udom \ udom)" - unfolding sfp_udom_def + show "cast\DEFL(udom) = emb oo (prj :: udom \ udom)" + unfolding defl_udom_def apply (subst contlub_cfun_arg) apply (rule chainI) - apply (rule sfp.principal_mono) + apply (rule defl.principal_mono) apply (simp add: below_fin_defl_def) apply (simp add: Abs_fin_defl_inverse finite_deflation_udom_approx) apply (rule chainE) apply (rule chain_udom_approx) - apply (subst cast_sfp_principal) + apply (subst cast_defl_principal) apply (simp add: Abs_fin_defl_inverse finite_deflation_udom_approx) done qed @@ -197,14 +197,14 @@ by (intro finite_deflation_cfun_map finite_deflation_udom_approx) qed -definition cfun_sfp :: "sfp \ sfp \ sfp" -where "cfun_sfp = sfp_fun2 cfun_approx cfun_map" +definition cfun_defl :: "defl \ defl \ defl" +where "cfun_defl = defl_fun2 cfun_approx cfun_map" -lemma cast_cfun_sfp: - "cast\(cfun_sfp\A\B) = +lemma cast_cfun_defl: + "cast\(cfun_defl\A\B) = udom_emb cfun_approx oo cfun_map\(cast\A)\(cast\B) oo udom_prj cfun_approx" -unfolding cfun_sfp_def -apply (rule cast_sfp_fun2 [OF cfun_approx]) +unfolding cfun_defl_def +apply (rule cast_defl_fun2 [OF cfun_approx]) apply (erule (1) finite_deflation_cfun_map) done @@ -218,7 +218,7 @@ "prj = cfun_map\emb\prj oo udom_prj cfun_approx" definition - "sfp (t::('a \ 'b) itself) = cfun_sfp\SFP('a)\SFP('b)" + "defl (t::('a \ 'b) itself) = cfun_defl\DEFL('a)\DEFL('b)" instance proof show "ep_pair emb (prj :: udom \ 'a \ 'b)" @@ -226,16 +226,16 @@ using ep_pair_udom [OF cfun_approx] by (intro ep_pair_comp ep_pair_cfun_map ep_pair_emb_prj) next - show "cast\SFP('a \ 'b) = emb oo (prj :: udom \ 'a \ 'b)" - unfolding emb_cfun_def prj_cfun_def sfp_cfun_def cast_cfun_sfp - by (simp add: cast_SFP oo_def expand_cfun_eq cfun_map_map) + show "cast\DEFL('a \ 'b) = emb oo (prj :: udom \ 'a \ 'b)" + unfolding emb_cfun_def prj_cfun_def defl_cfun_def cast_cfun_defl + by (simp add: cast_DEFL oo_def expand_cfun_eq cfun_map_map) qed end -lemma SFP_cfun: - "SFP('a::bifinite \ 'b::bifinite) = cfun_sfp\SFP('a)\SFP('b)" -by (rule sfp_cfun_def) +lemma DEFL_cfun: + "DEFL('a::bifinite \ 'b::bifinite) = cfun_defl\DEFL('a)\DEFL('b)" +by (rule defl_cfun_def) subsection {* Cartesian product is a bifinite domain *} @@ -256,14 +256,14 @@ by (intro finite_deflation_cprod_map finite_deflation_udom_approx) qed -definition prod_sfp :: "sfp \ sfp \ sfp" -where "prod_sfp = sfp_fun2 prod_approx cprod_map" +definition prod_defl :: "defl \ defl \ defl" +where "prod_defl = defl_fun2 prod_approx cprod_map" -lemma cast_prod_sfp: - "cast\(prod_sfp\A\B) = udom_emb prod_approx oo +lemma cast_prod_defl: + "cast\(prod_defl\A\B) = udom_emb prod_approx oo cprod_map\(cast\A)\(cast\B) oo udom_prj prod_approx" -unfolding prod_sfp_def -apply (rule cast_sfp_fun2 [OF prod_approx]) +unfolding prod_defl_def +apply (rule cast_defl_fun2 [OF prod_approx]) apply (erule (1) finite_deflation_cprod_map) done @@ -277,7 +277,7 @@ "prj = cprod_map\prj\prj oo udom_prj prod_approx" definition - "sfp (t::('a \ 'b) itself) = prod_sfp\SFP('a)\SFP('b)" + "defl (t::('a \ 'b) itself) = prod_defl\DEFL('a)\DEFL('b)" instance proof show "ep_pair emb (prj :: udom \ 'a \ 'b)" @@ -285,16 +285,16 @@ using ep_pair_udom [OF prod_approx] by (intro ep_pair_comp ep_pair_cprod_map ep_pair_emb_prj) next - show "cast\SFP('a \ 'b) = emb oo (prj :: udom \ 'a \ 'b)" - unfolding emb_prod_def prj_prod_def sfp_prod_def cast_prod_sfp - by (simp add: cast_SFP oo_def expand_cfun_eq cprod_map_map) + show "cast\DEFL('a \ 'b) = emb oo (prj :: udom \ 'a \ 'b)" + unfolding emb_prod_def prj_prod_def defl_prod_def cast_prod_defl + by (simp add: cast_DEFL oo_def expand_cfun_eq cprod_map_map) qed end -lemma SFP_prod: - "SFP('a::bifinite \ 'b::bifinite) = prod_sfp\SFP('a)\SFP('b)" -by (rule sfp_prod_def) +lemma DEFL_prod: + "DEFL('a::bifinite \ 'b::bifinite) = prod_defl\DEFL('a)\DEFL('b)" +by (rule defl_prod_def) subsection {* Strict product is a bifinite domain *} @@ -315,16 +315,16 @@ by (intro finite_deflation_sprod_map finite_deflation_udom_approx) qed -definition sprod_sfp :: "sfp \ sfp \ sfp" -where "sprod_sfp = sfp_fun2 sprod_approx sprod_map" +definition sprod_defl :: "defl \ defl \ defl" +where "sprod_defl = defl_fun2 sprod_approx sprod_map" -lemma cast_sprod_sfp: - "cast\(sprod_sfp\A\B) = +lemma cast_sprod_defl: + "cast\(sprod_defl\A\B) = udom_emb sprod_approx oo sprod_map\(cast\A)\(cast\B) oo udom_prj sprod_approx" -unfolding sprod_sfp_def -apply (rule cast_sfp_fun2 [OF sprod_approx]) +unfolding sprod_defl_def +apply (rule cast_defl_fun2 [OF sprod_approx]) apply (erule (1) finite_deflation_sprod_map) done @@ -338,7 +338,7 @@ "prj = sprod_map\prj\prj oo udom_prj sprod_approx" definition - "sfp (t::('a \ 'b) itself) = sprod_sfp\SFP('a)\SFP('b)" + "defl (t::('a \ 'b) itself) = sprod_defl\DEFL('a)\DEFL('b)" instance proof show "ep_pair emb (prj :: udom \ 'a \ 'b)" @@ -346,16 +346,16 @@ using ep_pair_udom [OF sprod_approx] by (intro ep_pair_comp ep_pair_sprod_map ep_pair_emb_prj) next - show "cast\SFP('a \ 'b) = emb oo (prj :: udom \ 'a \ 'b)" - unfolding emb_sprod_def prj_sprod_def sfp_sprod_def cast_sprod_sfp - by (simp add: cast_SFP oo_def expand_cfun_eq sprod_map_map) + show "cast\DEFL('a \ 'b) = emb oo (prj :: udom \ 'a \ 'b)" + unfolding emb_sprod_def prj_sprod_def defl_sprod_def cast_sprod_defl + by (simp add: cast_DEFL oo_def expand_cfun_eq sprod_map_map) qed end -lemma SFP_sprod: - "SFP('a::bifinite \ 'b::bifinite) = sprod_sfp\SFP('a)\SFP('b)" -by (rule sfp_sprod_def) +lemma DEFL_sprod: + "DEFL('a::bifinite \ 'b::bifinite) = sprod_defl\DEFL('a)\DEFL('b)" +by (rule defl_sprod_def) subsection {* Lifted cpo is a bifinite domain *} @@ -374,14 +374,14 @@ by (intro finite_deflation_u_map finite_deflation_udom_approx) qed -definition u_sfp :: "sfp \ sfp" -where "u_sfp = sfp_fun1 u_approx u_map" +definition u_defl :: "defl \ defl" +where "u_defl = defl_fun1 u_approx u_map" -lemma cast_u_sfp: - "cast\(u_sfp\A) = +lemma cast_u_defl: + "cast\(u_defl\A) = udom_emb u_approx oo u_map\(cast\A) oo udom_prj u_approx" -unfolding u_sfp_def -apply (rule cast_sfp_fun1 [OF u_approx]) +unfolding u_defl_def +apply (rule cast_defl_fun1 [OF u_approx]) apply (erule finite_deflation_u_map) done @@ -395,7 +395,7 @@ "prj = u_map\prj oo udom_prj u_approx" definition - "sfp (t::'a u itself) = u_sfp\SFP('a)" + "defl (t::'a u itself) = u_defl\DEFL('a)" instance proof show "ep_pair emb (prj :: udom \ 'a u)" @@ -403,15 +403,15 @@ using ep_pair_udom [OF u_approx] by (intro ep_pair_comp ep_pair_u_map ep_pair_emb_prj) next - show "cast\SFP('a u) = emb oo (prj :: udom \ 'a u)" - unfolding emb_u_def prj_u_def sfp_u_def cast_u_sfp - by (simp add: cast_SFP oo_def expand_cfun_eq u_map_map) + show "cast\DEFL('a u) = emb oo (prj :: udom \ 'a u)" + unfolding emb_u_def prj_u_def defl_u_def cast_u_defl + by (simp add: cast_DEFL oo_def expand_cfun_eq u_map_map) qed end -lemma SFP_u: "SFP('a::bifinite u) = u_sfp\SFP('a)" -by (rule sfp_u_def) +lemma DEFL_u: "DEFL('a::bifinite u) = u_defl\DEFL('a)" +by (rule defl_u_def) subsection {* Lifted countable types are bifinite domains *} @@ -472,25 +472,25 @@ "prj = udom_prj lift_approx" definition - "sfp (t::'a lift itself) = - (\i. sfp_principal (Abs_fin_defl (emb oo lift_approx i oo prj)))" + "defl (t::'a lift itself) = + (\i. defl_principal (Abs_fin_defl (emb oo lift_approx i oo prj)))" instance proof show ep: "ep_pair emb (prj :: udom \ 'a lift)" unfolding emb_lift_def prj_lift_def by (rule ep_pair_udom [OF lift_approx]) - show "cast\SFP('a lift) = emb oo (prj :: udom \ 'a lift)" - unfolding sfp_lift_def + show "cast\DEFL('a lift) = emb oo (prj :: udom \ 'a lift)" + unfolding defl_lift_def apply (subst contlub_cfun_arg) apply (rule chainI) - apply (rule sfp.principal_mono) + apply (rule defl.principal_mono) apply (simp add: below_fin_defl_def) apply (simp add: Abs_fin_defl_inverse finite_deflation_lift_approx ep_pair.finite_deflation_e_d_p [OF ep]) apply (intro monofun_cfun below_refl) apply (rule chainE) apply (rule chain_lift_approx) - apply (subst cast_sfp_principal) + apply (subst cast_defl_principal) apply (simp add: Abs_fin_defl_inverse finite_deflation_lift_approx ep_pair.finite_deflation_e_d_p [OF ep] lub_distribs) done @@ -517,14 +517,14 @@ by (intro finite_deflation_ssum_map finite_deflation_udom_approx) qed -definition ssum_sfp :: "sfp \ sfp \ sfp" -where "ssum_sfp = sfp_fun2 ssum_approx ssum_map" +definition ssum_defl :: "defl \ defl \ defl" +where "ssum_defl = defl_fun2 ssum_approx ssum_map" -lemma cast_ssum_sfp: - "cast\(ssum_sfp\A\B) = +lemma cast_ssum_defl: + "cast\(ssum_defl\A\B) = udom_emb ssum_approx oo ssum_map\(cast\A)\(cast\B) oo udom_prj ssum_approx" -unfolding ssum_sfp_def -apply (rule cast_sfp_fun2 [OF ssum_approx]) +unfolding ssum_defl_def +apply (rule cast_defl_fun2 [OF ssum_approx]) apply (erule (1) finite_deflation_ssum_map) done @@ -538,7 +538,7 @@ "prj = ssum_map\prj\prj oo udom_prj ssum_approx" definition - "sfp (t::('a \ 'b) itself) = ssum_sfp\SFP('a)\SFP('b)" + "defl (t::('a \ 'b) itself) = ssum_defl\DEFL('a)\DEFL('b)" instance proof show "ep_pair emb (prj :: udom \ 'a \ 'b)" @@ -546,15 +546,15 @@ using ep_pair_udom [OF ssum_approx] by (intro ep_pair_comp ep_pair_ssum_map ep_pair_emb_prj) next - show "cast\SFP('a \ 'b) = emb oo (prj :: udom \ 'a \ 'b)" - unfolding emb_ssum_def prj_ssum_def sfp_ssum_def cast_ssum_sfp - by (simp add: cast_SFP oo_def expand_cfun_eq ssum_map_map) + show "cast\DEFL('a \ 'b) = emb oo (prj :: udom \ 'a \ 'b)" + unfolding emb_ssum_def prj_ssum_def defl_ssum_def cast_ssum_defl + by (simp add: cast_DEFL oo_def expand_cfun_eq ssum_map_map) qed end -lemma SFP_ssum: - "SFP('a::bifinite \ 'b::bifinite) = ssum_sfp\SFP('a)\SFP('b)" -by (rule sfp_ssum_def) +lemma DEFL_ssum: + "DEFL('a::bifinite \ 'b::bifinite) = ssum_defl\DEFL('a)\DEFL('b)" +by (rule defl_ssum_def) end diff -r a4b2971952f4 -r ad60d7311f43 src/HOLCF/ConvexPD.thy --- a/src/HOLCF/ConvexPD.thy Mon Oct 11 07:09:42 2010 -0700 +++ b/src/HOLCF/ConvexPD.thy Mon Oct 11 08:32:09 2010 -0700 @@ -463,14 +463,14 @@ by (intro finite_deflation_convex_map finite_deflation_udom_approx) qed -definition convex_sfp :: "sfp \ sfp" -where "convex_sfp = sfp_fun1 convex_approx convex_map" +definition convex_defl :: "defl \ defl" +where "convex_defl = defl_fun1 convex_approx convex_map" -lemma cast_convex_sfp: - "cast\(convex_sfp\A) = +lemma cast_convex_defl: + "cast\(convex_defl\A) = udom_emb convex_approx oo convex_map\(cast\A) oo udom_prj convex_approx" -unfolding convex_sfp_def -apply (rule cast_sfp_fun1 [OF convex_approx]) +unfolding convex_defl_def +apply (rule cast_defl_fun1 [OF convex_approx]) apply (erule finite_deflation_convex_map) done @@ -484,7 +484,7 @@ "prj = convex_map\prj oo udom_prj convex_approx" definition - "sfp (t::'a convex_pd itself) = convex_sfp\SFP('a)" + "defl (t::'a convex_pd itself) = convex_defl\DEFL('a)" instance proof show "ep_pair emb (prj :: udom \ 'a convex_pd)" @@ -492,17 +492,17 @@ using ep_pair_udom [OF convex_approx] by (intro ep_pair_comp ep_pair_convex_map ep_pair_emb_prj) next - show "cast\SFP('a convex_pd) = emb oo (prj :: udom \ 'a convex_pd)" - unfolding emb_convex_pd_def prj_convex_pd_def sfp_convex_pd_def cast_convex_sfp - by (simp add: cast_SFP oo_def expand_cfun_eq convex_map_map) + show "cast\DEFL('a convex_pd) = emb oo (prj :: udom \ 'a convex_pd)" + unfolding emb_convex_pd_def prj_convex_pd_def defl_convex_pd_def cast_convex_defl + by (simp add: cast_DEFL oo_def expand_cfun_eq convex_map_map) qed end -text {* SFP of type constructor = type combinator *} +text {* DEFL of type constructor = type combinator *} -lemma SFP_convex: "SFP('a convex_pd) = convex_sfp\SFP('a)" -by (rule sfp_convex_pd_def) +lemma DEFL_convex: "DEFL('a convex_pd) = convex_defl\DEFL('a)" +by (rule defl_convex_pd_def) subsection {* Join *} diff -r a4b2971952f4 -r ad60d7311f43 src/HOLCF/Library/Strict_Fun.thy --- a/src/HOLCF/Library/Strict_Fun.thy Mon Oct 11 07:09:42 2010 -0700 +++ b/src/HOLCF/Library/Strict_Fun.thy Mon Oct 11 08:32:09 2010 -0700 @@ -162,14 +162,14 @@ by (intro finite_deflation_sfun_map finite_deflation_udom_approx) qed -definition sfun_sfp :: "sfp \ sfp \ sfp" -where "sfun_sfp = sfp_fun2 sfun_approx sfun_map" +definition sfun_defl :: "defl \ defl \ defl" +where "sfun_defl = defl_fun2 sfun_approx sfun_map" -lemma cast_sfun_sfp: - "cast\(sfun_sfp\A\B) = +lemma cast_sfun_defl: + "cast\(sfun_defl\A\B) = udom_emb sfun_approx oo sfun_map\(cast\A)\(cast\B) oo udom_prj sfun_approx" -unfolding sfun_sfp_def -apply (rule cast_sfp_fun2 [OF sfun_approx]) +unfolding sfun_defl_def +apply (rule cast_defl_fun2 [OF sfun_approx]) apply (erule (1) finite_deflation_sfun_map) done @@ -183,7 +183,7 @@ "prj = sfun_map\emb\prj oo udom_prj sfun_approx" definition - "sfp (t::('a \! 'b) itself) = sfun_sfp\SFP('a)\SFP('b)" + "defl (t::('a \! 'b) itself) = sfun_defl\DEFL('a)\DEFL('b)" instance proof show "ep_pair emb (prj :: udom \ 'a \! 'b)" @@ -191,29 +191,29 @@ using ep_pair_udom [OF sfun_approx] by (intro ep_pair_comp ep_pair_sfun_map ep_pair_emb_prj) next - show "cast\SFP('a \! 'b) = emb oo (prj :: udom \ 'a \! 'b)" - unfolding emb_sfun_def prj_sfun_def sfp_sfun_def cast_sfun_sfp - by (simp add: cast_SFP oo_def expand_cfun_eq sfun_map_map) + show "cast\DEFL('a \! 'b) = emb oo (prj :: udom \ 'a \! 'b)" + unfolding emb_sfun_def prj_sfun_def defl_sfun_def cast_sfun_defl + by (simp add: cast_DEFL oo_def expand_cfun_eq sfun_map_map) qed end -lemma SFP_sfun: - "SFP('a::bifinite \! 'b::bifinite) = sfun_sfp\SFP('a)\SFP('b)" -by (rule sfp_sfun_def) +lemma DEFL_sfun: + "DEFL('a::bifinite \! 'b::bifinite) = sfun_defl\DEFL('a)\DEFL('b)" +by (rule defl_sfun_def) lemma isodefl_sfun: "isodefl d1 t1 \ isodefl d2 t2 \ - isodefl (sfun_map\d1\d2) (sfun_sfp\t1\t2)" + isodefl (sfun_map\d1\d2) (sfun_defl\t1\t2)" apply (rule isodeflI) -apply (simp add: cast_sfun_sfp cast_isodefl) +apply (simp add: cast_sfun_defl cast_isodefl) apply (simp add: emb_sfun_def prj_sfun_def) apply (simp add: sfun_map_map deflation_strict [OF isodefl_imp_deflation]) done setup {* Domain_Isomorphism.add_type_constructor - (@{type_name "sfun"}, @{term sfun_sfp}, @{const_name sfun_map}, @{thm SFP_sfun}, + (@{type_name "sfun"}, @{term sfun_defl}, @{const_name sfun_map}, @{thm DEFL_sfun}, @{thm isodefl_sfun}, @{thm sfun_map_ID}, @{thm deflation_sfun_map}) *} diff -r a4b2971952f4 -r ad60d7311f43 src/HOLCF/LowerPD.thy --- a/src/HOLCF/LowerPD.thy Mon Oct 11 07:09:42 2010 -0700 +++ b/src/HOLCF/LowerPD.thy Mon Oct 11 08:32:09 2010 -0700 @@ -452,14 +452,14 @@ by (intro finite_deflation_lower_map finite_deflation_udom_approx) qed -definition lower_sfp :: "sfp \ sfp" -where "lower_sfp = sfp_fun1 lower_approx lower_map" +definition lower_defl :: "defl \ defl" +where "lower_defl = defl_fun1 lower_approx lower_map" -lemma cast_lower_sfp: - "cast\(lower_sfp\A) = +lemma cast_lower_defl: + "cast\(lower_defl\A) = udom_emb lower_approx oo lower_map\(cast\A) oo udom_prj lower_approx" -unfolding lower_sfp_def -apply (rule cast_sfp_fun1 [OF lower_approx]) +unfolding lower_defl_def +apply (rule cast_defl_fun1 [OF lower_approx]) apply (erule finite_deflation_lower_map) done @@ -473,7 +473,7 @@ "prj = lower_map\prj oo udom_prj lower_approx" definition - "sfp (t::'a lower_pd itself) = lower_sfp\SFP('a)" + "defl (t::'a lower_pd itself) = lower_defl\DEFL('a)" instance proof show "ep_pair emb (prj :: udom \ 'a lower_pd)" @@ -481,15 +481,15 @@ using ep_pair_udom [OF lower_approx] by (intro ep_pair_comp ep_pair_lower_map ep_pair_emb_prj) next - show "cast\SFP('a lower_pd) = emb oo (prj :: udom \ 'a lower_pd)" - unfolding emb_lower_pd_def prj_lower_pd_def sfp_lower_pd_def cast_lower_sfp - by (simp add: cast_SFP oo_def expand_cfun_eq lower_map_map) + show "cast\DEFL('a lower_pd) = emb oo (prj :: udom \ 'a lower_pd)" + unfolding emb_lower_pd_def prj_lower_pd_def defl_lower_pd_def cast_lower_defl + by (simp add: cast_DEFL oo_def expand_cfun_eq lower_map_map) qed end -lemma SFP_lower: "SFP('a lower_pd) = lower_sfp\SFP('a)" -by (rule sfp_lower_pd_def) +lemma DEFL_lower: "DEFL('a lower_pd) = lower_defl\DEFL('a)" +by (rule defl_lower_pd_def) subsection {* Join *} diff -r a4b2971952f4 -r ad60d7311f43 src/HOLCF/Powerdomains.thy --- a/src/HOLCF/Powerdomains.thy Mon Oct 11 07:09:42 2010 -0700 +++ b/src/HOLCF/Powerdomains.thy Mon Oct 11 08:32:09 2010 -0700 @@ -9,25 +9,25 @@ begin lemma isodefl_upper: - "isodefl d t \ isodefl (upper_map\d) (upper_sfp\t)" + "isodefl d t \ isodefl (upper_map\d) (upper_defl\t)" apply (rule isodeflI) -apply (simp add: cast_upper_sfp cast_isodefl) +apply (simp add: cast_upper_defl cast_isodefl) apply (simp add: emb_upper_pd_def prj_upper_pd_def) apply (simp add: upper_map_map) done lemma isodefl_lower: - "isodefl d t \ isodefl (lower_map\d) (lower_sfp\t)" + "isodefl d t \ isodefl (lower_map\d) (lower_defl\t)" apply (rule isodeflI) -apply (simp add: cast_lower_sfp cast_isodefl) +apply (simp add: cast_lower_defl cast_isodefl) apply (simp add: emb_lower_pd_def prj_lower_pd_def) apply (simp add: lower_map_map) done lemma isodefl_convex: - "isodefl d t \ isodefl (convex_map\d) (convex_sfp\t)" + "isodefl d t \ isodefl (convex_map\d) (convex_defl\t)" apply (rule isodeflI) -apply (simp add: cast_convex_sfp cast_isodefl) +apply (simp add: cast_convex_defl cast_isodefl) apply (simp add: emb_convex_pd_def prj_convex_pd_def) apply (simp add: convex_map_map) done @@ -36,16 +36,16 @@ setup {* fold Domain_Isomorphism.add_type_constructor - [(@{type_name "upper_pd"}, @{term upper_sfp}, @{const_name upper_map}, - @{thm SFP_upper}, @{thm isodefl_upper}, @{thm upper_map_ID}, + [(@{type_name "upper_pd"}, @{term upper_defl}, @{const_name upper_map}, + @{thm DEFL_upper}, @{thm isodefl_upper}, @{thm upper_map_ID}, @{thm deflation_upper_map}), - (@{type_name "lower_pd"}, @{term lower_sfp}, @{const_name lower_map}, - @{thm SFP_lower}, @{thm isodefl_lower}, @{thm lower_map_ID}, + (@{type_name "lower_pd"}, @{term lower_defl}, @{const_name lower_map}, + @{thm DEFL_lower}, @{thm isodefl_lower}, @{thm lower_map_ID}, @{thm deflation_lower_map}), - (@{type_name "convex_pd"}, @{term convex_sfp}, @{const_name convex_map}, - @{thm SFP_convex}, @{thm isodefl_convex}, @{thm convex_map_ID}, + (@{type_name "convex_pd"}, @{term convex_defl}, @{const_name convex_map}, + @{thm DEFL_convex}, @{thm isodefl_convex}, @{thm convex_map_ID}, @{thm deflation_convex_map})] *} diff -r a4b2971952f4 -r ad60d7311f43 src/HOLCF/Representable.thy --- a/src/HOLCF/Representable.thy Mon Oct 11 07:09:42 2010 -0700 +++ b/src/HOLCF/Representable.thy Mon Oct 11 08:32:09 2010 -0700 @@ -15,20 +15,20 @@ subsection {* Representations of types *} -lemma emb_prj: "emb\((prj\x)::'a) = cast\SFP('a)\x" -by (simp add: cast_SFP) +lemma emb_prj: "emb\((prj\x)::'a) = cast\DEFL('a)\x" +by (simp add: cast_DEFL) -lemma in_SFP_iff: - "x ::: SFP('a) \ emb\((prj\x)::'a) = x" -by (simp add: in_sfp_def cast_SFP) +lemma in_DEFL_iff: + "x ::: DEFL('a) \ emb\((prj\x)::'a) = x" +by (simp add: in_defl_def cast_DEFL) lemma prj_inverse: - "x ::: SFP('a) \ emb\((prj\x)::'a) = x" -by (simp only: in_SFP_iff) + "x ::: DEFL('a) \ emb\((prj\x)::'a) = x" +by (simp only: in_DEFL_iff) -lemma emb_in_SFP [simp]: - "emb\(x::'a) ::: SFP('a)" -by (simp add: in_SFP_iff) +lemma emb_in_DEFL [simp]: + "emb\(x::'a) ::: DEFL('a)" +by (simp add: in_DEFL_iff) subsection {* Coerce operator *} @@ -48,16 +48,16 @@ by (rule ext_cfun, simp add: beta_coerce) lemma emb_coerce: - "SFP('a) \ SFP('b) + "DEFL('a) \ DEFL('b) \ emb\((coerce::'a \ 'b)\x) = emb\x" apply (simp add: beta_coerce) apply (rule prj_inverse) - apply (erule sfp_belowD) - apply (rule emb_in_SFP) + apply (erule defl_belowD) + apply (rule emb_in_DEFL) done lemma coerce_prj: - "SFP('a) \ SFP('b) + "DEFL('a) \ DEFL('b) \ (coerce::'b \ 'a)\(prj\x) = prj\x" apply (simp add: coerce_def) apply (rule emb_eq_iff [THEN iffD1]) @@ -69,21 +69,21 @@ done lemma coerce_coerce [simp]: - "SFP('a) \ SFP('b) + "DEFL('a) \ DEFL('b) \ coerce\((coerce::'a \ 'b)\x) = coerce\x" -by (simp add: beta_coerce prj_inverse sfp_belowD) +by (simp add: beta_coerce prj_inverse defl_belowD) lemma coerce_inverse: - "emb\(x::'a) ::: SFP('b) \ coerce\(coerce\x :: 'b) = x" + "emb\(x::'a) ::: DEFL('b) \ coerce\(coerce\x :: 'b) = x" by (simp only: beta_coerce prj_inverse emb_inverse) lemma coerce_type: - "SFP('a) \ SFP('b) - \ emb\((coerce::'a \ 'b)\x) ::: SFP('a)" -by (simp add: beta_coerce prj_inverse sfp_belowD) + "DEFL('a) \ DEFL('b) + \ emb\((coerce::'a \ 'b)\x) ::: DEFL('a)" +by (simp add: beta_coerce prj_inverse defl_belowD) lemma ep_pair_coerce: - "SFP('a) \ SFP('b) + "DEFL('a) \ DEFL('b) \ ep_pair (coerce::'a \ 'b) (coerce::'b \ 'a)" apply (rule ep_pair.intro) apply simp @@ -98,19 +98,19 @@ lemma domain_abs_iso: fixes abs and rep - assumes SFP: "SFP('b) = SFP('a)" + assumes DEFL: "DEFL('b) = DEFL('a)" assumes abs_def: "abs \ (coerce :: 'a \ 'b)" assumes rep_def: "rep \ (coerce :: 'b \ 'a)" shows "rep\(abs\x) = x" -unfolding abs_def rep_def by (simp add: SFP) +unfolding abs_def rep_def by (simp add: DEFL) lemma domain_rep_iso: fixes abs and rep - assumes SFP: "SFP('b) = SFP('a)" + assumes DEFL: "DEFL('b) = DEFL('a)" assumes abs_def: "abs \ (coerce :: 'a \ 'b)" assumes rep_def: "rep \ (coerce :: 'b \ 'a)" shows "abs\(rep\x) = x" -unfolding abs_def rep_def by (simp add: SFP [symmetric]) +unfolding abs_def rep_def by (simp add: DEFL [symmetric]) subsection {* Proving a subtype is representable *} @@ -120,7 +120,7 @@ *} setup {* Sign.add_const_constraint - (@{const_name sfp}, SOME @{typ "'a::pcpo itself \ sfp"}) *} + (@{const_name defl}, SOME @{typ "'a::pcpo itself \ defl"}) *} setup {* Sign.add_const_constraint (@{const_name emb}, SOME @{typ "'a::pcpo \ udom"}) *} @@ -131,16 +131,16 @@ lemma typedef_rep_class: fixes Rep :: "'a::pcpo \ udom" fixes Abs :: "udom \ 'a::pcpo" - fixes t :: sfp + fixes t :: defl assumes type: "type_definition Rep Abs {x. x ::: t}" assumes below: "op \ \ \x y. Rep x \ Rep y" assumes emb: "emb \ (\ x. Rep x)" assumes prj: "prj \ (\ x. Abs (cast\t\x))" - assumes sfp: "sfp \ (\ a::'a itself. t)" + assumes defl: "defl \ (\ a::'a itself. t)" shows "OFCLASS('a, bifinite_class)" proof have adm: "adm (\x. x \ {x. x ::: t})" - by (simp add: adm_in_sfp) + by (simp add: adm_in_defl) have emb_beta: "\x. emb\x = Rep x" unfolding emb apply (rule beta_cfun) @@ -152,12 +152,12 @@ apply (rule typedef_cont_Abs [OF type below adm]) apply simp_all done - have emb_in_sfp: "\x::'a. emb\x ::: t" + have emb_in_defl: "\x::'a. emb\x ::: t" using type_definition.Rep [OF type] by (simp add: emb_beta) have prj_emb: "\x::'a. prj\(emb\x) = x" unfolding prj_beta - apply (simp add: cast_fixed [OF emb_in_sfp]) + apply (simp add: cast_fixed [OF emb_in_defl]) apply (simp add: emb_beta type_definition.Rep_inverse [OF type]) done have emb_prj: "\y. emb\(prj\y :: 'a) = cast\t\y" @@ -168,19 +168,19 @@ apply (simp add: prj_emb) apply (simp add: emb_prj cast.below) done - show "cast\SFP('a) = emb oo (prj :: udom \ 'a)" - by (rule ext_cfun, simp add: sfp emb_prj) + show "cast\DEFL('a) = emb oo (prj :: udom \ 'a)" + by (rule ext_cfun, simp add: defl emb_prj) qed -lemma typedef_SFP: - assumes "sfp \ (\a::'a::pcpo itself. t)" - shows "SFP('a::pcpo) = t" +lemma typedef_DEFL: + assumes "defl \ (\a::'a::pcpo itself. t)" + shows "DEFL('a::pcpo) = t" unfolding assms .. text {* Restore original typing constraints *} setup {* Sign.add_const_constraint - (@{const_name sfp}, SOME @{typ "'a::bifinite itself \ sfp"}) *} + (@{const_name defl}, SOME @{typ "'a::bifinite itself \ defl"}) *} setup {* Sign.add_const_constraint (@{const_name emb}, SOME @{typ "'a::bifinite \ udom"}) *} @@ -188,15 +188,15 @@ setup {* Sign.add_const_constraint (@{const_name prj}, SOME @{typ "udom \ 'a::bifinite"}) *} -lemma adm_mem_Collect_in_sfp: "adm (\x. x \ {x. x ::: A})" -unfolding mem_Collect_eq by (rule adm_in_sfp) +lemma adm_mem_Collect_in_defl: "adm (\x. x \ {x. x ::: A})" +unfolding mem_Collect_eq by (rule adm_in_defl) use "Tools/repdef.ML" subsection {* Isomorphic deflations *} definition - isodefl :: "('a \ 'a) \ sfp \ bool" + isodefl :: "('a \ 'a) \ defl \ bool" where "isodefl d t \ cast\t = emb oo d oo prj" @@ -222,12 +222,12 @@ using cast.below [of t "emb\x"] by simp qed -lemma isodefl_ID_SFP: "isodefl (ID :: 'a \ 'a) SFP('a)" -unfolding isodefl_def by (simp add: cast_SFP) +lemma isodefl_ID_DEFL: "isodefl (ID :: 'a \ 'a) DEFL('a)" +unfolding isodefl_def by (simp add: cast_DEFL) -lemma isodefl_SFP_imp_ID: "isodefl (d :: 'a \ 'a) SFP('a) \ d = ID" +lemma isodefl_DEFL_imp_ID: "isodefl (d :: 'a \ 'a) DEFL('a) \ d = ID" unfolding isodefl_def -apply (simp add: cast_SFP) +apply (simp add: cast_DEFL) apply (simp add: expand_cfun_eq) apply (rule allI) apply (drule_tac x="emb\x" in spec) @@ -260,61 +260,61 @@ lemma isodefl_coerce: fixes d :: "'a \ 'a" - assumes SFP: "SFP('b) = SFP('a)" + assumes DEFL: "DEFL('b) = DEFL('a)" shows "isodefl d t \ isodefl (coerce oo d oo coerce :: 'b \ 'b) t" unfolding isodefl_def apply (simp add: expand_cfun_eq) -apply (simp add: emb_coerce coerce_prj SFP) +apply (simp add: emb_coerce coerce_prj DEFL) done lemma isodefl_abs_rep: fixes abs and rep and d - assumes SFP: "SFP('b) = SFP('a)" + assumes DEFL: "DEFL('b) = DEFL('a)" assumes abs_def: "abs \ (coerce :: 'a \ 'b)" assumes rep_def: "rep \ (coerce :: 'b \ 'a)" shows "isodefl d t \ isodefl (abs oo d oo rep) t" -unfolding abs_def rep_def using SFP by (rule isodefl_coerce) +unfolding abs_def rep_def using DEFL by (rule isodefl_coerce) lemma isodefl_cfun: "isodefl d1 t1 \ isodefl d2 t2 \ - isodefl (cfun_map\d1\d2) (cfun_sfp\t1\t2)" + isodefl (cfun_map\d1\d2) (cfun_defl\t1\t2)" apply (rule isodeflI) -apply (simp add: cast_cfun_sfp cast_isodefl) +apply (simp add: cast_cfun_defl cast_isodefl) apply (simp add: emb_cfun_def prj_cfun_def) apply (simp add: cfun_map_map cfcomp1) done lemma isodefl_ssum: "isodefl d1 t1 \ isodefl d2 t2 \ - isodefl (ssum_map\d1\d2) (ssum_sfp\t1\t2)" + isodefl (ssum_map\d1\d2) (ssum_defl\t1\t2)" apply (rule isodeflI) -apply (simp add: cast_ssum_sfp cast_isodefl) +apply (simp add: cast_ssum_defl cast_isodefl) apply (simp add: emb_ssum_def prj_ssum_def) apply (simp add: ssum_map_map isodefl_strict) done lemma isodefl_sprod: "isodefl d1 t1 \ isodefl d2 t2 \ - isodefl (sprod_map\d1\d2) (sprod_sfp\t1\t2)" + isodefl (sprod_map\d1\d2) (sprod_defl\t1\t2)" apply (rule isodeflI) -apply (simp add: cast_sprod_sfp cast_isodefl) +apply (simp add: cast_sprod_defl cast_isodefl) apply (simp add: emb_sprod_def prj_sprod_def) apply (simp add: sprod_map_map isodefl_strict) done lemma isodefl_cprod: "isodefl d1 t1 \ isodefl d2 t2 \ - isodefl (cprod_map\d1\d2) (prod_sfp\t1\t2)" + isodefl (cprod_map\d1\d2) (prod_defl\t1\t2)" apply (rule isodeflI) -apply (simp add: cast_prod_sfp cast_isodefl) +apply (simp add: cast_prod_defl cast_isodefl) apply (simp add: emb_prod_def prj_prod_def) apply (simp add: cprod_map_map cfcomp1) done lemma isodefl_u: - "isodefl d t \ isodefl (u_map\d) (u_sfp\t)" + "isodefl d t \ isodefl (u_map\d) (u_defl\t)" apply (rule isodeflI) -apply (simp add: cast_u_sfp cast_isodefl) +apply (simp add: cast_u_defl cast_isodefl) apply (simp add: emb_u_def prj_u_def) apply (simp add: u_map_map) done @@ -325,19 +325,19 @@ setup {* fold Domain_Isomorphism.add_type_constructor - [(@{type_name cfun}, @{term cfun_sfp}, @{const_name cfun_map}, @{thm SFP_cfun}, + [(@{type_name cfun}, @{term cfun_defl}, @{const_name cfun_map}, @{thm DEFL_cfun}, @{thm isodefl_cfun}, @{thm cfun_map_ID}, @{thm deflation_cfun_map}), - (@{type_name ssum}, @{term ssum_sfp}, @{const_name ssum_map}, @{thm SFP_ssum}, + (@{type_name ssum}, @{term ssum_defl}, @{const_name ssum_map}, @{thm DEFL_ssum}, @{thm isodefl_ssum}, @{thm ssum_map_ID}, @{thm deflation_ssum_map}), - (@{type_name sprod}, @{term sprod_sfp}, @{const_name sprod_map}, @{thm SFP_sprod}, + (@{type_name sprod}, @{term sprod_defl}, @{const_name sprod_map}, @{thm DEFL_sprod}, @{thm isodefl_sprod}, @{thm sprod_map_ID}, @{thm deflation_sprod_map}), - (@{type_name prod}, @{term cprod_sfp}, @{const_name cprod_map}, @{thm SFP_prod}, + (@{type_name prod}, @{term cprod_defl}, @{const_name cprod_map}, @{thm DEFL_prod}, @{thm isodefl_cprod}, @{thm cprod_map_ID}, @{thm deflation_cprod_map}), - (@{type_name "u"}, @{term u_sfp}, @{const_name u_map}, @{thm SFP_u}, + (@{type_name "u"}, @{term u_defl}, @{const_name u_map}, @{thm DEFL_u}, @{thm isodefl_u}, @{thm u_map_ID}, @{thm deflation_u_map})] *} diff -r a4b2971952f4 -r ad60d7311f43 src/HOLCF/Tools/Domain/domain_isomorphism.ML --- a/src/HOLCF/Tools/Domain/domain_isomorphism.ML Mon Oct 11 07:09:42 2010 -0700 +++ b/src/HOLCF/Tools/Domain/domain_isomorphism.ML Mon Oct 11 08:32:09 2010 -0700 @@ -48,7 +48,7 @@ structure DeflData = Theory_Data ( - (* terms like "foo_sfp" *) + (* terms like "foo_defl" *) type T = term Symtab.table; val empty = Symtab.empty; val extend = I; @@ -57,7 +57,7 @@ structure RepData = Theory_Data ( - (* theorems like "SFP('a foo) = foo_sfp$SFP('a)" *) + (* theorems like "DEFL('a foo) = foo_defl$DEFL('a)" *) type T = thm list; val empty = []; val extend = I; @@ -83,11 +83,11 @@ ); fun add_type_constructor - (tname, defl_const, map_name, SFP_thm, + (tname, defl_const, map_name, DEFL_thm, isodefl_thm, map_ID_thm, defl_map_thm) = DeflData.map (Symtab.insert (K true) (tname, defl_const)) #> Domain_Take_Proofs.add_map_function (tname, map_name, defl_map_thm) - #> RepData.map (Thm.add_thm SFP_thm) + #> RepData.map (Thm.add_thm DEFL_thm) #> IsodeflData.map (Thm.add_thm isodefl_thm) #> MapIdData.map (Thm.add_thm map_ID_thm); @@ -104,19 +104,19 @@ infixr 6 ->>; infix -->>; -val sfpT = @{typ "sfp"}; +val deflT = @{typ "defl"}; fun mapT (T as Type (_, Ts)) = (map (fn T => T ->> T) Ts) -->> (T ->> T) | mapT T = T ->> T; -fun mk_SFP T = - Const (@{const_name sfp}, Term.itselfT T --> sfpT) $ Logic.mk_type T; +fun mk_DEFL T = + Const (@{const_name defl}, Term.itselfT T --> deflT) $ Logic.mk_type T; fun coerce_const T = Const (@{const_name coerce}, T); fun isodefl_const T = - Const (@{const_name isodefl}, (T ->> T) --> sfpT --> HOLogic.boolT); + Const (@{const_name isodefl}, (T ->> T) --> deflT --> HOLogic.boolT); fun mk_deflation t = Const (@{const_name deflation}, Term.fastype_of t --> boolT) $ t; @@ -218,13 +218,13 @@ let fun is_closed_typ (Type (_, Ts)) = forall is_closed_typ Ts | is_closed_typ _ = false; - fun defl_of (TFree (a, _)) = Free (Library.unprefix "'" a, sfpT) + fun defl_of (TFree (a, _)) = Free (Library.unprefix "'" a, deflT) | defl_of (TVar _) = error ("defl_of_typ: TVar") | defl_of (T as Type (c, Ts)) = case Symtab.lookup tab c of SOME t => list_ccomb (t, map defl_of Ts) | NONE => if is_closed_typ T - then mk_SFP T + then mk_DEFL T else error ("defl_of_typ: type variable under unsupported type constructor " ^ c); in defl_of T end; @@ -443,7 +443,7 @@ (* declare deflation combinator constants *) fun declare_defl_const (vs, tbind, mx, rhs, morphs) thy = let - val defl_type = map (K sfpT) vs -->> sfpT; + val defl_type = map (K deflT) vs -->> deflT; val defl_bind = Binding.suffix_name "_defl" tbind; in Sign.declare_const ((defl_bind, defl_type), NoSyn) thy @@ -470,34 +470,34 @@ fun make_repdef ((vs, tbind, mx, _, _), defl_const) thy = let fun tfree a = TFree (a, the (AList.lookup (op =) sorts a)) - val reps = map (mk_SFP o tfree) vs; + val reps = map (mk_DEFL o tfree) vs; val defl = list_ccomb (defl_const, reps); - val ((_, _, _, {SFP, ...}), thy) = + val ((_, _, _, {DEFL, ...}), thy) = Repdef.add_repdef false NONE (tbind, map (rpair dummyS) vs, mx) defl NONE thy; in - (SFP, thy) + (DEFL, thy) end; - val (SFP_thms, thy) = fold_map make_repdef (doms ~~ defl_consts) thy; - val thy = RepData.map (fold Thm.add_thm SFP_thms) thy; + val (DEFL_thms, thy) = fold_map make_repdef (doms ~~ defl_consts) thy; + val thy = RepData.map (fold Thm.add_thm DEFL_thms) thy; - (* prove SFP equations *) - fun mk_SFP_eq_thm (lhsT, rhsT) = + (* prove DEFL equations *) + fun mk_DEFL_eq_thm (lhsT, rhsT) = let - val goal = mk_eqs (mk_SFP lhsT, mk_SFP rhsT); - val SFP_simps = RepData.get thy; + val goal = mk_eqs (mk_DEFL lhsT, mk_DEFL rhsT); + val DEFL_simps = RepData.get thy; val tac = - rewrite_goals_tac (map mk_meta_eq SFP_simps) + rewrite_goals_tac (map mk_meta_eq DEFL_simps) THEN resolve_tac defl_unfold_thms 1; in Goal.prove_global thy [] [] goal (K tac) end; - val SFP_eq_thms = map mk_SFP_eq_thm dom_eqns; + val DEFL_eq_thms = map mk_DEFL_eq_thm dom_eqns; - (* register SFP equations *) - val SFP_eq_binds = map (Binding.prefix_name "SFP_eq_") dbinds; + (* register DEFL equations *) + val DEFL_eq_binds = map (Binding.prefix_name "DEFL_eq_") dbinds; val (_, thy) = thy |> (Global_Theory.add_thms o map Thm.no_attributes) - (SFP_eq_binds ~~ SFP_eq_thms); + (DEFL_eq_binds ~~ DEFL_eq_thms); (* define rep/abs functions *) fun mk_rep_abs ((tbind, morphs), (lhsT, rhsT)) thy = @@ -516,10 +516,10 @@ |>> ListPair.unzip; (* prove isomorphism and isodefl rules *) - fun mk_iso_thms ((tbind, SFP_eq), (rep_def, abs_def)) thy = + fun mk_iso_thms ((tbind, DEFL_eq), (rep_def, abs_def)) thy = let fun make thm = - Drule.zero_var_indexes (thm OF [SFP_eq, abs_def, rep_def]); + Drule.zero_var_indexes (thm OF [DEFL_eq, abs_def, rep_def]); val rep_iso_thm = make @{thm domain_rep_iso}; val abs_iso_thm = make @{thm domain_abs_iso}; val isodefl_thm = make @{thm isodefl_abs_rep}; @@ -532,7 +532,7 @@ end; val ((iso_thms, isodefl_abs_rep_thms), thy) = thy - |> fold_map mk_iso_thms (dbinds ~~ SFP_eq_thms ~~ rep_abs_defs) + |> fold_map mk_iso_thms (dbinds ~~ DEFL_eq_thms ~~ rep_abs_defs) |>> ListPair.unzip; (* collect info about rep/abs *) @@ -561,7 +561,7 @@ val isodefl_thm = let fun unprime a = Library.unprefix "'" a; - fun mk_d T = Free ("d" ^ unprime (fst (dest_TFree T)), sfpT); + fun mk_d T = Free ("d" ^ unprime (fst (dest_TFree T)), deflT); fun mk_f T = Free ("f" ^ unprime (fst (dest_TFree T)), T ->> T); fun mk_assm T = mk_trp (isodefl_const T $ mk_f T $ mk_d T); fun mk_goal ((map_const, defl_const), (T, rhsT)) = @@ -579,9 +579,9 @@ @{thms adm_conj adm_isodefl cont2cont_fst cont2cont_snd cont_id}; val bottom_rules = @{thms fst_strict snd_strict isodefl_bottom simp_thms}; - val SFP_simps = map (fn th => th RS sym) (RepData.get thy); + val DEFL_simps = map (fn th => th RS sym) (RepData.get thy); val isodefl_rules = - @{thms conjI isodefl_ID_SFP} + @{thms conjI isodefl_ID_DEFL} @ isodefl_abs_rep_thms @ IsodeflData.get thy; in @@ -595,7 +595,7 @@ simp_tac (HOL_basic_ss addsimps bottom_rules) 1, simp_tac beta_ss 1, simp_tac (HOL_basic_ss addsimps @{thms fst_conv snd_conv}) 1, - simp_tac (HOL_basic_ss addsimps SFP_simps) 1, + simp_tac (HOL_basic_ss addsimps DEFL_simps) 1, REPEAT (etac @{thm conjE} 1), REPEAT (resolve_tac (isodefl_rules @ prems) 1 ORELSE atac 1)]) end; @@ -613,23 +613,23 @@ (* prove map_ID theorems *) fun prove_map_ID_thm - (((map_const, (lhsT, _)), SFP_thm), isodefl_thm) = + (((map_const, (lhsT, _)), DEFL_thm), isodefl_thm) = let val Ts = snd (dest_Type lhsT); val lhs = list_ccomb (map_const, map mk_ID Ts); val goal = mk_eqs (lhs, mk_ID lhsT); val tac = EVERY - [rtac @{thm isodefl_SFP_imp_ID} 1, - stac SFP_thm 1, + [rtac @{thm isodefl_DEFL_imp_ID} 1, + stac DEFL_thm 1, rtac isodefl_thm 1, - REPEAT (rtac @{thm isodefl_ID_SFP} 1)]; + REPEAT (rtac @{thm isodefl_ID_DEFL} 1)]; in Goal.prove_global thy [] [] goal (K tac) end; val map_ID_binds = map (Binding.suffix_name "_map_ID") dbinds; val map_ID_thms = map prove_map_ID_thm - (map_consts ~~ dom_eqns ~~ SFP_thms ~~ isodefl_thms); + (map_consts ~~ dom_eqns ~~ DEFL_thms ~~ isodefl_thms); val (_, thy) = thy |> (Global_Theory.add_thms o map Thm.no_attributes) (map_ID_binds ~~ map_ID_thms); diff -r a4b2971952f4 -r ad60d7311f43 src/HOLCF/Tools/repdef.ML --- a/src/HOLCF/Tools/repdef.ML Mon Oct 11 07:09:42 2010 -0700 +++ b/src/HOLCF/Tools/repdef.ML Mon Oct 11 08:32:09 2010 -0700 @@ -7,7 +7,7 @@ signature REPDEF = sig type rep_info = - { emb_def: thm, prj_def: thm, sfp_def: thm, SFP: thm } + { emb_def: thm, prj_def: thm, defl_def: thm, DEFL: thm } val add_repdef: bool -> binding option -> binding * (string * sort) list * mixfix -> term -> (binding * binding) option -> theory -> @@ -28,19 +28,19 @@ (** type definitions **) type rep_info = - { emb_def: thm, prj_def: thm, sfp_def: thm, SFP: thm }; + { emb_def: thm, prj_def: thm, defl_def: thm, DEFL: thm }; (* building types and terms *) val udomT = @{typ udom}; -val sfpT = @{typ sfp}; +val deflT = @{typ defl}; fun emb_const T = Const (@{const_name emb}, T ->> udomT); fun prj_const T = Const (@{const_name prj}, udomT ->> T); -fun sfp_const T = Const (@{const_name sfp}, Term.itselfT T --> sfpT); +fun defl_const T = Const (@{const_name defl}, Term.itselfT T --> deflT); fun mk_cast (t, x) = capply_const (udomT, udomT) - $ (capply_const (sfpT, udomT ->> udomT) $ @{const cast} $ t) + $ (capply_const (deflT, udomT ->> udomT) $ @{const cast} $ t) $ x; (* manipulating theorems *) @@ -70,8 +70,8 @@ val tmp_ctxt = tmp_ctxt |> Variable.declare_constraints defl; val deflT = Term.fastype_of defl; - val _ = if deflT = @{typ "sfp"} then () - else error ("Not type sfp: " ^ quote (Syntax.string_of_typ tmp_ctxt deflT)); + val _ = if deflT = @{typ "defl"} then () + else error ("Not type defl: " ^ quote (Syntax.string_of_typ tmp_ctxt deflT)); (*lhs*) val lhs_tfrees = map (ProofContext.check_tfree tmp_ctxt) raw_args; @@ -84,12 +84,12 @@ |> the_default (Binding.prefix_name "Rep_" name, Binding.prefix_name "Abs_" name); (*set*) - val in_defl = @{term "in_sfp :: udom => sfp => bool"}; + val in_defl = @{term "in_defl :: udom => defl => bool"}; val set = HOLogic.Collect_const udomT $ Abs ("x", udomT, in_defl $ Bound 0 $ defl); (*pcpodef*) - val tac1 = rtac @{thm CollectI} 1 THEN rtac @{thm bottom_in_sfp} 1; - val tac2 = rtac @{thm adm_mem_Collect_in_sfp} 1; + val tac1 = rtac @{thm CollectI} 1 THEN rtac @{thm bottom_in_defl} 1; + val tac2 = rtac @{thm adm_mem_Collect_in_defl} 1; val ((info, cpo_info, pcpo_info), thy) = thy |> Pcpodef.add_pcpodef def (SOME name) typ set (SOME morphs) (tac1, tac2); @@ -99,12 +99,12 @@ val emb_eqn = Logic.mk_equals (emb_const newT, cabs_const (newT, udomT) $ Rep_const); val prj_eqn = Logic.mk_equals (prj_const newT, cabs_const (udomT, newT) $ Abs ("x", udomT, Abs_const $ mk_cast (defl, Bound 0))); - val sfp_eqn = Logic.mk_equals (sfp_const newT, + val defl_eqn = Logic.mk_equals (defl_const newT, Abs ("x", Term.itselfT newT, defl)); val name_def = Binding.suffix_name "_def" name; val emb_bind = (Binding.prefix_name "emb_" name_def, []); val prj_bind = (Binding.prefix_name "prj_" name_def, []); - val sfp_bind = (Binding.prefix_name "sfp_" name_def, []); + val defl_bind = (Binding.prefix_name "defl_" name_def, []); (*instantiate class rep*) val lthy = thy @@ -113,34 +113,34 @@ Specification.definition (NONE, (emb_bind, emb_eqn)) lthy; val ((_, (_, prj_ldef)), lthy) = Specification.definition (NONE, (prj_bind, prj_eqn)) lthy; - val ((_, (_, sfp_ldef)), lthy) = - Specification.definition (NONE, (sfp_bind, sfp_eqn)) lthy; + val ((_, (_, defl_ldef)), lthy) = + Specification.definition (NONE, (defl_bind, defl_eqn)) lthy; val ctxt_thy = ProofContext.init_global (ProofContext.theory_of lthy); val emb_def = singleton (ProofContext.export lthy ctxt_thy) emb_ldef; val prj_def = singleton (ProofContext.export lthy ctxt_thy) prj_ldef; - val sfp_def = singleton (ProofContext.export lthy ctxt_thy) sfp_ldef; + val defl_def = singleton (ProofContext.export lthy ctxt_thy) defl_ldef; val type_definition_thm = MetaSimplifier.rewrite_rule (the_list (#set_def (#2 info))) (#type_definition (#2 info)); val typedef_thms = - [type_definition_thm, #below_def cpo_info, emb_def, prj_def, sfp_def]; + [type_definition_thm, #below_def cpo_info, emb_def, prj_def, defl_def]; val thy = lthy |> Class.prove_instantiation_instance (K (Tactic.rtac (@{thm typedef_rep_class} OF typedef_thms) 1)) |> Local_Theory.exit_global; (*other theorems*) - val sfp_thm' = Thm.transfer thy sfp_def; - val (SFP_thm, thy) = thy + val defl_thm' = Thm.transfer thy defl_def; + val (DEFL_thm, thy) = thy |> Sign.add_path (Binding.name_of name) |> Global_Theory.add_thm - ((Binding.prefix_name "SFP_" name, - Drule.zero_var_indexes (@{thm typedef_SFP} OF [sfp_thm'])), []) + ((Binding.prefix_name "DEFL_" name, + Drule.zero_var_indexes (@{thm typedef_DEFL} OF [defl_thm'])), []) ||> Sign.restore_naming thy; val rep_info = - { emb_def = emb_def, prj_def = prj_def, sfp_def = sfp_def, SFP = SFP_thm }; + { emb_def = emb_def, prj_def = prj_def, defl_def = defl_def, DEFL = DEFL_thm }; in ((info, cpo_info, pcpo_info, rep_info), thy) end diff -r a4b2971952f4 -r ad60d7311f43 src/HOLCF/UpperPD.thy --- a/src/HOLCF/UpperPD.thy Mon Oct 11 07:09:42 2010 -0700 +++ b/src/HOLCF/UpperPD.thy Mon Oct 11 08:32:09 2010 -0700 @@ -447,14 +447,14 @@ by (intro finite_deflation_upper_map finite_deflation_udom_approx) qed -definition upper_sfp :: "sfp \ sfp" -where "upper_sfp = sfp_fun1 upper_approx upper_map" +definition upper_defl :: "defl \ defl" +where "upper_defl = defl_fun1 upper_approx upper_map" -lemma cast_upper_sfp: - "cast\(upper_sfp\A) = +lemma cast_upper_defl: + "cast\(upper_defl\A) = udom_emb upper_approx oo upper_map\(cast\A) oo udom_prj upper_approx" -unfolding upper_sfp_def -apply (rule cast_sfp_fun1 [OF upper_approx]) +unfolding upper_defl_def +apply (rule cast_defl_fun1 [OF upper_approx]) apply (erule finite_deflation_upper_map) done @@ -468,7 +468,7 @@ "prj = upper_map\prj oo udom_prj upper_approx" definition - "sfp (t::'a upper_pd itself) = upper_sfp\SFP('a)" + "defl (t::'a upper_pd itself) = upper_defl\DEFL('a)" instance proof show "ep_pair emb (prj :: udom \ 'a upper_pd)" @@ -476,15 +476,15 @@ using ep_pair_udom [OF upper_approx] by (intro ep_pair_comp ep_pair_upper_map ep_pair_emb_prj) next - show "cast\SFP('a upper_pd) = emb oo (prj :: udom \ 'a upper_pd)" - unfolding emb_upper_pd_def prj_upper_pd_def sfp_upper_pd_def cast_upper_sfp - by (simp add: cast_SFP oo_def expand_cfun_eq upper_map_map) + show "cast\DEFL('a upper_pd) = emb oo (prj :: udom \ 'a upper_pd)" + unfolding emb_upper_pd_def prj_upper_pd_def defl_upper_pd_def cast_upper_defl + by (simp add: cast_DEFL oo_def expand_cfun_eq upper_map_map) qed end -lemma SFP_upper: "SFP('a upper_pd) = upper_sfp\SFP('a)" -by (rule sfp_upper_pd_def) +lemma DEFL_upper: "DEFL('a upper_pd) = upper_defl\DEFL('a)" +by (rule defl_upper_pd_def) subsection {* Join *} diff -r a4b2971952f4 -r ad60d7311f43 src/HOLCF/ex/Domain_Proofs.thy --- a/src/HOLCF/ex/Domain_Proofs.thy Mon Oct 11 07:09:42 2010 -0700 +++ b/src/HOLCF/ex/Domain_Proofs.thy Mon Oct 11 08:32:09 2010 -0700 @@ -28,50 +28,50 @@ text {* Start with the one-step non-recursive version *} definition - foo_bar_baz_sfpF :: - "sfp \ sfp \ sfp \ sfp \ sfp \ sfp \ sfp" + foo_bar_baz_deflF :: + "defl \ defl \ defl \ defl \ defl \ defl \ defl" where - "foo_bar_baz_sfpF = (\ a. Abs_CFun (\(t1, t2, t3). - ( ssum_sfp\SFP(one)\(sprod_sfp\(u_sfp\a)\(u_sfp\t2)) - , u_sfp\(cfun_sfp\t3\SFP(tr)) - , u_sfp\(cfun_sfp\(convex_sfp\t1)\SFP(tr)))))" + "foo_bar_baz_deflF = (\ a. Abs_CFun (\(t1, t2, t3). + ( ssum_defl\DEFL(one)\(sprod_defl\(u_defl\a)\(u_defl\t2)) + , u_defl\(cfun_defl\t3\DEFL(tr)) + , u_defl\(cfun_defl\(convex_defl\t1)\DEFL(tr)))))" -lemma foo_bar_baz_sfpF_beta: - "foo_bar_baz_sfpF\a\t = - ( ssum_sfp\SFP(one)\(sprod_sfp\(u_sfp\a)\(u_sfp\(fst (snd t)))) - , u_sfp\(cfun_sfp\(snd (snd t))\SFP(tr)) - , u_sfp\(cfun_sfp\(convex_sfp\(fst t))\SFP(tr)))" -unfolding foo_bar_baz_sfpF_def +lemma foo_bar_baz_deflF_beta: + "foo_bar_baz_deflF\a\t = + ( ssum_defl\DEFL(one)\(sprod_defl\(u_defl\a)\(u_defl\(fst (snd t)))) + , u_defl\(cfun_defl\(snd (snd t))\DEFL(tr)) + , u_defl\(cfun_defl\(convex_defl\(fst t))\DEFL(tr)))" +unfolding foo_bar_baz_deflF_def by (simp add: split_def) text {* Individual type combinators are projected from the fixed point. *} -definition foo_sfp :: "sfp \ sfp" -where "foo_sfp = (\ a. fst (fix\(foo_bar_baz_sfpF\a)))" +definition foo_defl :: "defl \ defl" +where "foo_defl = (\ a. fst (fix\(foo_bar_baz_deflF\a)))" -definition bar_sfp :: "sfp \ sfp" -where "bar_sfp = (\ a. fst (snd (fix\(foo_bar_baz_sfpF\a))))" +definition bar_defl :: "defl \ defl" +where "bar_defl = (\ a. fst (snd (fix\(foo_bar_baz_deflF\a))))" -definition baz_sfp :: "sfp \ sfp" -where "baz_sfp = (\ a. snd (snd (fix\(foo_bar_baz_sfpF\a))))" +definition baz_defl :: "defl \ defl" +where "baz_defl = (\ a. snd (snd (fix\(foo_bar_baz_deflF\a))))" lemma defl_apply_thms: - "foo_sfp\a = fst (fix\(foo_bar_baz_sfpF\a))" - "bar_sfp\a = fst (snd (fix\(foo_bar_baz_sfpF\a)))" - "baz_sfp\a = snd (snd (fix\(foo_bar_baz_sfpF\a)))" -unfolding foo_sfp_def bar_sfp_def baz_sfp_def by simp_all + "foo_defl\a = fst (fix\(foo_bar_baz_deflF\a))" + "bar_defl\a = fst (snd (fix\(foo_bar_baz_deflF\a)))" + "baz_defl\a = snd (snd (fix\(foo_bar_baz_deflF\a)))" +unfolding foo_defl_def bar_defl_def baz_defl_def by simp_all text {* Unfold rules for each combinator. *} -lemma foo_sfp_unfold: - "foo_sfp\a = ssum_sfp\SFP(one)\(sprod_sfp\(u_sfp\a)\(u_sfp\(bar_sfp\a)))" -unfolding defl_apply_thms by (subst fix_eq, simp add: foo_bar_baz_sfpF_beta) +lemma foo_defl_unfold: + "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_sfp_unfold: "bar_sfp\a = u_sfp\(cfun_sfp\(baz_sfp\a)\SFP(tr))" -unfolding defl_apply_thms by (subst fix_eq, simp add: foo_bar_baz_sfpF_beta) +lemma bar_defl_unfold: "bar_defl\a = u_defl\(cfun_defl\(baz_defl\a)\DEFL(tr))" +unfolding defl_apply_thms by (subst fix_eq, simp add: foo_bar_baz_deflF_beta) -lemma baz_sfp_unfold: "baz_sfp\a = u_sfp\(cfun_sfp\(convex_sfp\(foo_sfp\a))\SFP(tr))" -unfolding defl_apply_thms by (subst fix_eq, simp add: foo_bar_baz_sfpF_beta) +lemma baz_defl_unfold: "baz_defl\a = u_defl\(cfun_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 how the fixrec package works." @@ -82,14 +82,14 @@ text {* Use @{text pcpodef} with the appropriate type combinator. *} -pcpodef (open) 'a foo = "{x. x ::: foo_sfp\SFP('a)}" -by (simp_all add: adm_in_sfp) +pcpodef (open) 'a foo = "{x. x ::: foo_defl\DEFL('a)}" +by (simp_all add: adm_in_defl) -pcpodef (open) 'a bar = "{x. x ::: bar_sfp\SFP('a)}" -by (simp_all add: adm_in_sfp) +pcpodef (open) 'a bar = "{x. x ::: bar_defl\DEFL('a)}" +by (simp_all add: adm_in_defl) -pcpodef (open) 'a baz = "{x. x ::: baz_sfp\SFP('a)}" -by (simp_all add: adm_in_sfp) +pcpodef (open) 'a baz = "{x. x ::: baz_defl\DEFL('a)}" +by (simp_all add: adm_in_defl) text {* Prove rep instance using lemma @{text typedef_rep_class}. *} @@ -100,10 +100,10 @@ where "emb_foo \ (\ x. Rep_foo x)" definition prj_foo :: "udom \ 'a foo" -where "prj_foo \ (\ y. Abs_foo (cast\(foo_sfp\SFP('a))\y))" +where "prj_foo \ (\ y. Abs_foo (cast\(foo_defl\DEFL('a))\y))" -definition sfp_foo :: "'a foo itself \ sfp" -where "sfp_foo \ \a. foo_sfp\SFP('a)" +definition defl_foo :: "'a foo itself \ defl" +where "defl_foo \ \a. foo_defl\DEFL('a)" instance apply (rule typedef_rep_class) @@ -111,7 +111,7 @@ apply (rule below_foo_def) apply (rule emb_foo_def) apply (rule prj_foo_def) -apply (rule sfp_foo_def) +apply (rule defl_foo_def) done end @@ -123,10 +123,10 @@ where "emb_bar \ (\ x. Rep_bar x)" definition prj_bar :: "udom \ 'a bar" -where "prj_bar \ (\ y. Abs_bar (cast\(bar_sfp\SFP('a))\y))" +where "prj_bar \ (\ y. Abs_bar (cast\(bar_defl\DEFL('a))\y))" -definition sfp_bar :: "'a bar itself \ sfp" -where "sfp_bar \ \a. bar_sfp\SFP('a)" +definition defl_bar :: "'a bar itself \ defl" +where "defl_bar \ \a. bar_defl\DEFL('a)" instance apply (rule typedef_rep_class) @@ -134,7 +134,7 @@ apply (rule below_bar_def) apply (rule emb_bar_def) apply (rule prj_bar_def) -apply (rule sfp_bar_def) +apply (rule defl_bar_def) done end @@ -146,10 +146,10 @@ where "emb_baz \ (\ x. Rep_baz x)" definition prj_baz :: "udom \ 'a baz" -where "prj_baz \ (\ y. Abs_baz (cast\(baz_sfp\SFP('a))\y))" +where "prj_baz \ (\ y. Abs_baz (cast\(baz_defl\DEFL('a))\y))" -definition sfp_baz :: "'a baz itself \ sfp" -where "sfp_baz \ \a. baz_sfp\SFP('a)" +definition defl_baz :: "'a baz itself \ defl" +where "defl_baz \ \a. baz_defl\DEFL('a)" instance apply (rule typedef_rep_class) @@ -157,44 +157,44 @@ apply (rule below_baz_def) apply (rule emb_baz_def) apply (rule prj_baz_def) -apply (rule sfp_baz_def) +apply (rule defl_baz_def) done end -text {* Prove SFP rules using lemma @{text typedef_SFP}. *} +text {* Prove DEFL rules using lemma @{text typedef_DEFL}. *} -lemma SFP_foo: "SFP('a foo) = foo_sfp\SFP('a)" -apply (rule typedef_SFP) -apply (rule sfp_foo_def) +lemma DEFL_foo: "DEFL('a foo) = foo_defl\DEFL('a)" +apply (rule typedef_DEFL) +apply (rule defl_foo_def) done -lemma SFP_bar: "SFP('a bar) = bar_sfp\SFP('a)" -apply (rule typedef_SFP) -apply (rule sfp_bar_def) +lemma DEFL_bar: "DEFL('a bar) = bar_defl\DEFL('a)" +apply (rule typedef_DEFL) +apply (rule defl_bar_def) done -lemma SFP_baz: "SFP('a baz) = baz_sfp\SFP('a)" -apply (rule typedef_SFP) -apply (rule sfp_baz_def) +lemma DEFL_baz: "DEFL('a baz) = baz_defl\DEFL('a)" +apply (rule typedef_DEFL) +apply (rule defl_baz_def) done -text {* Prove SFP equations using type combinator unfold lemmas. *} +text {* Prove DEFL equations using type combinator unfold lemmas. *} -lemmas SFP_simps = - SFP_ssum SFP_sprod SFP_u SFP_cfun +lemmas DEFL_simps = + DEFL_ssum DEFL_sprod DEFL_u DEFL_cfun -lemma SFP_foo': "SFP('a foo) = SFP(one \ 'a\<^sub>\ \ ('a bar)\<^sub>\)" -unfolding SFP_foo SFP_bar SFP_baz SFP_simps -by (rule foo_sfp_unfold) +lemma DEFL_foo': "DEFL('a foo) = DEFL(one \ 'a\<^sub>\ \ ('a bar)\<^sub>\)" +unfolding DEFL_foo DEFL_bar DEFL_baz DEFL_simps +by (rule foo_defl_unfold) -lemma SFP_bar': "SFP('a bar) = SFP(('a baz \ tr)\<^sub>\)" -unfolding SFP_foo SFP_bar SFP_baz SFP_simps -by (rule bar_sfp_unfold) +lemma DEFL_bar': "DEFL('a bar) = DEFL(('a baz \ tr)\<^sub>\)" +unfolding DEFL_foo DEFL_bar DEFL_baz DEFL_simps +by (rule bar_defl_unfold) -lemma SFP_baz': "SFP('a baz) = SFP(('a foo convex_pd \ tr)\<^sub>\)" -unfolding SFP_foo SFP_bar SFP_baz SFP_simps SFP_convex -by (rule baz_sfp_unfold) +lemma DEFL_baz': "DEFL('a baz) = DEFL(('a foo convex_pd \ tr)\<^sub>\)" +unfolding DEFL_foo DEFL_bar DEFL_baz DEFL_simps DEFL_convex +by (rule baz_defl_unfold) (********************************************************************) @@ -223,36 +223,36 @@ text {* Prove isomorphism rules. *} lemma foo_abs_iso: "foo_rep\(foo_abs\x) = x" -by (rule domain_abs_iso [OF SFP_foo' foo_abs_def foo_rep_def]) +by (rule domain_abs_iso [OF DEFL_foo' foo_abs_def foo_rep_def]) lemma foo_rep_iso: "foo_abs\(foo_rep\x) = x" -by (rule domain_rep_iso [OF SFP_foo' foo_abs_def foo_rep_def]) +by (rule domain_rep_iso [OF DEFL_foo' foo_abs_def foo_rep_def]) lemma bar_abs_iso: "bar_rep\(bar_abs\x) = x" -by (rule domain_abs_iso [OF SFP_bar' bar_abs_def bar_rep_def]) +by (rule domain_abs_iso [OF DEFL_bar' bar_abs_def bar_rep_def]) lemma bar_rep_iso: "bar_abs\(bar_rep\x) = x" -by (rule domain_rep_iso [OF SFP_bar' bar_abs_def bar_rep_def]) +by (rule domain_rep_iso [OF DEFL_bar' bar_abs_def bar_rep_def]) lemma baz_abs_iso: "baz_rep\(baz_abs\x) = x" -by (rule domain_abs_iso [OF SFP_baz' baz_abs_def baz_rep_def]) +by (rule domain_abs_iso [OF DEFL_baz' baz_abs_def baz_rep_def]) lemma baz_rep_iso: "baz_abs\(baz_rep\x) = x" -by (rule domain_rep_iso [OF SFP_baz' baz_abs_def baz_rep_def]) +by (rule domain_rep_iso [OF DEFL_baz' baz_abs_def baz_rep_def]) text {* Prove isodefl rules using @{text isodefl_coerce}. *} lemma isodefl_foo_abs: "isodefl d t \ isodefl (foo_abs oo d oo foo_rep) t" -by (rule isodefl_abs_rep [OF SFP_foo' foo_abs_def foo_rep_def]) +by (rule isodefl_abs_rep [OF DEFL_foo' foo_abs_def foo_rep_def]) lemma isodefl_bar_abs: "isodefl d t \ isodefl (bar_abs oo d oo bar_rep) t" -by (rule isodefl_abs_rep [OF SFP_bar' bar_abs_def bar_rep_def]) +by (rule isodefl_abs_rep [OF DEFL_bar' bar_abs_def bar_rep_def]) lemma isodefl_baz_abs: "isodefl d t \ isodefl (baz_abs oo d oo baz_rep) t" -by (rule isodefl_abs_rep [OF SFP_baz' baz_abs_def baz_rep_def]) +by (rule isodefl_abs_rep [OF DEFL_baz' baz_abs_def baz_rep_def]) (********************************************************************) @@ -316,15 +316,15 @@ lemma isodefl_foo_bar_baz: assumes isodefl_d: "isodefl d t" shows - "isodefl (foo_map\d) (foo_sfp\t) \ - isodefl (bar_map\d) (bar_sfp\t) \ - isodefl (baz_map\d) (baz_sfp\t)" + "isodefl (foo_map\d) (foo_defl\t) \ + isodefl (bar_map\d) (bar_defl\t) \ + isodefl (baz_map\d) (baz_defl\t)" unfolding map_apply_thms defl_apply_thms 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 - foo_bar_baz_sfpF_beta + foo_bar_baz_deflF_beta fst_conv snd_conv) apply (elim conjE) apply (intro @@ -332,7 +332,7 @@ isodefl_foo_abs isodefl_bar_abs isodefl_baz_abs - isodefl_ssum isodefl_sprod isodefl_ID_SFP + isodefl_ssum isodefl_sprod isodefl_ID_DEFL isodefl_u isodefl_convex isodefl_cfun isodefl_d ) @@ -343,27 +343,27 @@ lemmas isodefl_bar = isodefl_foo_bar_baz [THEN conjunct2, THEN conjunct1] lemmas isodefl_baz = isodefl_foo_bar_baz [THEN conjunct2, THEN conjunct2] -text {* Prove map ID lemmas, using isodefl_SFP_imp_ID *} +text {* Prove map ID lemmas, using isodefl_DEFL_imp_ID *} lemma foo_map_ID: "foo_map\ID = ID" -apply (rule isodefl_SFP_imp_ID) -apply (subst SFP_foo) +apply (rule isodefl_DEFL_imp_ID) +apply (subst DEFL_foo) apply (rule isodefl_foo) -apply (rule isodefl_ID_SFP) +apply (rule isodefl_ID_DEFL) done lemma bar_map_ID: "bar_map\ID = ID" -apply (rule isodefl_SFP_imp_ID) -apply (subst SFP_bar) +apply (rule isodefl_DEFL_imp_ID) +apply (subst DEFL_bar) apply (rule isodefl_bar) -apply (rule isodefl_ID_SFP) +apply (rule isodefl_ID_DEFL) done lemma baz_map_ID: "baz_map\ID = ID" -apply (rule isodefl_SFP_imp_ID) -apply (subst SFP_baz) +apply (rule isodefl_DEFL_imp_ID) +apply (subst DEFL_baz) apply (rule isodefl_baz) -apply (rule isodefl_ID_SFP) +apply (rule isodefl_ID_DEFL) done (********************************************************************)