# HG changeset patch # User huffman # Date 1232035910 28800 # Node ID 08824fad8879d467c92e18664749f6e30b63addf # Parent 247e4c816004b32e637943a9d8790eba7978e1f9 add strictness and compactness lemmas to Product_Cpo.thy diff -r 247e4c816004 -r 08824fad8879 src/HOLCF/Cprod.thy --- a/src/HOLCF/Cprod.thy Wed Jan 14 18:22:43 2009 -0800 +++ b/src/HOLCF/Cprod.thy Thu Jan 15 08:11:50 2009 -0800 @@ -69,10 +69,10 @@ by (simp add: cpair_eq_pair) lemma cpair_less [iff]: "( \ ) = (a \ a' \ b \ b')" -by (simp add: cpair_eq_pair less_cprod_def) +by (simp add: cpair_eq_pair) lemma cpair_defined_iff [iff]: "( = \) = (x = \ \ y = \)" -by (simp add: inst_cprod_pcpo cpair_eq_pair) +by (simp add: cpair_eq_pair) lemma cpair_strict [simp]: "\\, \\ = \" by simp @@ -97,10 +97,10 @@ by (simp add: cpair_eq_pair csnd_def cont_snd) lemma cfst_strict [simp]: "cfst\\ = \" -unfolding inst_cprod_pcpo2 by (rule cfst_cpair) +by (simp add: cfst_def) lemma csnd_strict [simp]: "csnd\\ = \" -unfolding inst_cprod_pcpo2 by (rule csnd_cpair) +by (simp add: csnd_def) lemma cpair_cfst_csnd: "\cfst\p, csnd\p\ = p" by (cases p rule: cprodE, simp) @@ -126,19 +126,10 @@ by (rule compactI, simp add: csnd_less_iff) lemma compact_cpair: "\compact x; compact y\ \ compact " -by (rule compactI, simp add: less_cprod) +by (simp add: cpair_eq_pair) lemma compact_cpair_iff [simp]: "compact = (compact x \ compact y)" -apply (safe intro!: compact_cpair) -apply (drule compact_cfst, simp) -apply (drule compact_csnd, simp) -done - -instance "*" :: (chfin, chfin) chfin -apply intro_classes -apply (erule compact_imp_max_in_chain) -apply (rule_tac p="\i. Y i" in cprodE, simp) -done +by (simp add: cpair_eq_pair) lemma lub_cprod2: "chain S \ range S <<| <\i. cfst\(S i), \i. csnd\(S i)>" diff -r 247e4c816004 -r 08824fad8879 src/HOLCF/Product_Cpo.thy --- a/src/HOLCF/Product_Cpo.thy Wed Jan 14 18:22:43 2009 -0800 +++ b/src/HOLCF/Product_Cpo.thy Thu Jan 15 08:11:50 2009 -0800 @@ -5,7 +5,7 @@ header {* The cpo of cartesian products *} theory Product_Cpo -imports Cont +imports Adm begin defaultsort cpo @@ -63,7 +63,7 @@ lemma prod_lessI: "\fst p \ fst q; snd p \ snd q\ \ p \ q" unfolding less_cprod_def by simp -lemma Pair_less_iff [simp]: "(a, b) \ (c, d) = (a \ c \ b \ d)" +lemma Pair_less_iff [simp]: "(a, b) \ (c, d) \ a \ c \ b \ d" unfolding less_cprod_def by simp text {* Pair @{text "(_,_)"} is monotone in both arguments *} @@ -149,6 +149,20 @@ lemma inst_cprod_pcpo: "\ = (\, \)" by (rule minimal_cprod [THEN UU_I, symmetric]) +lemma Pair_defined_iff [simp]: "(x, y) = \ \ x = \ \ y = \" +unfolding inst_cprod_pcpo by simp + +lemma fst_strict [simp]: "fst \ = \" +unfolding inst_cprod_pcpo by (rule fst_conv) + +lemma csnd_strict [simp]: "snd \ = \" +unfolding inst_cprod_pcpo by (rule snd_conv) + +lemma Pair_strict [simp]: "(\, \) = \" +by simp + +lemma split_strict [simp]: "split f \ = f \ \" +unfolding split_def by simp subsection {* Continuity of @{text "(_,_)"}, @{term fst}, @{term snd} *} @@ -201,4 +215,33 @@ lemmas cont2cont_snd [cont2cont] = cont2cont_compose [OF cont_snd] +subsection {* Compactness and chain-finiteness *} + +lemma fst_less_iff: "fst (x::'a \ 'b) \ y \ x \ (y, snd x)" +unfolding less_cprod_def by simp + +lemma snd_less_iff: "snd (x::'a \ 'b) \ y = x \ (fst x, y)" +unfolding less_cprod_def by simp + +lemma compact_fst: "compact x \ compact (fst x)" +by (rule compactI, simp add: fst_less_iff) + +lemma compact_snd: "compact x \ compact (snd x)" +by (rule compactI, simp add: snd_less_iff) + +lemma compact_Pair: "\compact x; compact y\ \ compact (x, y)" +by (rule compactI, simp add: less_cprod_def) + +lemma compact_Pair_iff [simp]: "compact (x, y) \ compact x \ compact y" +apply (safe intro!: compact_Pair) +apply (drule compact_fst, simp) +apply (drule compact_snd, simp) +done + +instance "*" :: (chfin, chfin) chfin +apply intro_classes +apply (erule compact_imp_max_in_chain) +apply (case_tac "\i. Y i", simp) +done + end