diff -r 7af6723ad741 -r 270ec60cc9e8 src/HOLCF/Ssum.thy --- a/src/HOLCF/Ssum.thy Fri Jul 08 02:38:05 2005 +0200 +++ b/src/HOLCF/Ssum.thy Fri Jul 08 02:39:53 2005 +0200 @@ -25,7 +25,7 @@ "++" :: "[type, type] => type" ("(_ \/ _)" [21, 20] 20) lemma UU_Abs_Ssum: "\ = Abs_Ssum <\, \>" -by (simp add: Abs_Ssum_strict inst_cprod_pcpo2 [symmetric]) +by (simp add: Abs_Ssum_strict cpair_strict) subsection {* Definitions of constructors *} @@ -52,47 +52,46 @@ by (unfold sinr_def, simp add: cont_Abs_Ssum Abs_Ssum_inverse Ssum_def) lemma sinl_strict [simp]: "sinl\\ = \" -by (simp add: sinl_Abs_Ssum UU_Abs_Ssum) +by (simp add: sinl_Abs_Ssum Abs_Ssum_strict cpair_strict) lemma sinr_strict [simp]: "sinr\\ = \" -by (simp add: sinr_Abs_Ssum UU_Abs_Ssum) +by (simp add: sinr_Abs_Ssum Abs_Ssum_strict cpair_strict) -lemma noteq_sinlsinr: "sinl\a = sinr\b \ a = \ \ b = \" -apply (simp add: sinl_Abs_Ssum sinr_Abs_Ssum) -apply (simp add: Abs_Ssum_inject Ssum_def) -done - -lemma sinl_inject: "sinl\x = sinl\y \ x = y" +lemma sinl_eq [simp]: "(sinl\x = sinl\y) = (x = y)" by (simp add: sinl_Abs_Ssum Abs_Ssum_inject Ssum_def) -lemma sinr_inject: "sinr\x = sinr\y \ x = y" +lemma sinr_eq [simp]: "(sinr\x = sinr\y) = (x = y)" by (simp add: sinr_Abs_Ssum Abs_Ssum_inject Ssum_def) -lemma sinl_eq: "(sinl\x = sinl\y) = (x = y)" -by (simp add: sinl_Abs_Ssum Abs_Ssum_inject Ssum_def) +lemma sinl_inject: "sinl\x = sinl\y \ x = y" +by (rule sinl_eq [THEN iffD1]) -lemma sinr_eq: "(sinr\x = sinr\y) = (x = y)" -by (simp add: sinr_Abs_Ssum Abs_Ssum_inject Ssum_def) +lemma sinr_inject: "sinr\x = sinr\y \ x = y" +by (rule sinr_eq [THEN iffD1]) -lemma sinl_defined [simp]: "x \ \ \ sinl\x \ \" -apply (erule contrapos_nn) -apply (rule sinl_inject) -apply auto +lemma sinl_defined_iff [simp]: "(sinl\x = \) = (x = \)" +apply (rule sinl_strict [THEN subst]) +apply (rule sinl_eq) done -lemma sinr_defined [simp]: "x \ \ \ sinr\x \ \" -apply (erule contrapos_nn) -apply (rule sinr_inject) -apply auto +lemma sinr_defined_iff [simp]: "(sinr\x = \) = (x = \)" +apply (rule sinr_strict [THEN subst]) +apply (rule sinr_eq) done +lemma sinl_defined [intro!]: "x \ \ \ sinl\x \ \" +by simp + +lemma sinr_defined [intro!]: "x \ \ \ sinr\x \ \" +by simp + subsection {* Case analysis *} lemma Exh_Ssum1: "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) apply (simp add: sinl_Abs_Ssum sinr_Abs_Ssum UU_Abs_Ssum) -apply (rule_tac x=z in Abs_Ssum_cases) -apply (rule_tac p=y in cprodE) apply (auto simp add: Ssum_def) done @@ -112,32 +111,38 @@ subsection {* Ordering properties of @{term sinl} and @{term sinr} *} -lemma sinl_less: "(sinl\x \ sinl\y) = (x \ y)" +lemma sinl_less [simp]: "(sinl\x \ sinl\y) = (x \ y)" by (simp add: less_Ssum_def Rep_Ssum_sinl cpair_less) -lemma sinr_less: "(sinr\x \ sinr\y) = (x \ y)" +lemma sinr_less [simp]: "(sinr\x \ sinr\y) = (x \ y)" by (simp add: less_Ssum_def Rep_Ssum_sinr cpair_less) -lemma sinl_less_sinr: "(sinl\x \ sinr\y) = (x = \)" +lemma sinl_less_sinr [simp]: "(sinl\x \ sinr\y) = (x = \)" +by (simp add: less_Ssum_def Rep_Ssum_sinl Rep_Ssum_sinr cpair_less eq_UU_iff) + +lemma sinr_less_sinl [simp]: "(sinr\x \ sinl\y) = (x = \)" by (simp add: less_Ssum_def Rep_Ssum_sinl Rep_Ssum_sinr cpair_less eq_UU_iff) -lemma sinr_less_sinl: "(sinr\x \ sinl\y) = (x = \)" -by (simp add: less_Ssum_def Rep_Ssum_sinl Rep_Ssum_sinr cpair_less eq_UU_iff) +lemma sinl_eq_sinr [simp]: "(sinl\x = sinr\y) = (x = \ \ y = \)" +by (simp add: po_eq_conv) + +lemma sinr_eq_sinl [simp]: "(sinr\x = sinl\y) = (x = \ \ y = \)" +by (simp add: po_eq_conv) subsection {* Chains of strict sums *} lemma less_sinlD: "p \ sinl\x \ \y. p = sinl\y \ y \ x" apply (rule_tac p=p in ssumE) apply (rule_tac x="\" in exI, simp) -apply (simp add: sinl_less sinl_eq) -apply (simp add: sinr_less_sinl) +apply simp +apply simp done lemma less_sinrD: "p \ sinr\x \ \y. p = sinr\y \ y \ x" apply (rule_tac p=p in ssumE) apply (rule_tac x="\" in exI, simp) -apply (simp add: sinl_less_sinr) -apply (simp add: sinr_less sinr_eq) +apply simp +apply simp done lemma ssum_chain_lemma: @@ -151,7 +156,7 @@ apply (erule cont_Rep_Ssum [THEN ch2ch_cont]) apply (rule ext, drule_tac x=i in is_ub_thelub, simp) apply (drule less_sinlD, clarify) - apply (simp add: sinl_eq Rep_Ssum_sinl) + apply (simp add: Rep_Ssum_sinl) apply (rule disjI2) apply (rule_tac x="\i. csnd\(Rep_Ssum (Y i))" in exI) apply (rule conjI) @@ -159,7 +164,7 @@ apply (erule cont_Rep_Ssum [THEN ch2ch_cont]) apply (rule ext, drule_tac x=i in is_ub_thelub, simp) apply (drule less_sinrD, clarify) - apply (simp add: sinr_eq Rep_Ssum_sinr) + apply (simp add: Rep_Ssum_sinr) done subsection {* Definitions of constants *}