# HG changeset patch # User huffman # Date 1242073168 25200 # Node ID 7d6416f0d1e025bff5a0bbd7b17e25780cf52ca0 # Parent 2e9cc546e5b0e8cc0f3d854b55803639e0b32aff use Pair/fst/snd instead of cpair/cfst/csnd diff -r 2e9cc546e5b0 -r 7d6416f0d1e0 src/HOLCF/Ssum.thy --- a/src/HOLCF/Ssum.thy Mon May 11 12:41:46 2009 -0700 +++ b/src/HOLCF/Ssum.thy Mon May 11 13:19:28 2009 -0700 @@ -5,7 +5,7 @@ header {* The type of strict sums *} theory Ssum -imports Cprod Tr +imports Tr begin defaultsort pcpo @@ -14,8 +14,8 @@ pcpodef (Ssum) ('a, 'b) "++" (infixr "++" 10) = "{p :: tr \ ('a \ 'b). - (cfst\p \ TT \ csnd\(csnd\p) = \) \ - (cfst\p \ FF \ cfst\(csnd\p) = \)}" + (fst p \ TT \ snd (snd p) = \) \ + (fst p \ FF \ fst (snd p) = \)}" by simp_all instance "++" :: ("{finite_po,pcpo}", "{finite_po,pcpo}") finite_po @@ -33,28 +33,28 @@ definition sinl :: "'a \ ('a ++ 'b)" where - "sinl = (\ a. Abs_Ssum (\ _. TT)\a, a, \>)" + "sinl = (\ a. Abs_Ssum (strictify\(\ _. TT)\a, a, \))" definition sinr :: "'b \ ('a ++ 'b)" where - "sinr = (\ b. Abs_Ssum (\ _. FF)\b, \, b>)" + "sinr = (\ b. Abs_Ssum (strictify\(\ _. FF)\b, \, b))" -lemma sinl_Ssum: "(\ _. TT)\a, a, \> \ Ssum" +lemma sinl_Ssum: "(strictify\(\ _. TT)\a, a, \) \ Ssum" by (simp add: Ssum_def strictify_conv_if) -lemma sinr_Ssum: "(\ _. FF)\b, \, b> \ Ssum" +lemma sinr_Ssum: "(strictify\(\ _. FF)\b, \, b) \ Ssum" by (simp add: Ssum_def strictify_conv_if) -lemma sinl_Abs_Ssum: "sinl\a = Abs_Ssum (\ _. TT)\a, a, \>" +lemma sinl_Abs_Ssum: "sinl\a = Abs_Ssum (strictify\(\ _. TT)\a, a, \)" by (unfold sinl_def, simp add: cont_Abs_Ssum sinl_Ssum) -lemma sinr_Abs_Ssum: "sinr\b = Abs_Ssum (\ _. FF)\b, \, b>" +lemma sinr_Abs_Ssum: "sinr\b = Abs_Ssum (strictify\(\ _. FF)\b, \, b)" by (unfold sinr_def, simp add: cont_Abs_Ssum sinr_Ssum) -lemma Rep_Ssum_sinl: "Rep_Ssum (sinl\a) = (\ _. TT)\a, a, \>" +lemma Rep_Ssum_sinl: "Rep_Ssum (sinl\a) = (strictify\(\ _. TT)\a, a, \)" by (simp add: sinl_Abs_Ssum Abs_Ssum_inverse sinl_Ssum) -lemma Rep_Ssum_sinr: "Rep_Ssum (sinr\b) = (\ _. FF)\b, \, b>" +lemma Rep_Ssum_sinr: "Rep_Ssum (sinr\b) = (strictify\(\ _. FF)\b, \, b)" by (simp add: sinr_Abs_Ssum Abs_Ssum_inverse sinr_Ssum) subsection {* Properties of @{term sinl} and @{term sinr} *} @@ -139,12 +139,11 @@ lemma Exh_Ssum: "z = \ \ (\a. z = sinl\a \ a \ \) \ (\b. z = sinr\b \ b \ \)" -apply (rule_tac x=z in Abs_Ssum_induct) -apply (rule_tac p=y in cprodE, rename_tac t x) -apply (rule_tac p=x in cprodE, rename_tac a b) -apply (rule_tac p=t in trE) +apply (induct z rule: Abs_Ssum_induct) +apply (case_tac y, rename_tac t a b) +apply (case_tac t rule: trE) apply (rule disjI1) -apply (simp add: Ssum_def cpair_strict Abs_Ssum_strict) +apply (simp add: Ssum_def Abs_Ssum_strict) apply (rule disjI2, rule disjI1, rule_tac x=a in exI) apply (simp add: sinl_Abs_Ssum Ssum_def) apply (rule disjI2, rule disjI2, rule_tac x=b in exI) @@ -177,7 +176,7 @@ definition sscase :: "('a \ 'c) \ ('b \ 'c) \ ('a ++ 'b) \ 'c" where - "sscase = (\ f g s. (\. If t then f\x else g\y fi)\(Rep_Ssum s))" + "sscase = (\ f g s. (\(t, x, y). If t then f\x else g\y fi) (Rep_Ssum s))" translations "case s of XCONST sinl\x \ t1 | XCONST sinr\y \ t2" == "CONST sscase\(\ x. t1)\(\ y. t2)\s" @@ -187,8 +186,8 @@ "\(XCONST sinr\y). t" == "CONST sscase\\\(\ y. t)" lemma beta_sscase: - "sscase\f\g\s = (\. If t then f\x else g\y fi)\(Rep_Ssum s)" -unfolding sscase_def by (simp add: cont_Rep_Ssum cont2cont_LAM) + "sscase\f\g\s = (\(t, x, y). If t then f\x else g\y fi) (Rep_Ssum s)" +unfolding sscase_def by (simp add: cont_Rep_Ssum [THEN cont_compose]) lemma sscase1 [simp]: "sscase\f\g\\ = \" unfolding beta_sscase by (simp add: Rep_Ssum_strict) @@ -206,9 +205,9 @@ instance "++" :: (flat, flat) flat apply (intro_classes, clarify) -apply (rule_tac p=x in ssumE, simp) -apply (rule_tac p=y in ssumE, simp_all add: flat_below_iff) -apply (rule_tac p=y in ssumE, simp_all add: flat_below_iff) +apply (case_tac x, simp) +apply (case_tac y, simp_all add: flat_below_iff) +apply (case_tac y, simp_all add: flat_below_iff) done subsection {* Strict sum is a bifinite domain *}