# HG changeset patch # User huffman # Date 1269326063 25200 # Node ID e6aec5d665f0978ac25317a9498310c2e484d016 # Parent 3da8db225c93a0ebb1cfec71f3769014607dfda9 completely remove constants cpair, cfst, csnd diff -r 3da8db225c93 -r e6aec5d665f0 src/HOLCF/Cprod.thy --- a/src/HOLCF/Cprod.thy Mon Mar 22 23:33:23 2010 -0700 +++ b/src/HOLCF/Cprod.thy Mon Mar 22 23:34:23 2010 -0700 @@ -22,150 +22,22 @@ lemma unit_when [simp]: "unit_when\a\u = a" by (simp add: unit_when_def) -subsection {* Continuous versions of constants *} - -definition - cpair :: "'a \ 'b \ ('a * 'b)" -- {* continuous pairing *} where - "cpair = (\ x y. (x, y))" - -definition - cfst :: "('a * 'b) \ 'a" where - "cfst = (\ p. fst p)" - -definition - csnd :: "('a * 'b) \ 'b" where - "csnd = (\ p. snd p)" +subsection {* Continuous version of split function *} definition csplit :: "('a \ 'b \ 'c) \ ('a * 'b) \ 'c" where "csplit = (\ f p. f\(fst p)\(snd p))" -syntax - "_ctuple" :: "['a, args] \ 'a * 'b" ("(1<_,/ _>)") - -syntax (xsymbols) - "_ctuple" :: "['a, args] \ 'a * 'b" ("(1\_,/ _\)") - translations - "\x, y, z\" == "\x, \y, z\\" - "\x, y\" == "CONST cpair\x\y" - -translations - "\(CONST cpair\x\y). t" == "CONST csplit\(\ x y. t)" - "\(CONST Pair x y). t" => "CONST csplit\(\ x y. t)" + "\(CONST Pair x y). t" == "CONST csplit\(\ x y. t)" subsection {* Convert all lemmas to the continuous versions *} -lemma cpair_eq_pair: " = (x, y)" -by (simp add: cpair_def cont_pair1 cont_pair2) - -lemma pair_eq_cpair: "(x, y) = " -by (simp add: cpair_def cont_pair1 cont_pair2) - -lemma inject_cpair: " = \ a = aa \ b = ba" -by (simp add: cpair_eq_pair) - -lemma cpair_eq [iff]: "( = ) = (a = a' \ b = b')" -by (simp add: cpair_eq_pair) - -lemma cpair_below [iff]: "( \ ) = (a \ a' \ b \ b')" -by (simp add: cpair_eq_pair) - -lemma cpair_defined_iff [iff]: "( = \) = (x = \ \ y = \)" -by (simp add: cpair_eq_pair) - -lemma cpair_strict [simp]: "\\, \\ = \" -by simp - -lemma inst_cprod_pcpo2: "\ = <\, \>" -by (rule cpair_strict [symmetric]) - -lemma defined_cpair_rev: - " = \ \ a = \ \ b = \" -by simp - -lemma Exh_Cprod2: "\a b. z = " -by (simp add: cpair_eq_pair) - -lemma cprodE: "\\x y. p = \ Q\ \ Q" -by (cut_tac Exh_Cprod2, auto) - -lemma cfst_cpair [simp]: "cfst\ = x" -by (simp add: cpair_eq_pair cfst_def) - -lemma csnd_cpair [simp]: "csnd\ = y" -by (simp add: cpair_eq_pair csnd_def) - -lemma cfst_strict [simp]: "cfst\\ = \" -by (simp add: cfst_def) - -lemma csnd_strict [simp]: "csnd\\ = \" -by (simp add: csnd_def) - -lemma cpair_cfst_csnd: "\cfst\p, csnd\p\ = p" -by (cases p rule: cprodE, simp) - -lemmas surjective_pairing_Cprod2 = cpair_cfst_csnd - -lemma below_cprod: "x \ y = (cfst\x \ cfst\y \ csnd\x \ csnd\y)" -by (simp add: below_prod_def cfst_def csnd_def) - -lemma eq_cprod: "(x = y) = (cfst\x = cfst\y \ csnd\x = csnd\y)" -by (auto simp add: po_eq_conv below_cprod) - -lemma cfst_below_iff: "cfst\x \ y = x \ x>" -by (simp add: below_cprod) - -lemma csnd_below_iff: "csnd\x \ y = x \ x, y>" -by (simp add: below_cprod) - -lemma compact_cfst: "compact x \ compact (cfst\x)" -by (rule compactI, simp add: cfst_below_iff) - -lemma compact_csnd: "compact x \ compact (csnd\x)" -by (rule compactI, simp add: csnd_below_iff) - -lemma compact_cpair: "\compact x; compact y\ \ compact " -by (simp add: cpair_eq_pair) - -lemma compact_cpair_iff [simp]: "compact = (compact x \ compact y)" -by (simp add: cpair_eq_pair) - -lemma lub_cprod2: - "chain S \ range S <<| <\i. cfst\(S i), \i. csnd\(S i)>" -apply (simp add: cpair_eq_pair cfst_def csnd_def) -apply (erule lub_cprod) -done - -lemma thelub_cprod2: - "chain S \ (\i. S i) = <\i. cfst\(S i), \i. csnd\(S i)>" -by (rule lub_cprod2 [THEN thelubI]) - lemma csplit1 [simp]: "csplit\f\\ = f\\\\" by (simp add: csplit_def) -lemma csplit2 [simp]: "csplit\f\ = f\x\y" -by (simp add: csplit_def cpair_def) - -lemma csplit3 [simp]: "csplit\cpair\z = z" -by (simp add: csplit_def cpair_def) - lemma csplit_Pair [simp]: "csplit\f\(x, y) = f\x\y" by (simp add: csplit_def) -lemmas Cprod_rews = cfst_cpair csnd_cpair csplit2 - -subsection {* Product type is a bifinite domain *} - -lemma approx_cpair [simp]: - "approx i\\x, y\ = \approx i\x, approx i\y\" -by (simp add: cpair_eq_pair) - -lemma cfst_approx: "cfst\(approx i\p) = approx i\(cfst\p)" -by (cases p rule: cprodE, simp) - -lemma csnd_approx: "csnd\(approx i\p) = approx i\(csnd\p)" -by (cases p rule: cprodE, simp) - end diff -r 3da8db225c93 -r e6aec5d665f0 src/HOLCF/Fixrec.thy --- a/src/HOLCF/Fixrec.thy Mon Mar 22 23:33:23 2010 -0700 +++ b/src/HOLCF/Fixrec.thy Mon Mar 22 23:34:23 2010 -0700 @@ -276,13 +276,13 @@ definition cpair_pat :: "('a, 'c) pat \ ('b, 'd) pat \ ('a \ 'b, 'c \ 'd) pat" where - "cpair_pat p1 p2 = (\\x, y\. - bind\(p1\x)\(\ a. bind\(p2\y)\(\ b. return\\a, b\)))" + "cpair_pat p1 p2 = (\(x, y). + bind\(p1\x)\(\ a. bind\(p2\y)\(\ b. return\(a, b))))" definition spair_pat :: "('a, 'c) pat \ ('b, 'd) pat \ ('a::pcpo \ 'b::pcpo, 'c \ 'd) pat" where - "spair_pat p1 p2 = (\(:x, y:). cpair_pat p1 p2\\x, y\)" + "spair_pat p1 p2 = (\(:x, y:). cpair_pat p1 p2\(x, y))" definition sinl_pat :: "('a, 'c) pat \ ('a::pcpo \ 'b::pcpo, 'c) pat" where @@ -310,7 +310,7 @@ text {* Parse translations (patterns) *} translations - "_pat (XCONST cpair\x\y)" => "CONST cpair_pat (_pat x) (_pat y)" + "_pat (XCONST Pair x y)" => "CONST cpair_pat (_pat x) (_pat y)" "_pat (XCONST spair\x\y)" => "CONST spair_pat (_pat x) (_pat y)" "_pat (XCONST sinl\x)" => "CONST sinl_pat (_pat x)" "_pat (XCONST sinr\x)" => "CONST sinr_pat (_pat x)" @@ -321,12 +321,12 @@ text {* CONST version is also needed for constructors with special syntax *} translations - "_pat (CONST cpair\x\y)" => "CONST cpair_pat (_pat x) (_pat y)" + "_pat (CONST Pair x y)" => "CONST cpair_pat (_pat x) (_pat y)" "_pat (CONST spair\x\y)" => "CONST spair_pat (_pat x) (_pat y)" text {* Parse translations (variables) *} translations - "_variable (XCONST cpair\x\y) r" => "_variable (_args x y) r" + "_variable (XCONST Pair x y) r" => "_variable (_args x y) r" "_variable (XCONST spair\x\y) r" => "_variable (_args x y) r" "_variable (XCONST sinl\x) r" => "_variable x r" "_variable (XCONST sinr\x) r" => "_variable x r" @@ -336,12 +336,12 @@ "_variable (XCONST ONE) r" => "_variable _noargs r" translations - "_variable (CONST cpair\x\y) r" => "_variable (_args x y) r" + "_variable (CONST Pair x y) r" => "_variable (_args x y) r" "_variable (CONST spair\x\y) r" => "_variable (_args x y) r" text {* Print translations *} translations - "CONST cpair\(_match p1 v1)\(_match p2 v2)" + "CONST Pair (_match p1 v1) (_match p2 v2)" <= "_match (CONST cpair_pat p1 p2) (_args v1 v2)" "CONST spair\(_match p1 v1)\(_match p2 v2)" <= "_match (CONST spair_pat p1 p2) (_args v1 v2)" @@ -353,20 +353,20 @@ "CONST ONE" <= "_match (CONST ONE_pat) _noargs" lemma cpair_pat1: - "branch p\r\x = \ \ branch (cpair_pat p q)\(csplit\r)\\x, y\ = \" + "branch p\r\x = \ \ branch (cpair_pat p q)\(csplit\r)\(x, y) = \" apply (simp add: branch_def cpair_pat_def) apply (rule_tac p="p\x" in maybeE, simp_all) done lemma cpair_pat2: - "branch p\r\x = fail \ branch (cpair_pat p q)\(csplit\r)\\x, y\ = fail" + "branch p\r\x = fail \ branch (cpair_pat p q)\(csplit\r)\(x, y) = fail" apply (simp add: branch_def cpair_pat_def) apply (rule_tac p="p\x" in maybeE, simp_all) done lemma cpair_pat3: "branch p\r\x = return\s \ - branch (cpair_pat p q)\(csplit\r)\\x, y\ = branch q\s\y" + branch (cpair_pat p q)\(csplit\r)\(x, y) = branch q\s\y" apply (simp add: branch_def cpair_pat_def) apply (rule_tac p="p\x" in maybeE, simp_all) apply (rule_tac p="q\y" in maybeE, simp_all) @@ -379,7 +379,7 @@ "branch (spair_pat p1 p2)\r\\ = \" "\x \ \; y \ \\ \ branch (spair_pat p1 p2)\r\(:x, y:) = - branch (cpair_pat p1 p2)\r\\x, y\" + branch (cpair_pat p1 p2)\r\(x, y)" by (simp_all add: branch_def spair_pat_def) lemma sinl_pat [simp]: @@ -425,7 +425,7 @@ definition as_pat :: "('a \ 'b maybe) \ 'a \ ('a \ 'b) maybe" where - "as_pat p = (\ x. bind\(p\x)\(\ a. return\\x, a\))" + "as_pat p = (\ x. bind\(p\x)\(\ a. return\(x, a)))" definition lazy_pat :: "('a \ 'b::pcpo maybe) \ ('a \ 'b maybe)" where @@ -516,7 +516,6 @@ by (simp_all add: match_UU_def) lemma match_cpair_simps [simp]: - "match_cpair\\x, y\\k = k\x\y" "match_cpair\(x, y)\k = k\x\y" by (simp_all add: match_cpair_def) @@ -602,7 +601,6 @@ (@{const_name sinl}, @{const_name match_sinl}), (@{const_name sinr}, @{const_name match_sinr}), (@{const_name spair}, @{const_name match_spair}), - (@{const_name cpair}, @{const_name match_cpair}), (@{const_name Pair}, @{const_name match_cpair}), (@{const_name ONE}, @{const_name match_ONE}), (@{const_name TT}, @{const_name match_TT}), diff -r 3da8db225c93 -r e6aec5d665f0 src/HOLCF/HOLCF.thy --- a/src/HOLCF/HOLCF.thy Mon Mar 22 23:33:23 2010 -0700 +++ b/src/HOLCF/HOLCF.thy Mon Mar 22 23:34:23 2010 -0700 @@ -50,10 +50,6 @@ lemmas not_Iup_less = not_Iup_below lemmas Iup_less = Iup_below lemmas up_less = up_below -lemmas cpair_less = cpair_below -lemmas less_cprod = below_cprod -lemmas cfst_less_iff = cfst_below_iff -lemmas csnd_less_iff = csnd_below_iff lemmas Def_inject_less_eq = Def_below_Def lemmas Def_less_is_eq = Def_below_iff lemmas spair_less_iff = spair_below_iff