# HG changeset patch # User haftmann # Date 1312577157 -7200 # Node ID c3d0dac940fcf59e9f504a2dcc151a1497975daf # Parent e3e17ee6e1b62baeee73538f79cd0530f10c8985 generalized lemmas to complete lattices diff -r e3e17ee6e1b6 -r c3d0dac940fc src/HOL/Complete_Lattice.thy --- a/src/HOL/Complete_Lattice.thy Fri Aug 05 17:22:28 2011 +0200 +++ b/src/HOL/Complete_Lattice.thy Fri Aug 05 22:45:57 2011 +0200 @@ -330,6 +330,13 @@ "(\i \ A \ B. M i) = (\i \ A. M i) \ (\i\B. M i)" by (auto intro!: antisym SUP_mono intro: le_supI1 le_supI2 SUP_leI le_SUP_I) +lemma INF_inf_distrib: "(\a\A. f a) \ (\a\A. g a) = (\a\A. f a \ g a)" + by (rule antisym) (rule le_INF_I, auto intro: le_infI1 le_infI2 INF_leI INF_mono) + +lemma SUP_sup_distrib: "(\a\A. f a) \ (\a\A. g a) = (\a\A. f a \ g a)" + by (rule antisym) (auto intro: le_supI1 le_supI2 le_SUP_I SUP_mono, + rule SUP_leI, auto intro: le_supI1 le_supI2 le_SUP_I SUP_mono) + lemma INF_constant: "(\y\A. c) = (if A = {} then \ else c)" by (simp add: INF_empty) @@ -413,10 +420,18 @@ end class complete_distrib_lattice = complete_lattice + + assumes sup_Inf: "a \ \B = (\b\B. a \ b)" assumes inf_Sup: "a \ \B = (\b\B. a \ b)" - assumes sup_Inf: "a \ \B = (\b\B. a \ b)" begin +lemma sup_INF: + "a \ (\b\B. f b) = (\b\B. a \ f b)" + by (simp add: INF_def sup_Inf image_image) + +lemma inf_SUP: + "a \ (\b\B. f b) = (\b\B. a \ f b)" + by (simp add: SUP_def inf_Sup image_image) + lemma dual_complete_distrib_lattice: "class.complete_distrib_lattice Sup Inf (op \) (op >) sup inf \ \" apply (rule class.complete_distrib_lattice.intro) @@ -432,6 +447,38 @@ then show "a \ b \ c = (a \ b) \ (a \ c)" by (simp add: INF_def Inf_binary) qed +lemma Inf_sup: + "\B \ a = (\b\B. b \ a)" + by (simp add: sup_Inf sup_commute) + +lemma Sup_inf: + "\B \ a = (\b\B. b \ a)" + by (simp add: inf_Sup inf_commute) + +lemma INF_sup: + "(\b\B. f b) \ a = (\b\B. f b \ a)" + by (simp add: sup_INF sup_commute) + +lemma SUP_inf: + "(\b\B. f b) \ a = (\b\B. f b \ a)" + by (simp add: inf_SUP inf_commute) + +lemma Inf_sup_eq_top_iff: + "(\B \ a = \) \ (\b\B. b \ a = \)" + by (simp only: Inf_sup INF_top_conv) + +lemma Sup_inf_eq_bot_iff: + "(\B \ a = \) \ (\b\B. b \ a = \)" + by (simp only: Sup_inf SUP_bot_conv) + +lemma INF_sup_distrib2: + "(\a\A. f a) \ (\b\B. g b) = (\a\A. \b\B. f a \ g b)" + by (subst INF_commute) (simp add: sup_INF INF_sup) + +lemma SUP_inf_distrib2: + "(\a\A. f a) \ (\b\B. g b) = (\a\A. \b\B. f a \ g b)" + by (subst SUP_commute) (simp add: inf_SUP SUP_inf) + end class complete_boolean_algebra = boolean_algebra + complete_distrib_lattice @@ -862,9 +909,6 @@ lemma empty_Union_conv [simp,no_atp]: "({} = \A) \ (\x\A. x = {})" by (fact Sup_bot_conv) -lemma Union_disjoint: "(\C \ A = {}) \ (\B\C. B \ A = {})" -- "FIXME generalize" - by blast - lemma subset_Pow_Union: "A \ Pow (\A)" by blast @@ -1046,40 +1090,41 @@ lemma Int_Union: "A \ \B = (\C\B. A \ C)" by (fact inf_Sup) +lemma Un_Inter: "A \ \B = (\C\B. A \ C)" + by (fact sup_Inf) + lemma Int_Union2: "\B \ A = (\C\B. C \ A)" - by blast + by (fact Sup_inf) + +lemma INT_Int_distrib: "(\i\I. A i \ B i) = (\i\I. A i) \ (\i\I. B i)" + by (rule sym) (rule INF_inf_distrib) + +lemma UN_Un_distrib: "(\i\I. A i \ B i) = (\i\I. A i) \ (\i\I. B i)" + by (rule sym) (rule SUP_sup_distrib) + +lemma Int_Inter_image: "(\x\C. A x \ B x) = \(A ` C) \ \(B ` C)" + by (simp only: INT_Int_distrib INF_def) lemma Un_Union_image: "(\x\C. A x \ B x) = \(A ` C) \ \(B ` C)" -- {* Devlin, Fundamentals of Contemporary Set Theory, page 12, exercise 5: *} -- {* Union of a family of unions *} - by blast - -lemma UN_Un_distrib: "(\i\I. A i \ B i) = (\i\I. A i) \ (\i\I. B i)" - -- {* Equivalent version *} - by blast + by (simp only: UN_Un_distrib SUP_def) -lemma Un_Inter: "A \ \B = (\C\B. A \ C)" - by (fact sup_Inf) - -lemma Int_Inter_image: "(\x\C. A x \ B x) = \(A ` C) \ \(B ` C)" - by blast - -lemma INT_Int_distrib: "(\i\I. A i \ B i) = (\i\I. A i) \ (\i\I. B i)" - -- {* Equivalent version *} - by blast +lemma Un_INT_distrib: "B \ (\i\I. A i) = (\i\I. B \ A i)" + by (fact sup_INF) lemma Int_UN_distrib: "B \ (\i\I. A i) = (\i\I. B \ A i)" -- {* Halmos, Naive Set Theory, page 35. *} - by blast - -lemma Un_INT_distrib: "B \ (\i\I. A i) = (\i\I. B \ A i)" - by blast + by (fact inf_SUP) lemma Int_UN_distrib2: "(\i\I. A i) \ (\j\J. B j) = (\i\I. \j\J. A i \ B j)" - by blast + by (fact SUP_inf_distrib2) lemma Un_INT_distrib2: "(\i\I. A i) \ (\j\J. B j) = (\i\I. \j\J. A i \ B j)" - by blast + by (fact INF_sup_distrib2) + +lemma Union_disjoint: "(\C \ A = {}) \ (\B\C. B \ A = {})" + by (fact Sup_inf_eq_bot_iff) subsection {* Complement *}