# HG changeset patch # User haftmann # Date 1310885106 -7200 # Node ID 01b13e9a1a7eb90b9841ef117d538f4b4cbd5174 # Parent f7f8cf0a1536e708405925631c7fa41bdfc7a4d1# Parent f1d23df1adde923277343efc18feabeb275d276b merged diff -r f7f8cf0a1536 -r 01b13e9a1a7e src/HOL/Complete_Lattice.thy --- a/src/HOL/Complete_Lattice.thy Sat Jul 16 22:17:27 2011 +0200 +++ b/src/HOL/Complete_Lattice.thy Sun Jul 17 08:45:06 2011 +0200 @@ -108,20 +108,6 @@ with `a \ b` show "a \ \B" by auto qed -lemma top_le: - "\ \ x \ x = \" - by (rule antisym) auto - -lemma le_bot: - "x \ \ \ x = \" - by (rule antisym) auto - -lemma not_less_bot [simp]: "\ (x \ \)" - using bot_least [of x] by (auto simp: le_less) - -lemma not_top_less [simp]: "\ (\ \ x)" - using top_greatest [of x] by (auto simp: le_less) - lemma Sup_upper2: "u \ A \ v \ u \ v \ \A" using Sup_upper[of u A] by auto @@ -222,6 +208,12 @@ lemma SUP_commute: "(\i\A. \j\B. f i j) = (\j\B. \i\A. f i j)" by (iprover intro: SUP_leI le_SUPI order_trans antisym) +lemma INFI_insert: "(\x\insert a A. B x) = B a \ INFI A B" + by (simp add: INFI_def Inf_insert) + +lemma SUPR_insert: "(\x\insert a A. B x) = B a \ SUPR A B" + by (simp add: SUPR_def Sup_insert) + end lemma Inf_less_iff: @@ -256,7 +248,7 @@ "\A \ (\x\A. x)" instance proof -qed (auto simp add: Inf_bool_def Sup_bool_def le_bool_def) +qed (auto simp add: Inf_bool_def Sup_bool_def) end @@ -475,16 +467,20 @@ lemma INT_I [intro!]: "(\x. x \ A \ b \ B x) \ b \ (\x\A. B x)" by (unfold INTER_def) blast -lemma INT_D [elim, Pure.elim]: "b : (\x\A. B x) \ a:A \ b: B a" +lemma INT_D [elim, Pure.elim]: "b \ (\x\A. B x) \ a \ A \ b \ B a" by auto -lemma INT_E [elim]: "b : (\x\A. B x) \ (b: B a \ R) \ (a~:A \ R) \ R" - -- {* "Classical" elimination -- by the Excluded Middle on @{prop "a:A"}. *} +lemma INT_E [elim]: "b \ (\x\A. B x) \ (b \ B a \ R) \ (a \ A \ R) \ R" + -- {* "Classical" elimination -- by the Excluded Middle on @{prop "a\A"}. *} by (unfold INTER_def) blast +lemma (in complete_lattice) INFI_cong: + "A = B \ (\x. x \ B \ C x = D x) \ (\x\A. C x) = (\x\B. D x)" + by (simp add: INFI_def image_def) + lemma INT_cong [cong]: - "A = B \ (\x. x:B \ C x = D x) \ (\x\A. C x) = (\x\B. D x)" - by (simp add: INTER_def) + "A = B \ (\x. x \ B \ C x = D x) \ (\x\A. C x) = (\x\B. D x)" + by (fact INFI_cong) lemma Collect_ball_eq: "{x. \y\A. P x y} = (\y\A. {x. P x y})" by blast @@ -498,17 +494,31 @@ lemma INT_greatest: "(\x. x \ A \ C \ B x) \ C \ (\x\A. B x)" by (fact le_INFI) +lemma (in complete_lattice) INFI_empty: + "(\x\{}. B x) = \" + by (simp add: INFI_def) + lemma INT_empty [simp]: "(\x\{}. B x) = UNIV" - by blast + by (fact INFI_empty) + +lemma (in complete_lattice) INFI_absorb: + assumes "k \ I" + shows "A k \ (\i\I. A i) = (\i\I. A i)" +proof - + from assms obtain J where "I = insert k J" by blast + then show ?thesis by (simp add: INFI_insert) +qed lemma INT_absorb: "k \ I \ A k \ (\i\I. A i) = (\i\I. A i)" - by blast + by (fact INFI_absorb) -lemma INT_subset_iff: "(B \ (\i\I. A i)) = (\i\I. B \ A i)" +lemma INT_subset_iff: "B \ (\i\I. A i) \ (\i\I. B \ A i)" by (fact le_INF_iff) lemma INT_insert [simp]: "(\x \ insert a A. B x) = B a \ INTER A B" - by blast + by (fact INFI_insert) + +-- {* continue generalization from here *} lemma INT_Un: "(\i \ A \ B. M i) = (\i \ A. M i) \ (\i\B. M i)" by blast @@ -524,10 +534,10 @@ -- {* Look: it has an \emph{existential} quantifier *} by blast -lemma INTER_UNIV_conv[simp]: +lemma INTER_UNIV_conv [simp]: "(UNIV = (\x\A. B x)) = (\x\A. B x = UNIV)" "((\x\A. B x) = UNIV) = (\x\A. B x = UNIV)" -by blast+ + by blast+ lemma INT_bool_eq: "(\b. A b) = (A True \ A False)" by (auto intro: bool_induct) @@ -672,23 +682,23 @@ "\(B ` A) = (\x\A. B x)" by (rule sym) (fact UNION_eq_Union_image) -lemma UN_iff [simp]: "(b: (\x\A. B x)) = (\x\A. b: B x)" +lemma UN_iff [simp]: "(b \ (\x\A. B x)) = (\x\A. b \ B x)" by (unfold UNION_def) blast -lemma UN_I [intro]: "a:A \ b: B a \ b: (\x\A. B x)" +lemma UN_I [intro]: "a \ A \ b \ B a \ b \ (\x\A. B x)" -- {* The order of the premises presupposes that @{term A} is rigid; @{term b} may be flexible. *} by auto -lemma UN_E [elim!]: "b : (\x\A. B x) \ (\x. x:A \ b: B x \ R) \ R" +lemma UN_E [elim!]: "b \ (\x\A. B x) \ (\x. x\A \ b \ B x \ R) \ R" by (unfold UNION_def) blast lemma UN_cong [cong]: - "A = B \ (\x. x:B \ C x = D x) \ (\x\A. C x) = (\x\B. D x)" + "A = B \ (\x. x \ B \ C x = D x) \ (\x\A. C x) = (\x\B. D x)" by (simp add: UNION_def) lemma strong_UN_cong: - "A = B \ (\x. x:B =simp=> C x = D x) \ (\x\A. C x) = (\x\B. D x)" + "A = B \ (\x. x \ B =simp=> C x = D x) \ (\x\A. C x) = (\x\B. D x)" by (simp add: UNION_def simp_implies_def) lemma image_eq_UN: "f ` A = (\x\A. {f x})" @@ -838,84 +848,84 @@ lemma UN_simps [simp]: "\a B C. (\x\C. insert a (B x)) = (if C={} then {} else insert a (\x\C. B x))" - "\A B C. (\x\C. A x \ B) = ((if C={} then {} else (\x\C. A x) \ B))" - "\A B C. (\x\C. A \ B x) = ((if C={} then {} else A \ (\x\C. B x)))" - "\A B C. (\x\C. A x \ B) = ((\x\C. A x) \B)" - "\A B C. (\x\C. A \ B x) = (A \(\x\C. B x))" - "\A B C. (\x\C. A x - B) = ((\x\C. A x) - B)" - "\A B C. (\x\C. A - B x) = (A - (\x\C. B x))" - "\A B. (UN x: \A. B x) = (\y\A. UN x:y. B x)" - "\A B C. (UN z: UNION A B. C z) = (\x\A. UN z: B(x). C z)" + "\A B C. (\x\C. A x \ B) = ((if C={} then {} else (\x\C. A x) \ B))" + "\A B C. (\x\C. A \ B x) = ((if C={} then {} else A \ (\x\C. B x)))" + "\A B C. (\x\C. A x \ B) = ((\x\C. A x) \B)" + "\A B C. (\x\C. A \ B x) = (A \(\x\C. B x))" + "\A B C. (\x\C. A x - B) = ((\x\C. A x) - B)" + "\A B C. (\x\C. A - B x) = (A - (\x\C. B x))" + "\A B. (\x\\A. B x) = (\y\A. \x\y. B x)" + "\A B C. (\z\UNION A B. C z) = (\x\A. \z\B x. C z)" "\A B f. (\x\f`A. B x) = (\a\A. B (f a))" by auto lemma INT_simps [simp]: "\A B C. (\x\C. A x \ B) = (if C={} then UNIV else (\x\C. A x) \B)" "\A B C. (\x\C. A \ B x) = (if C={} then UNIV else A \(\x\C. B x))" - "\A B C. (\x\C. A x - B) = (if C={} then UNIV else (\x\C. A x) - B)" - "\A B C. (\x\C. A - B x) = (if C={} then UNIV else A - (\x\C. B x))" + "\A B C. (\x\C. A x - B) = (if C={} then UNIV else (\x\C. A x) - B)" + "\A B C. (\x\C. A - B x) = (if C={} then UNIV else A - (\x\C. B x))" "\a B C. (\x\C. insert a (B x)) = insert a (\x\C. B x)" - "\A B C. (\x\C. A x \ B) = ((\x\C. A x) \ B)" - "\A B C. (\x\C. A \ B x) = (A \ (\x\C. B x))" - "\A B. (INT x: \A. B x) = (\y\A. INT x:y. B x)" - "\A B C. (INT z: UNION A B. C z) = (\x\A. INT z: B(x). C z)" - "\A B f. (INT x:f`A. B x) = (INT a:A. B (f a))" + "\A B C. (\x\C. A x \ B) = ((\x\C. A x) \ B)" + "\A B C. (\x\C. A \ B x) = (A \ (\x\C. B x))" + "\A B. (\x\\A. B x) = (\y\A. \x\y. B x)" + "\A B C. (\z\UNION A B. C z) = (\x\A. \z\B x. C z)" + "\A B f. (\x\f`A. B x) = (\a\A. B (f a))" by auto lemma ball_simps [simp,no_atp]: - "\A P Q. (\x\A. P x | Q) = ((\x\A. P x) | Q)" - "\A P Q. (\x\A. P | Q x) = (P | (\x\A. Q x))" - "\A P Q. (\x\A. P --> Q x) = (P --> (\x\A. Q x))" - "\A P Q. (\x\A. P x --> Q) = ((\x\A. P x) --> Q)" - "\P. (\ x\{}. P x) = True" - "\P. (\ x\UNIV. P x) = (ALL x. P x)" - "\a B P. (\ x\insert a B. P x) = (P a & (\ x\B. P x))" - "\A P. (\ x\\A. P x) = (\y\A. \ x\y. P x)" - "\A B P. (\ x\ UNION A B. P x) = (\a\A. \ x\ B a. P x)" - "\P Q. (\ x\Collect Q. P x) = (ALL x. Q x --> P x)" - "\A P f. (\ x\f`A. P x) = (\x\A. P (f x))" - "\A P. (~(\x\A. P x)) = (\x\A. ~P x)" + "\A P Q. (\x\A. P x \ Q) \ ((\x\A. P x) \ Q)" + "\A P Q. (\x\A. P \ Q x) \ (P \ (\x\A. Q x))" + "\A P Q. (\x\A. P \ Q x) \ (P \ (\x\A. Q x))" + "\A P Q. (\x\A. P x \ Q) \ ((\x\A. P x) \ Q)" + "\P. (\x\{}. P x) \ True" + "\P. (\x\UNIV. P x) \ (\x. P x)" + "\a B P. (\x\insert a B. P x) \ (P a \ (\x\B. P x))" + "\A P. (\x\\A. P x) \ (\y\A. \x\y. P x)" + "\A B P. (\x\ UNION A B. P x) = (\a\A. \x\ B a. P x)" + "\P Q. (\x\Collect Q. P x) \ (\x. Q x \ P x)" + "\A P f. (\x\f`A. P x) \ (\x\A. P (f x))" + "\A P. (\ (\x\A. P x)) \ (\x\A. \ P x)" by auto lemma bex_simps [simp,no_atp]: - "\A P Q. (\x\A. P x & Q) = ((\x\A. P x) & Q)" - "\A P Q. (\x\A. P & Q x) = (P & (\x\A. Q x))" - "\P. (EX x:{}. P x) = False" - "\P. (EX x:UNIV. P x) = (EX x. P x)" - "\a B P. (EX x:insert a B. P x) = (P(a) | (EX x:B. P x))" - "\A P. (EX x:\A. P x) = (EX y:A. EX x:y. P x)" - "\A B P. (EX x: UNION A B. P x) = (EX a:A. EX x:B a. P x)" - "\P Q. (EX x:Collect Q. P x) = (EX x. Q x & P x)" - "\A P f. (EX x:f`A. P x) = (\x\A. P (f x))" - "\A P. (~(\x\A. P x)) = (\x\A. ~P x)" + "\A P Q. (\x\A. P x \ Q) \ ((\x\A. P x) \ Q)" + "\A P Q. (\x\A. P \ Q x) \ (P \ (\x\A. Q x))" + "\P. (\x\{}. P x) \ False" + "\P. (\x\UNIV. P x) \ (\x. P x)" + "\a B P. (\x\insert a B. P x) \ (P a | (\x\B. P x))" + "\A P. (\x\\A. P x) \ (\y\A. \x\y. P x)" + "\A B P. (\x\UNION A B. P x) \ (\a\A. \x\B a. P x)" + "\P Q. (\x\Collect Q. P x) \ (\x. Q x \ P x)" + "\A P f. (\x\f`A. P x) \ (\x\A. P (f x))" + "\A P. (\(\x\A. P x)) \ (\x\A. \ P x)" by auto text {* \medskip Maxiscoping: pulling out big Unions and Intersections. *} lemma UN_extend_simps: "\a B C. insert a (\x\C. B x) = (if C={} then {a} else (\x\C. insert a (B x)))" - "\A B C. (\x\C. A x) \ B = (if C={} then B else (\x\C. A x \ B))" - "\A B C. A \ (\x\C. B x) = (if C={} then A else (\x\C. A \ B x))" - "\A B C. ((\x\C. A x) \B) = (\x\C. A x \ B)" - "\A B C. (A \(\x\C. B x)) = (\x\C. A \ B x)" + "\A B C. (\x\C. A x) \ B = (if C={} then B else (\x\C. A x \ B))" + "\A B C. A \ (\x\C. B x) = (if C={} then A else (\x\C. A \ B x))" + "\A B C. ((\x\C. A x) \ B) = (\x\C. A x \ B)" + "\A B C. (A \ (\x\C. B x)) = (\x\C. A \ B x)" "\A B C. ((\x\C. A x) - B) = (\x\C. A x - B)" "\A B C. (A - (\x\C. B x)) = (\x\C. A - B x)" - "\A B. (\y\A. UN x:y. B x) = (UN x: \A. B x)" - "\A B C. (\x\A. UN z: B(x). C z) = (UN z: UNION A B. C z)" + "\A B. (\y\A. \x\y. B x) = (\x\\A. B x)" + "\A B C. (\x\A. \z\B x. C z) = (\z\UNION A B. C z)" "\A B f. (\a\A. B (f a)) = (\x\f`A. B x)" by auto lemma INT_extend_simps: - "\A B C. (\x\C. A x) \B = (if C={} then B else (\x\C. A x \ B))" - "\A B C. A \(\x\C. B x) = (if C={} then A else (\x\C. A \ B x))" - "\A B C. (\x\C. A x) - B = (if C={} then UNIV - B else (\x\C. A x - B))" - "\A B C. A - (\x\C. B x) = (if C={} then A else (\x\C. A - B x))" + "\A B C. (\x\C. A x) \ B = (if C={} then B else (\x\C. A x \ B))" + "\A B C. A \ (\x\C. B x) = (if C={} then A else (\x\C. A \ B x))" + "\A B C. (\x\C. A x) - B = (if C={} then UNIV - B else (\x\C. A x - B))" + "\A B C. A - (\x\C. B x) = (if C={} then A else (\x\C. A - B x))" "\a B C. insert a (\x\C. B x) = (\x\C. insert a (B x))" - "\A B C. ((\x\C. A x) \ B) = (\x\C. A x \ B)" - "\A B C. A \ (\x\C. B x) = (\x\C. A \ B x)" - "\A B. (\y\A. INT x:y. B x) = (INT x: \A. B x)" - "\A B C. (\x\A. INT z: B(x). C z) = (INT z: UNION A B. C z)" - "\A B f. (INT a:A. B (f a)) = (INT x:f`A. B x)" + "\A B C. ((\x\C. A x) \ B) = (\x\C. A x \ B)" + "\A B C. A \ (\x\C. B x) = (\x\C. A \ B x)" + "\A B. (\y\A. \x\y. B x) = (\x\\A. B x)" + "\A B C. (\x\A. \z\B x. C z) = (\z\UNION A B. C z)" + "\A B f. (\a\A. B (f a)) = (\x\f`A. B x)" by auto diff -r f7f8cf0a1536 -r 01b13e9a1a7e src/HOL/Orderings.thy --- a/src/HOL/Orderings.thy Sat Jul 16 22:17:27 2011 +0200 +++ b/src/HOL/Orderings.thy Sun Jul 17 08:45:06 2011 +0200 @@ -1084,35 +1084,54 @@ subsection {* (Unique) top and bottom elements *} class bot = order + - fixes bot :: 'a - assumes bot_least [simp]: "bot \ x" + fixes bot :: 'a ("\") + assumes bot_least [simp]: "\ \ a" begin +lemma le_bot: + "a \ \ \ a = \" + by (auto intro: antisym) + lemma bot_unique: - "a \ bot \ a = bot" - by (auto simp add: intro: antisym) + "a \ \ \ a = \" + by (auto intro: antisym) + +lemma not_less_bot [simp]: + "\ (a < \)" + using bot_least [of a] by (auto simp: le_less) lemma bot_less: - "a \ bot \ bot < a" + "a \ \ \ \ < a" by (auto simp add: less_le_not_le intro!: antisym) end class top = order + - fixes top :: 'a - assumes top_greatest [simp]: "x \ top" + fixes top :: 'a ("\") + assumes top_greatest [simp]: "a \ \" begin +lemma top_le: + "\ \ a \ a = \" + by (rule antisym) auto + lemma top_unique: - "top \ a \ a = top" - by (auto simp add: intro: antisym) + "\ \ a \ a = \" + by (auto intro: antisym) + +lemma not_top_less [simp]: "\ (\ < a)" + using top_greatest [of a] by (auto simp: le_less) lemma less_top: - "a \ top \ a < top" + "a \ \ \ a < \" by (auto simp add: less_le_not_le intro!: antisym) end +no_notation + bot ("\") and + top ("\") + subsection {* Dense orders *}