| author | Cezary Kaliszyk <kaliszyk@in.tum.de> | 
| Mon, 30 Aug 2010 15:44:33 +0900 | |
| changeset 38861 | 27c7b620758c | 
| parent 38705 | aaee86c0e237 | 
| child 39302 | d7728f65b353 | 
| permissions | -rw-r--r-- | 
| 32139 | 1 | (* Author: Tobias Nipkow, Lawrence C Paulson and Markus Wenzel; Florian Haftmann, TU Muenchen *) | 
| 11979 | 2 | |
| 32139 | 3 | header {* Complete lattices, with special focus on sets *}
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 4 | |
| 32139 | 5 | theory Complete_Lattice | 
| 6 | imports Set | |
| 7 | begin | |
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 8 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 9 | notation | 
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 10 | less_eq (infix "\<sqsubseteq>" 50) and | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 11 | less (infix "\<sqsubset>" 50) and | 
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 12 | inf (infixl "\<sqinter>" 70) and | 
| 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 13 | sup (infixl "\<squnion>" 65) and | 
| 32678 | 14 |   top ("\<top>") and
 | 
| 15 |   bot ("\<bottom>")
 | |
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 16 | |
| 32139 | 17 | |
| 32879 | 18 | subsection {* Syntactic infimum and supremum operations *}
 | 
| 19 | ||
| 20 | class Inf = | |
| 21 |   fixes Inf :: "'a set \<Rightarrow> 'a" ("\<Sqinter>_" [900] 900)
 | |
| 22 | ||
| 23 | class Sup = | |
| 24 |   fixes Sup :: "'a set \<Rightarrow> 'a" ("\<Squnion>_" [900] 900)
 | |
| 25 | ||
| 32139 | 26 | subsection {* Abstract complete lattices *}
 | 
| 27 | ||
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 28 | class complete_lattice = bounded_lattice + Inf + Sup + | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 29 | assumes Inf_lower: "x \<in> A \<Longrightarrow> \<Sqinter>A \<sqsubseteq> x" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 30 | and Inf_greatest: "(\<And>x. x \<in> A \<Longrightarrow> z \<sqsubseteq> x) \<Longrightarrow> z \<sqsubseteq> \<Sqinter>A" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 31 | assumes Sup_upper: "x \<in> A \<Longrightarrow> x \<sqsubseteq> \<Squnion>A" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 32 | and Sup_least: "(\<And>x. x \<in> A \<Longrightarrow> x \<sqsubseteq> z) \<Longrightarrow> \<Squnion>A \<sqsubseteq> z" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 33 | begin | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 34 | |
| 32678 | 35 | lemma dual_complete_lattice: | 
| 36635 
080b755377c0
locale predicates of classes carry a mandatory "class" prefix
 haftmann parents: 
36364diff
changeset | 36 | "class.complete_lattice Sup Inf (op \<ge>) (op >) (op \<squnion>) (op \<sqinter>) \<top> \<bottom>" | 
| 
080b755377c0
locale predicates of classes carry a mandatory "class" prefix
 haftmann parents: 
36364diff
changeset | 37 | by (auto intro!: class.complete_lattice.intro dual_bounded_lattice) | 
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 38 | (unfold_locales, (fact bot_least top_greatest | 
| 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 39 | Sup_upper Sup_least Inf_lower Inf_greatest)+) | 
| 32678 | 40 | |
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 41 | lemma Inf_Sup: "\<Sqinter>A = \<Squnion>{b. \<forall>a \<in> A. b \<sqsubseteq> a}"
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 42 | by (auto intro: antisym Inf_lower Inf_greatest Sup_upper Sup_least) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 43 | |
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 44 | lemma Sup_Inf:  "\<Squnion>A = \<Sqinter>{b. \<forall>a \<in> A. a \<sqsubseteq> b}"
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 45 | by (auto intro: antisym Inf_lower Inf_greatest Sup_upper Sup_least) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 46 | |
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 47 | lemma Inf_empty: | 
| 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 48 |   "\<Sqinter>{} = \<top>"
 | 
| 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 49 | by (auto intro: antisym Inf_greatest) | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 50 | |
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 51 | lemma Sup_empty: | 
| 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 52 |   "\<Squnion>{} = \<bottom>"
 | 
| 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 53 | by (auto intro: antisym Sup_least) | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 54 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 55 | lemma Inf_insert: "\<Sqinter>insert a A = a \<sqinter> \<Sqinter>A" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 56 | by (auto intro: le_infI le_infI1 le_infI2 antisym Inf_greatest Inf_lower) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 57 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 58 | lemma Sup_insert: "\<Squnion>insert a A = a \<squnion> \<Squnion>A" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 59 | by (auto intro: le_supI le_supI1 le_supI2 antisym Sup_least Sup_upper) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 60 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 61 | lemma Inf_singleton [simp]: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 62 |   "\<Sqinter>{a} = a"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 63 | by (auto intro: antisym Inf_lower Inf_greatest) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 64 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 65 | lemma Sup_singleton [simp]: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 66 |   "\<Squnion>{a} = a"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 67 | by (auto intro: antisym Sup_upper Sup_least) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 68 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 69 | lemma Inf_binary: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 70 |   "\<Sqinter>{a, b} = a \<sqinter> b"
 | 
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 71 | by (simp add: Inf_empty Inf_insert) | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 72 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 73 | lemma Sup_binary: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 74 |   "\<Squnion>{a, b} = a \<squnion> b"
 | 
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 75 | by (simp add: Sup_empty Sup_insert) | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 76 | |
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 77 | lemma Inf_UNIV: | 
| 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 78 | "\<Sqinter>UNIV = bot" | 
| 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 79 | by (simp add: Sup_Inf Sup_empty [symmetric]) | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 80 | |
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 81 | lemma Sup_UNIV: | 
| 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 82 | "\<Squnion>UNIV = top" | 
| 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 83 | by (simp add: Inf_Sup Inf_empty [symmetric]) | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 84 | |
| 35629 | 85 | lemma Sup_le_iff: "Sup A \<sqsubseteq> b \<longleftrightarrow> (\<forall>a\<in>A. a \<sqsubseteq> b)" | 
| 86 | by (auto intro: Sup_least dest: Sup_upper) | |
| 87 | ||
| 88 | lemma le_Inf_iff: "b \<sqsubseteq> Inf A \<longleftrightarrow> (\<forall>a\<in>A. b \<sqsubseteq> a)" | |
| 89 | by (auto intro: Inf_greatest dest: Inf_lower) | |
| 90 | ||
| 38705 | 91 | lemma Sup_mono: | 
| 92 | assumes "\<And>a. a \<in> A \<Longrightarrow> \<exists>b\<in>B. a \<le> b" | |
| 93 | shows "Sup A \<le> Sup B" | |
| 94 | proof (rule Sup_least) | |
| 95 | fix a assume "a \<in> A" | |
| 96 | with assms obtain b where "b \<in> B" and "a \<le> b" by blast | |
| 97 | from `b \<in> B` have "b \<le> Sup B" by (rule Sup_upper) | |
| 98 | with `a \<le> b` show "a \<le> Sup B" by auto | |
| 99 | qed | |
| 100 | ||
| 101 | lemma Inf_mono: | |
| 102 | assumes "\<And>b. b \<in> B \<Longrightarrow> \<exists>a\<in>A. a \<le> b" | |
| 103 | shows "Inf A \<le> Inf B" | |
| 104 | proof (rule Inf_greatest) | |
| 105 | fix b assume "b \<in> B" | |
| 106 | with assms obtain a where "a \<in> A" and "a \<le> b" by blast | |
| 107 | from `a \<in> A` have "Inf A \<le> a" by (rule Inf_lower) | |
| 108 | with `a \<le> b` show "Inf A \<le> b" by auto | |
| 109 | qed | |
| 110 | ||
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 111 | definition SUPR :: "'b set \<Rightarrow> ('b \<Rightarrow> 'a) \<Rightarrow> 'a" where
 | 
| 32117 
0762b9ad83df
Set.thy: prefer = over == where possible; tuned ML setup; dropped (moved) ML legacy
 haftmann parents: 
32115diff
changeset | 112 | "SUPR A f = \<Squnion> (f ` A)" | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 113 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 114 | definition INFI :: "'b set \<Rightarrow> ('b \<Rightarrow> 'a) \<Rightarrow> 'a" where
 | 
| 32117 
0762b9ad83df
Set.thy: prefer = over == where possible; tuned ML setup; dropped (moved) ML legacy
 haftmann parents: 
32115diff
changeset | 115 | "INFI A f = \<Sqinter> (f ` A)" | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 116 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 117 | end | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 118 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 119 | syntax | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 120 |   "_SUP1"     :: "pttrns => 'b => 'b"           ("(3SUP _./ _)" [0, 10] 10)
 | 
| 36364 
0e2679025aeb
fix syntax precedence declarations for UNION, INTER, SUP, INF
 huffman parents: 
35828diff
changeset | 121 |   "_SUP"      :: "pttrn => 'a set => 'b => 'b"  ("(3SUP _:_./ _)" [0, 0, 10] 10)
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 122 |   "_INF1"     :: "pttrns => 'b => 'b"           ("(3INF _./ _)" [0, 10] 10)
 | 
| 36364 
0e2679025aeb
fix syntax precedence declarations for UNION, INTER, SUP, INF
 huffman parents: 
35828diff
changeset | 123 |   "_INF"      :: "pttrn => 'a set => 'b => 'b"  ("(3INF _:_./ _)" [0, 0, 10] 10)
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 124 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 125 | translations | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 126 | "SUP x y. B" == "SUP x. SUP y. B" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 127 | "SUP x. B" == "CONST SUPR CONST UNIV (%x. B)" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 128 | "SUP x. B" == "SUP x:CONST UNIV. B" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 129 | "SUP x:A. B" == "CONST SUPR A (%x. B)" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 130 | "INF x y. B" == "INF x. INF y. B" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 131 | "INF x. B" == "CONST INFI CONST UNIV (%x. B)" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 132 | "INF x. B" == "INF x:CONST UNIV. B" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 133 | "INF x:A. B" == "CONST INFI A (%x. B)" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 134 | |
| 35115 | 135 | print_translation {*
 | 
| 136 |   [Syntax.preserve_binder_abs2_tr' @{const_syntax SUPR} @{syntax_const "_SUP"},
 | |
| 137 |     Syntax.preserve_binder_abs2_tr' @{const_syntax INFI} @{syntax_const "_INF"}]
 | |
| 138 | *} -- {* to avoid eta-contraction of body *}
 | |
| 11979 | 139 | |
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 140 | context complete_lattice | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 141 | begin | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 142 | |
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 143 | lemma le_SUPI: "i : A \<Longrightarrow> M i \<sqsubseteq> (SUP i:A. M i)" | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 144 | by (auto simp add: SUPR_def intro: Sup_upper) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 145 | |
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 146 | lemma SUP_leI: "(\<And>i. i : A \<Longrightarrow> M i \<sqsubseteq> u) \<Longrightarrow> (SUP i:A. M i) \<sqsubseteq> u" | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 147 | by (auto simp add: SUPR_def intro: Sup_least) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 148 | |
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 149 | lemma INF_leI: "i : A \<Longrightarrow> (INF i:A. M i) \<sqsubseteq> M i" | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 150 | by (auto simp add: INFI_def intro: Inf_lower) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 151 | |
| 34007 
aea892559fc5
tuned lattices theory fragements; generlized some lemmas from sets to lattices
 haftmann parents: 
32879diff
changeset | 152 | lemma le_INFI: "(\<And>i. i : A \<Longrightarrow> u \<sqsubseteq> M i) \<Longrightarrow> u \<sqsubseteq> (INF i:A. M i)" | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 153 | by (auto simp add: INFI_def intro: Inf_greatest) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 154 | |
| 35629 | 155 | lemma SUP_le_iff: "(SUP i:A. M i) \<sqsubseteq> u \<longleftrightarrow> (\<forall>i \<in> A. M i \<sqsubseteq> u)" | 
| 156 | unfolding SUPR_def by (auto simp add: Sup_le_iff) | |
| 157 | ||
| 158 | lemma le_INF_iff: "u \<sqsubseteq> (INF i:A. M i) \<longleftrightarrow> (\<forall>i \<in> A. u \<sqsubseteq> M i)" | |
| 159 | unfolding INFI_def by (auto simp add: le_Inf_iff) | |
| 160 | ||
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 161 | lemma SUP_const[simp]: "A \<noteq> {} \<Longrightarrow> (SUP i:A. M) = M"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 162 | by (auto intro: antisym SUP_leI le_SUPI) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 163 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 164 | lemma INF_const[simp]: "A \<noteq> {} \<Longrightarrow> (INF i:A. M) = M"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 165 | by (auto intro: antisym INF_leI le_INFI) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 166 | |
| 38705 | 167 | lemma SUP_mono: | 
| 168 | "(\<And>n. n \<in> A \<Longrightarrow> \<exists>m\<in>B. f n \<le> g m) \<Longrightarrow> (SUP n:A. f n) \<le> (SUP n:B. g n)" | |
| 169 | by (force intro!: Sup_mono simp: SUPR_def) | |
| 170 | ||
| 171 | lemma INF_mono: | |
| 172 | "(\<And>m. m \<in> B \<Longrightarrow> \<exists>n\<in>A. f n \<le> g m) \<Longrightarrow> (INF n:A. f n) \<le> (INF n:B. g n)" | |
| 173 | by (force intro!: Inf_mono simp: INFI_def) | |
| 174 | ||
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 175 | end | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 176 | |
| 38705 | 177 | lemma less_Sup_iff: | 
| 178 |   fixes a :: "'a\<Colon>{complete_lattice,linorder}"
 | |
| 179 | shows "a < Sup S \<longleftrightarrow> (\<exists>x\<in>S. a < x)" | |
| 180 | unfolding not_le[symmetric] Sup_le_iff by auto | |
| 181 | ||
| 182 | lemma Inf_less_iff: | |
| 183 |   fixes a :: "'a\<Colon>{complete_lattice,linorder}"
 | |
| 184 | shows "Inf S < a \<longleftrightarrow> (\<exists>x\<in>S. x < a)" | |
| 185 | unfolding not_le[symmetric] le_Inf_iff by auto | |
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 186 | |
| 32139 | 187 | subsection {* @{typ bool} and @{typ "_ \<Rightarrow> _"} as complete lattice *}
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 188 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 189 | instantiation bool :: complete_lattice | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 190 | begin | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 191 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 192 | definition | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 193 | Inf_bool_def: "\<Sqinter>A \<longleftrightarrow> (\<forall>x\<in>A. x)" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 194 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 195 | definition | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 196 | Sup_bool_def: "\<Squnion>A \<longleftrightarrow> (\<exists>x\<in>A. x)" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 197 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 198 | instance proof | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 199 | qed (auto simp add: Inf_bool_def Sup_bool_def le_bool_def) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 200 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 201 | end | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 202 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 203 | lemma Inf_empty_bool [simp]: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 204 |   "\<Sqinter>{}"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 205 | unfolding Inf_bool_def by auto | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 206 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 207 | lemma not_Sup_empty_bool [simp]: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 208 |   "\<not> \<Squnion>{}"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 209 | unfolding Sup_bool_def by auto | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 210 | |
| 32120 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 211 | lemma INFI_bool_eq: | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 212 | "INFI = Ball" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 213 | proof (rule ext)+ | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 214 | fix A :: "'a set" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 215 | fix P :: "'a \<Rightarrow> bool" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 216 | show "(INF x:A. P x) \<longleftrightarrow> (\<forall>x \<in> A. P x)" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 217 | by (auto simp add: Ball_def INFI_def Inf_bool_def) | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 218 | qed | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 219 | |
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 220 | lemma SUPR_bool_eq: | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 221 | "SUPR = Bex" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 222 | proof (rule ext)+ | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 223 | fix A :: "'a set" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 224 | fix P :: "'a \<Rightarrow> bool" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 225 | show "(SUP x:A. P x) \<longleftrightarrow> (\<exists>x \<in> A. P x)" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 226 | by (auto simp add: Bex_def SUPR_def Sup_bool_def) | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 227 | qed | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 228 | |
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 229 | instantiation "fun" :: (type, complete_lattice) complete_lattice | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 230 | begin | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 231 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 232 | definition | 
| 37767 | 233 |   Inf_fun_def: "\<Sqinter>A = (\<lambda>x. \<Sqinter>{y. \<exists>f\<in>A. y = f x})"
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 234 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 235 | definition | 
| 37767 | 236 |   Sup_fun_def: "\<Squnion>A = (\<lambda>x. \<Squnion>{y. \<exists>f\<in>A. y = f x})"
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 237 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 238 | instance proof | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 239 | qed (auto simp add: Inf_fun_def Sup_fun_def le_fun_def | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 240 | intro: Inf_lower Sup_upper Inf_greatest Sup_least) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 241 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 242 | end | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 243 | |
| 38705 | 244 | lemma SUPR_fun_expand: | 
| 245 |   fixes f :: "'a \<Rightarrow> 'b \<Rightarrow> 'c\<Colon>{complete_lattice}"
 | |
| 246 | shows "(SUP y:A. f y) = (\<lambda>x. SUP y:A. f y x)" | |
| 247 | by (auto intro!: arg_cong[where f=Sup] ext[where 'a='b] | |
| 248 | simp: SUPR_def Sup_fun_def) | |
| 249 | ||
| 250 | lemma INFI_fun_expand: | |
| 251 |   fixes f :: "'a \<Rightarrow> 'b \<Rightarrow> 'c\<Colon>{complete_lattice}"
 | |
| 252 | shows "(INF y:A. f y) x = (INF y:A. f y x)" | |
| 253 | by (auto intro!: arg_cong[where f=Inf] ext[where 'a='b] | |
| 254 | simp: INFI_def Inf_fun_def) | |
| 255 | ||
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 256 | lemma Inf_empty_fun: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 257 |   "\<Sqinter>{} = (\<lambda>_. \<Sqinter>{})"
 | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 258 | by (simp add: Inf_fun_def) | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 259 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 260 | lemma Sup_empty_fun: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 261 |   "\<Squnion>{} = (\<lambda>_. \<Squnion>{})"
 | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 262 | by (simp add: Sup_fun_def) | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 263 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 264 | |
| 32139 | 265 | subsection {* Union *}
 | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 266 | |
| 32587 
caa5ada96a00
Inter and Union are mere abbreviations for Inf and Sup
 haftmann parents: 
32436diff
changeset | 267 | abbreviation Union :: "'a set set \<Rightarrow> 'a set" where | 
| 
caa5ada96a00
Inter and Union are mere abbreviations for Inf and Sup
 haftmann parents: 
32436diff
changeset | 268 | "Union S \<equiv> \<Squnion>S" | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 269 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 270 | notation (xsymbols) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 271 |   Union  ("\<Union>_" [90] 90)
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 272 | |
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 273 | lemma Union_eq: | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 274 |   "\<Union>A = {x. \<exists>B \<in> A. x \<in> B}"
 | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 275 | proof (rule set_ext) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 276 | fix x | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 277 |   have "(\<exists>Q\<in>{P. \<exists>B\<in>A. P \<longleftrightarrow> x \<in> B}. Q) \<longleftrightarrow> (\<exists>B\<in>A. x \<in> B)"
 | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 278 | by auto | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 279 |   then show "x \<in> \<Union>A \<longleftrightarrow> x \<in> {x. \<exists>B\<in>A. x \<in> B}"
 | 
| 32587 
caa5ada96a00
Inter and Union are mere abbreviations for Inf and Sup
 haftmann parents: 
32436diff
changeset | 280 | by (simp add: Sup_fun_def Sup_bool_def) (simp add: mem_def) | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 281 | qed | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 282 | |
| 35828 
46cfc4b8112e
now use "Named_Thms" for "noatp", and renamed "noatp" to "no_atp"
 blanchet parents: 
35629diff
changeset | 283 | lemma Union_iff [simp, no_atp]: | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 284 | "A \<in> \<Union>C \<longleftrightarrow> (\<exists>X\<in>C. A\<in>X)" | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 285 | by (unfold Union_eq) blast | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 286 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 287 | lemma UnionI [intro]: | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 288 | "X \<in> C \<Longrightarrow> A \<in> X \<Longrightarrow> A \<in> \<Union>C" | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 289 |   -- {* The order of the premises presupposes that @{term C} is rigid;
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 290 |     @{term A} may be flexible. *}
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 291 | by auto | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 292 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 293 | lemma UnionE [elim!]: | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 294 | "A \<in> \<Union>C \<Longrightarrow> (\<And>X. A\<in>X \<Longrightarrow> X\<in>C \<Longrightarrow> R) \<Longrightarrow> R" | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 295 | by auto | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 296 | |
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 297 | lemma Union_upper: "B \<in> A ==> B \<subseteq> Union A" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 298 | by (iprover intro: subsetI UnionI) | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 299 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 300 | lemma Union_least: "(!!X. X \<in> A ==> X \<subseteq> C) ==> Union A \<subseteq> C" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 301 | by (iprover intro: subsetI elim: UnionE dest: subsetD) | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 302 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 303 | lemma Un_eq_Union: "A \<union> B = \<Union>{A, B}"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 304 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 305 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 306 | lemma Union_empty [simp]: "Union({}) = {}"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 307 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 308 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 309 | lemma Union_UNIV [simp]: "Union UNIV = UNIV" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 310 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 311 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 312 | lemma Union_insert [simp]: "Union (insert a B) = a \<union> \<Union>B" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 313 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 314 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 315 | lemma Union_Un_distrib [simp]: "\<Union>(A Un B) = \<Union>A \<union> \<Union>B" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 316 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 317 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 318 | lemma Union_Int_subset: "\<Union>(A \<inter> B) \<subseteq> \<Union>A \<inter> \<Union>B" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 319 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 320 | |
| 35828 
46cfc4b8112e
now use "Named_Thms" for "noatp", and renamed "noatp" to "no_atp"
 blanchet parents: 
35629diff
changeset | 321 | lemma Union_empty_conv [simp,no_atp]: "(\<Union>A = {}) = (\<forall>x\<in>A. x = {})"
 | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 322 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 323 | |
| 35828 
46cfc4b8112e
now use "Named_Thms" for "noatp", and renamed "noatp" to "no_atp"
 blanchet parents: 
35629diff
changeset | 324 | lemma empty_Union_conv [simp,no_atp]: "({} = \<Union>A) = (\<forall>x\<in>A. x = {})"
 | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 325 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 326 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 327 | lemma Union_disjoint: "(\<Union>C \<inter> A = {}) = (\<forall>B\<in>C. B \<inter> A = {})"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 328 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 329 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 330 | lemma subset_Pow_Union: "A \<subseteq> Pow (\<Union>A)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 331 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 332 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 333 | lemma Union_Pow_eq [simp]: "\<Union>(Pow A) = A" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 334 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 335 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 336 | lemma Union_mono: "A \<subseteq> B ==> \<Union>A \<subseteq> \<Union>B" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 337 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 338 | |
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 339 | |
| 32139 | 340 | subsection {* Unions of families *}
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 341 | |
| 32606 
b5c3a8a75772
INTER and UNION are mere abbreviations for INFI and SUPR
 haftmann parents: 
32587diff
changeset | 342 | abbreviation UNION :: "'a set \<Rightarrow> ('a \<Rightarrow> 'b set) \<Rightarrow> 'b set" where
 | 
| 
b5c3a8a75772
INTER and UNION are mere abbreviations for INFI and SUPR
 haftmann parents: 
32587diff
changeset | 343 | "UNION \<equiv> SUPR" | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 344 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 345 | syntax | 
| 35115 | 346 |   "_UNION1"     :: "pttrns => 'b set => 'b set"           ("(3UN _./ _)" [0, 10] 10)
 | 
| 36364 
0e2679025aeb
fix syntax precedence declarations for UNION, INTER, SUP, INF
 huffman parents: 
35828diff
changeset | 347 |   "_UNION"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3UN _:_./ _)" [0, 0, 10] 10)
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 348 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 349 | syntax (xsymbols) | 
| 35115 | 350 |   "_UNION1"     :: "pttrns => 'b set => 'b set"           ("(3\<Union>_./ _)" [0, 10] 10)
 | 
| 36364 
0e2679025aeb
fix syntax precedence declarations for UNION, INTER, SUP, INF
 huffman parents: 
35828diff
changeset | 351 |   "_UNION"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3\<Union>_\<in>_./ _)" [0, 0, 10] 10)
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 352 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 353 | syntax (latex output) | 
| 35115 | 354 |   "_UNION1"     :: "pttrns => 'b set => 'b set"           ("(3\<Union>(00\<^bsub>_\<^esub>)/ _)" [0, 10] 10)
 | 
| 36364 
0e2679025aeb
fix syntax precedence declarations for UNION, INTER, SUP, INF
 huffman parents: 
35828diff
changeset | 355 |   "_UNION"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3\<Union>(00\<^bsub>_\<in>_\<^esub>)/ _)" [0, 0, 10] 10)
 | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 356 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 357 | translations | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 358 | "UN x y. B" == "UN x. UN y. B" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 359 | "UN x. B" == "CONST UNION CONST UNIV (%x. B)" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 360 | "UN x. B" == "UN x:CONST UNIV. B" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 361 | "UN x:A. B" == "CONST UNION A (%x. B)" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 362 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 363 | text {*
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 364 | Note the difference between ordinary xsymbol syntax of indexed | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 365 |   unions and intersections (e.g.\ @{text"\<Union>a\<^isub>1\<in>A\<^isub>1. B"})
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 366 |   and their \LaTeX\ rendition: @{term"\<Union>a\<^isub>1\<in>A\<^isub>1. B"}. The
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 367 | former does not make the index expression a subscript of the | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 368 | union/intersection symbol because this leads to problems with nested | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 369 | subscripts in Proof General. | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 370 | *} | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 371 | |
| 35115 | 372 | print_translation {*
 | 
| 373 |   [Syntax.preserve_binder_abs2_tr' @{const_syntax UNION} @{syntax_const "_UNION"}]
 | |
| 374 | *} -- {* to avoid eta-contraction of body *}
 | |
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 375 | |
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 376 | lemma UNION_eq_Union_image: | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 377 | "(\<Union>x\<in>A. B x) = \<Union>(B`A)" | 
| 32606 
b5c3a8a75772
INTER and UNION are mere abbreviations for INFI and SUPR
 haftmann parents: 
32587diff
changeset | 378 | by (fact SUPR_def) | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 379 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 380 | lemma Union_def: | 
| 32117 
0762b9ad83df
Set.thy: prefer = over == where possible; tuned ML setup; dropped (moved) ML legacy
 haftmann parents: 
32115diff
changeset | 381 | "\<Union>S = (\<Union>x\<in>S. x)" | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 382 | by (simp add: UNION_eq_Union_image image_def) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 383 | |
| 35828 
46cfc4b8112e
now use "Named_Thms" for "noatp", and renamed "noatp" to "no_atp"
 blanchet parents: 
35629diff
changeset | 384 | lemma UNION_def [no_atp]: | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 385 |   "(\<Union>x\<in>A. B x) = {y. \<exists>x\<in>A. y \<in> B x}"
 | 
| 32117 
0762b9ad83df
Set.thy: prefer = over == where possible; tuned ML setup; dropped (moved) ML legacy
 haftmann parents: 
32115diff
changeset | 386 | by (auto simp add: UNION_eq_Union_image Union_eq) | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 387 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 388 | lemma Union_image_eq [simp]: | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 389 | "\<Union>(B`A) = (\<Union>x\<in>A. B x)" | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 390 | by (rule sym) (fact UNION_eq_Union_image) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 391 | |
| 11979 | 392 | lemma UN_iff [simp]: "(b: (UN x:A. B x)) = (EX x:A. b: B x)" | 
| 393 | by (unfold UNION_def) blast | |
| 394 | ||
| 395 | lemma UN_I [intro]: "a:A ==> b: B a ==> b: (UN x:A. B x)" | |
| 396 |   -- {* The order of the premises presupposes that @{term A} is rigid;
 | |
| 397 |     @{term b} may be flexible. *}
 | |
| 398 | by auto | |
| 399 | ||
| 400 | lemma UN_E [elim!]: "b : (UN x:A. B x) ==> (!!x. x:A ==> b: B x ==> R) ==> R" | |
| 401 | by (unfold UNION_def) blast | |
| 923 | 402 | |
| 11979 | 403 | lemma UN_cong [cong]: | 
| 404 | "A = B ==> (!!x. x:B ==> C x = D x) ==> (UN x:A. C x) = (UN x:B. D x)" | |
| 405 | by (simp add: UNION_def) | |
| 406 | ||
| 29691 | 407 | lemma strong_UN_cong: | 
| 408 | "A = B ==> (!!x. x:B =simp=> C x = D x) ==> (UN x:A. C x) = (UN x:B. D x)" | |
| 409 | by (simp add: UNION_def simp_implies_def) | |
| 410 | ||
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 411 | lemma image_eq_UN: "f`A = (UN x:A. {f x})"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 412 | by blast | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 413 | |
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 414 | lemma UN_upper: "a \<in> A ==> B a \<subseteq> (\<Union>x\<in>A. B x)" | 
| 32606 
b5c3a8a75772
INTER and UNION are mere abbreviations for INFI and SUPR
 haftmann parents: 
32587diff
changeset | 415 | by (fact le_SUPI) | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 416 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 417 | lemma UN_least: "(!!x. x \<in> A ==> B x \<subseteq> C) ==> (\<Union>x\<in>A. B x) \<subseteq> C" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 418 | by (iprover intro: subsetI elim: UN_E dest: subsetD) | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 419 | |
| 35828 
46cfc4b8112e
now use "Named_Thms" for "noatp", and renamed "noatp" to "no_atp"
 blanchet parents: 
35629diff
changeset | 420 | lemma Collect_bex_eq [no_atp]: "{x. \<exists>y\<in>A. P x y} = (\<Union>y\<in>A. {x. P x y})"
 | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 421 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 422 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 423 | lemma UN_insert_distrib: "u \<in> A ==> (\<Union>x\<in>A. insert a (B x)) = insert a (\<Union>x\<in>A. B x)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 424 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 425 | |
| 35828 
46cfc4b8112e
now use "Named_Thms" for "noatp", and renamed "noatp" to "no_atp"
 blanchet parents: 
35629diff
changeset | 426 | lemma UN_empty [simp,no_atp]: "(\<Union>x\<in>{}. B x) = {}"
 | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 427 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 428 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 429 | lemma UN_empty2 [simp]: "(\<Union>x\<in>A. {}) = {}"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 430 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 431 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 432 | lemma UN_singleton [simp]: "(\<Union>x\<in>A. {x}) = A"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 433 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 434 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 435 | lemma UN_absorb: "k \<in> I ==> A k \<union> (\<Union>i\<in>I. A i) = (\<Union>i\<in>I. A i)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 436 | by auto | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 437 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 438 | lemma UN_insert [simp]: "(\<Union>x\<in>insert a A. B x) = B a \<union> UNION A B" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 439 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 440 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 441 | lemma UN_Un[simp]: "(\<Union>i \<in> A \<union> B. M i) = (\<Union>i\<in>A. M i) \<union> (\<Union>i\<in>B. M i)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 442 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 443 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 444 | lemma UN_UN_flatten: "(\<Union>x \<in> (\<Union>y\<in>A. B y). C x) = (\<Union>y\<in>A. \<Union>x\<in>B y. C x)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 445 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 446 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 447 | lemma UN_subset_iff: "((\<Union>i\<in>I. A i) \<subseteq> B) = (\<forall>i\<in>I. A i \<subseteq> B)" | 
| 35629 | 448 | by (fact SUP_le_iff) | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 449 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 450 | lemma image_Union: "f ` \<Union>S = (\<Union>x\<in>S. f ` x)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 451 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 452 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 453 | lemma UN_constant [simp]: "(\<Union>y\<in>A. c) = (if A = {} then {} else c)"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 454 | by auto | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 455 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 456 | lemma UN_eq: "(\<Union>x\<in>A. B x) = \<Union>({Y. \<exists>x\<in>A. Y = B x})"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 457 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 458 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 459 | lemma UNION_empty_conv[simp]: | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 460 |   "({} = (UN x:A. B x)) = (\<forall>x\<in>A. B x = {})"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 461 |   "((UN x:A. B x) = {}) = (\<forall>x\<in>A. B x = {})"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 462 | by blast+ | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 463 | |
| 35828 
46cfc4b8112e
now use "Named_Thms" for "noatp", and renamed "noatp" to "no_atp"
 blanchet parents: 
35629diff
changeset | 464 | lemma Collect_ex_eq [no_atp]: "{x. \<exists>y. P x y} = (\<Union>y. {x. P x y})"
 | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 465 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 466 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 467 | lemma ball_UN: "(\<forall>z \<in> UNION A B. P z) = (\<forall>x\<in>A. \<forall>z \<in> B x. P z)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 468 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 469 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 470 | lemma bex_UN: "(\<exists>z \<in> UNION A B. P z) = (\<exists>x\<in>A. \<exists>z\<in>B x. P z)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 471 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 472 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 473 | lemma Un_eq_UN: "A \<union> B = (\<Union>b. if b then A else B)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 474 | by (auto simp add: split_if_mem2) | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 475 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 476 | lemma UN_bool_eq: "(\<Union>b::bool. A b) = (A True \<union> A False)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 477 | by (auto intro: bool_contrapos) | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 478 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 479 | lemma UN_Pow_subset: "(\<Union>x\<in>A. Pow (B x)) \<subseteq> Pow (\<Union>x\<in>A. B x)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 480 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 481 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 482 | lemma UN_mono: | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 483 | "A \<subseteq> B ==> (!!x. x \<in> A ==> f x \<subseteq> g x) ==> | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 484 | (\<Union>x\<in>A. f x) \<subseteq> (\<Union>x\<in>B. g x)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 485 | by (blast dest: subsetD) | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 486 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 487 | lemma vimage_Union: "f -` (Union A) = (UN X:A. f -` X)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 488 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 489 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 490 | lemma vimage_UN: "f-`(UN x:A. B x) = (UN x:A. f -` B x)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 491 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 492 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 493 | lemma vimage_eq_UN: "f-`B = (UN y: B. f-`{y})"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 494 |   -- {* NOT suitable for rewriting *}
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 495 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 496 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 497 | lemma image_UN: "(f ` (UNION A B)) = (UN x:A.(f ` (B x)))" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 498 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 499 | |
| 11979 | 500 | |
| 32139 | 501 | subsection {* Inter *}
 | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 502 | |
| 32587 
caa5ada96a00
Inter and Union are mere abbreviations for Inf and Sup
 haftmann parents: 
32436diff
changeset | 503 | abbreviation Inter :: "'a set set \<Rightarrow> 'a set" where | 
| 
caa5ada96a00
Inter and Union are mere abbreviations for Inf and Sup
 haftmann parents: 
32436diff
changeset | 504 | "Inter S \<equiv> \<Sqinter>S" | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 505 | |
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 506 | notation (xsymbols) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 507 |   Inter  ("\<Inter>_" [90] 90)
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 508 | |
| 37767 | 509 | lemma Inter_eq: | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 510 |   "\<Inter>A = {x. \<forall>B \<in> A. x \<in> B}"
 | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 511 | proof (rule set_ext) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 512 | fix x | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 513 |   have "(\<forall>Q\<in>{P. \<exists>B\<in>A. P \<longleftrightarrow> x \<in> B}. Q) \<longleftrightarrow> (\<forall>B\<in>A. x \<in> B)"
 | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 514 | by auto | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 515 |   then show "x \<in> \<Inter>A \<longleftrightarrow> x \<in> {x. \<forall>B \<in> A. x \<in> B}"
 | 
| 32587 
caa5ada96a00
Inter and Union are mere abbreviations for Inf and Sup
 haftmann parents: 
32436diff
changeset | 516 | by (simp add: Inf_fun_def Inf_bool_def) (simp add: mem_def) | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 517 | qed | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 518 | |
| 35828 
46cfc4b8112e
now use "Named_Thms" for "noatp", and renamed "noatp" to "no_atp"
 blanchet parents: 
35629diff
changeset | 519 | lemma Inter_iff [simp,no_atp]: "(A : Inter C) = (ALL X:C. A:X)" | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 520 | by (unfold Inter_eq) blast | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 521 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 522 | lemma InterI [intro!]: "(!!X. X:C ==> A:X) ==> A : Inter C" | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 523 | by (simp add: Inter_eq) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 524 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 525 | text {*
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 526 |   \medskip A ``destruct'' rule -- every @{term X} in @{term C}
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 527 |   contains @{term A} as an element, but @{prop "A:X"} can hold when
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 528 |   @{prop "X:C"} does not!  This rule is analogous to @{text spec}.
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 529 | *} | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 530 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 531 | lemma InterD [elim]: "A : Inter C ==> X:C ==> A:X" | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 532 | by auto | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 533 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 534 | lemma InterE [elim]: "A : Inter C ==> (X~:C ==> R) ==> (A:X ==> R) ==> R" | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 535 |   -- {* ``Classical'' elimination rule -- does not require proving
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 536 |     @{prop "X:C"}. *}
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 537 | by (unfold Inter_eq) blast | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 538 | |
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 539 | lemma Inter_lower: "B \<in> A ==> Inter A \<subseteq> B" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 540 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 541 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 542 | lemma Inter_subset: | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 543 |   "[| !!X. X \<in> A ==> X \<subseteq> B; A ~= {} |] ==> \<Inter>A \<subseteq> B"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 544 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 545 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 546 | lemma Inter_greatest: "(!!X. X \<in> A ==> C \<subseteq> X) ==> C \<subseteq> Inter A" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 547 | by (iprover intro: InterI subsetI dest: subsetD) | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 548 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 549 | lemma Int_eq_Inter: "A \<inter> B = \<Inter>{A, B}"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 550 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 551 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 552 | lemma Inter_empty [simp]: "\<Inter>{} = UNIV"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 553 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 554 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 555 | lemma Inter_UNIV [simp]: "\<Inter>UNIV = {}"
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 556 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 557 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 558 | lemma Inter_insert [simp]: "\<Inter>(insert a B) = a \<inter> \<Inter>B" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 559 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 560 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 561 | lemma Inter_Un_subset: "\<Inter>A \<union> \<Inter>B \<subseteq> \<Inter>(A \<inter> B)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 562 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 563 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 564 | lemma Inter_Un_distrib: "\<Inter>(A \<union> B) = \<Inter>A \<inter> \<Inter>B" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 565 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 566 | |
| 35828 
46cfc4b8112e
now use "Named_Thms" for "noatp", and renamed "noatp" to "no_atp"
 blanchet parents: 
35629diff
changeset | 567 | lemma Inter_UNIV_conv [simp,no_atp]: | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 568 | "(\<Inter>A = UNIV) = (\<forall>x\<in>A. x = UNIV)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 569 | "(UNIV = \<Inter>A) = (\<forall>x\<in>A. x = UNIV)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 570 | by blast+ | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 571 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 572 | lemma Inter_anti_mono: "B \<subseteq> A ==> \<Inter>A \<subseteq> \<Inter>B" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 573 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 574 | |
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 575 | |
| 32139 | 576 | subsection {* Intersections of families *}
 | 
| 11979 | 577 | |
| 32606 
b5c3a8a75772
INTER and UNION are mere abbreviations for INFI and SUPR
 haftmann parents: 
32587diff
changeset | 578 | abbreviation INTER :: "'a set \<Rightarrow> ('a \<Rightarrow> 'b set) \<Rightarrow> 'b set" where
 | 
| 
b5c3a8a75772
INTER and UNION are mere abbreviations for INFI and SUPR
 haftmann parents: 
32587diff
changeset | 579 | "INTER \<equiv> INFI" | 
| 32081 | 580 | |
| 581 | syntax | |
| 35115 | 582 |   "_INTER1"     :: "pttrns => 'b set => 'b set"           ("(3INT _./ _)" [0, 10] 10)
 | 
| 36364 
0e2679025aeb
fix syntax precedence declarations for UNION, INTER, SUP, INF
 huffman parents: 
35828diff
changeset | 583 |   "_INTER"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3INT _:_./ _)" [0, 0, 10] 10)
 | 
| 32081 | 584 | |
| 585 | syntax (xsymbols) | |
| 35115 | 586 |   "_INTER1"     :: "pttrns => 'b set => 'b set"           ("(3\<Inter>_./ _)" [0, 10] 10)
 | 
| 36364 
0e2679025aeb
fix syntax precedence declarations for UNION, INTER, SUP, INF
 huffman parents: 
35828diff
changeset | 587 |   "_INTER"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3\<Inter>_\<in>_./ _)" [0, 0, 10] 10)
 | 
| 32081 | 588 | |
| 589 | syntax (latex output) | |
| 35115 | 590 |   "_INTER1"     :: "pttrns => 'b set => 'b set"           ("(3\<Inter>(00\<^bsub>_\<^esub>)/ _)" [0, 10] 10)
 | 
| 36364 
0e2679025aeb
fix syntax precedence declarations for UNION, INTER, SUP, INF
 huffman parents: 
35828diff
changeset | 591 |   "_INTER"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3\<Inter>(00\<^bsub>_\<in>_\<^esub>)/ _)" [0, 0, 10] 10)
 | 
| 32081 | 592 | |
| 593 | translations | |
| 594 | "INT x y. B" == "INT x. INT y. B" | |
| 595 | "INT x. B" == "CONST INTER CONST UNIV (%x. B)" | |
| 596 | "INT x. B" == "INT x:CONST UNIV. B" | |
| 597 | "INT x:A. B" == "CONST INTER A (%x. B)" | |
| 598 | ||
| 35115 | 599 | print_translation {*
 | 
| 600 |   [Syntax.preserve_binder_abs2_tr' @{const_syntax INTER} @{syntax_const "_INTER"}]
 | |
| 601 | *} -- {* to avoid eta-contraction of body *}
 | |
| 32081 | 602 | |
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 603 | lemma INTER_eq_Inter_image: | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 604 | "(\<Inter>x\<in>A. B x) = \<Inter>(B`A)" | 
| 32606 
b5c3a8a75772
INTER and UNION are mere abbreviations for INFI and SUPR
 haftmann parents: 
32587diff
changeset | 605 | by (fact INFI_def) | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 606 | |
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 607 | lemma Inter_def: | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 608 | "\<Inter>S = (\<Inter>x\<in>S. x)" | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 609 | by (simp add: INTER_eq_Inter_image image_def) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 610 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 611 | lemma INTER_def: | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 612 |   "(\<Inter>x\<in>A. B x) = {y. \<forall>x\<in>A. y \<in> B x}"
 | 
| 32117 
0762b9ad83df
Set.thy: prefer = over == where possible; tuned ML setup; dropped (moved) ML legacy
 haftmann parents: 
32115diff
changeset | 613 | by (auto simp add: INTER_eq_Inter_image Inter_eq) | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 614 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 615 | lemma Inter_image_eq [simp]: | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 616 | "\<Inter>(B`A) = (\<Inter>x\<in>A. B x)" | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 617 | by (rule sym) (fact INTER_eq_Inter_image) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 618 | |
| 11979 | 619 | lemma INT_iff [simp]: "(b: (INT x:A. B x)) = (ALL x:A. b: B x)" | 
| 620 | by (unfold INTER_def) blast | |
| 923 | 621 | |
| 11979 | 622 | lemma INT_I [intro!]: "(!!x. x:A ==> b: B x) ==> b : (INT x:A. B x)" | 
| 623 | by (unfold INTER_def) blast | |
| 624 | ||
| 625 | lemma INT_D [elim]: "b : (INT x:A. B x) ==> a:A ==> b: B a" | |
| 626 | by auto | |
| 627 | ||
| 628 | lemma INT_E [elim]: "b : (INT x:A. B x) ==> (b: B a ==> R) ==> (a~:A ==> R) ==> R" | |
| 629 |   -- {* "Classical" elimination -- by the Excluded Middle on @{prop "a:A"}. *}
 | |
| 630 | by (unfold INTER_def) blast | |
| 631 | ||
| 632 | lemma INT_cong [cong]: | |
| 633 | "A = B ==> (!!x. x:B ==> C x = D x) ==> (INT x:A. C x) = (INT x:B. D x)" | |
| 634 | by (simp add: INTER_def) | |
| 7238 
36e58620ffc8
replaced HOL_quantifiers flag by "HOL" print mode;
 wenzelm parents: 
5931diff
changeset | 635 | |
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 636 | lemma Collect_ball_eq: "{x. \<forall>y\<in>A. P x y} = (\<Inter>y\<in>A. {x. P x y})"
 | 
| 30531 
ab3d61baf66a
reverted to old version of Set.thy -- strange effects have to be traced first
 haftmann parents: 
30352diff
changeset | 637 | by blast | 
| 
ab3d61baf66a
reverted to old version of Set.thy -- strange effects have to be traced first
 haftmann parents: 
30352diff
changeset | 638 | |
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 639 | lemma Collect_all_eq: "{x. \<forall>y. P x y} = (\<Inter>y. {x. P x y})"
 | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 640 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 641 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 642 | lemma INT_lower: "a \<in> A ==> (\<Inter>x\<in>A. B x) \<subseteq> B a" | 
| 32606 
b5c3a8a75772
INTER and UNION are mere abbreviations for INFI and SUPR
 haftmann parents: 
32587diff
changeset | 643 | by (fact INF_leI) | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 644 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 645 | lemma INT_greatest: "(!!x. x \<in> A ==> C \<subseteq> B x) ==> C \<subseteq> (\<Inter>x\<in>A. B x)" | 
| 32606 
b5c3a8a75772
INTER and UNION are mere abbreviations for INFI and SUPR
 haftmann parents: 
32587diff
changeset | 646 | by (fact le_INFI) | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 647 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 648 | lemma INT_empty [simp]: "(\<Inter>x\<in>{}. B x) = UNIV"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 649 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 650 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 651 | lemma INT_absorb: "k \<in> I ==> A k \<inter> (\<Inter>i\<in>I. A i) = (\<Inter>i\<in>I. A i)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 652 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 653 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 654 | lemma INT_subset_iff: "(B \<subseteq> (\<Inter>i\<in>I. A i)) = (\<forall>i\<in>I. B \<subseteq> A i)" | 
| 35629 | 655 | by (fact le_INF_iff) | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 656 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 657 | lemma INT_insert [simp]: "(\<Inter>x \<in> insert a A. B x) = B a \<inter> INTER A B" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 658 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 659 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 660 | lemma INT_Un: "(\<Inter>i \<in> A \<union> B. M i) = (\<Inter>i \<in> A. M i) \<inter> (\<Inter>i\<in>B. M i)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 661 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 662 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 663 | lemma INT_insert_distrib: | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 664 | "u \<in> A ==> (\<Inter>x\<in>A. insert a (B x)) = insert a (\<Inter>x\<in>A. B x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 665 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 666 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 667 | lemma INT_constant [simp]: "(\<Inter>y\<in>A. c) = (if A = {} then UNIV else c)"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 668 | by auto | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 669 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 670 | lemma INT_eq: "(\<Inter>x\<in>A. B x) = \<Inter>({Y. \<exists>x\<in>A. Y = B x})"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 671 |   -- {* Look: it has an \emph{existential} quantifier *}
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 672 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 673 | |
| 18447 | 674 | lemma INTER_UNIV_conv[simp]: | 
| 13653 | 675 | "(UNIV = (INT x:A. B x)) = (\<forall>x\<in>A. B x = UNIV)" | 
| 676 | "((INT x:A. B x) = UNIV) = (\<forall>x\<in>A. B x = UNIV)" | |
| 677 | by blast+ | |
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 678 | |
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 679 | lemma INT_bool_eq: "(\<Inter>b::bool. A b) = (A True \<inter> A False)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 680 | by (auto intro: bool_induct) | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 681 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 682 | lemma Pow_INT_eq: "Pow (\<Inter>x\<in>A. B x) = (\<Inter>x\<in>A. Pow (B x))" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 683 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 684 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 685 | lemma INT_anti_mono: | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 686 | "B \<subseteq> A ==> (!!x. x \<in> A ==> f x \<subseteq> g x) ==> | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 687 | (\<Inter>x\<in>A. f x) \<subseteq> (\<Inter>x\<in>A. g x)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 688 |   -- {* The last inclusion is POSITIVE! *}
 | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 689 | by (blast dest: subsetD) | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 690 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 691 | lemma vimage_INT: "f-`(INT x:A. B x) = (INT x:A. f -` B x)" | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 692 | by blast | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 693 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 694 | |
| 32139 | 695 | subsection {* Distributive laws *}
 | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 696 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 697 | lemma Int_Union: "A \<inter> \<Union>B = (\<Union>C\<in>B. A \<inter> C)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 698 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 699 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 700 | lemma Int_Union2: "\<Union>B \<inter> A = (\<Union>C\<in>B. C \<inter> A)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 701 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 702 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 703 | lemma Un_Union_image: "(\<Union>x\<in>C. A x \<union> B x) = \<Union>(A`C) \<union> \<Union>(B`C)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 704 |   -- {* Devlin, Fundamentals of Contemporary Set Theory, page 12, exercise 5: *}
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 705 |   -- {* Union of a family of unions *}
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 706 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 707 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 708 | lemma UN_Un_distrib: "(\<Union>i\<in>I. A i \<union> B i) = (\<Union>i\<in>I. A i) \<union> (\<Union>i\<in>I. B i)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 709 |   -- {* Equivalent version *}
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 710 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 711 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 712 | lemma Un_Inter: "A \<union> \<Inter>B = (\<Inter>C\<in>B. A \<union> C)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 713 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 714 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 715 | lemma Int_Inter_image: "(\<Inter>x\<in>C. A x \<inter> B x) = \<Inter>(A`C) \<inter> \<Inter>(B`C)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 716 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 717 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 718 | lemma INT_Int_distrib: "(\<Inter>i\<in>I. A i \<inter> B i) = (\<Inter>i\<in>I. A i) \<inter> (\<Inter>i\<in>I. B i)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 719 |   -- {* Equivalent version *}
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 720 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 721 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 722 | lemma Int_UN_distrib: "B \<inter> (\<Union>i\<in>I. A i) = (\<Union>i\<in>I. B \<inter> A i)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 723 |   -- {* Halmos, Naive Set Theory, page 35. *}
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 724 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 725 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 726 | lemma Un_INT_distrib: "B \<union> (\<Inter>i\<in>I. A i) = (\<Inter>i\<in>I. B \<union> A i)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 727 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 728 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 729 | lemma Int_UN_distrib2: "(\<Union>i\<in>I. A i) \<inter> (\<Union>j\<in>J. B j) = (\<Union>i\<in>I. \<Union>j\<in>J. A i \<inter> B j)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 730 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 731 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 732 | lemma Un_INT_distrib2: "(\<Inter>i\<in>I. A i) \<union> (\<Inter>j\<in>J. B j) = (\<Inter>i\<in>I. \<Inter>j\<in>J. A i \<union> B j)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 733 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 734 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 735 | |
| 32139 | 736 | subsection {* Complement *}
 | 
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 737 | |
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 738 | lemma Compl_UN [simp]: "-(\<Union>x\<in>A. B x) = (\<Inter>x\<in>A. -B x)" | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 739 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 740 | |
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 741 | lemma Compl_INT [simp]: "-(\<Inter>x\<in>A. B x) = (\<Union>x\<in>A. -B x)" | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 742 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 743 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 744 | |
| 32139 | 745 | subsection {* Miniscoping and maxiscoping *}
 | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 746 | |
| 13860 | 747 | text {* \medskip Miniscoping: pushing in quantifiers and big Unions
 | 
| 748 | and Intersections. *} | |
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 749 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 750 | lemma UN_simps [simp]: | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 751 |   "!!a B C. (UN x:C. insert a (B x)) = (if C={} then {} else insert a (UN x:C. B x))"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 752 |   "!!A B C. (UN x:C. A x Un B)   = ((if C={} then {} else (UN x:C. A x) Un B))"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 753 |   "!!A B C. (UN x:C. A Un B x)   = ((if C={} then {} else A Un (UN x:C. B x)))"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 754 | "!!A B C. (UN x:C. A x Int B) = ((UN x:C. A x) Int B)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 755 | "!!A B C. (UN x:C. A Int B x) = (A Int (UN x:C. B x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 756 | "!!A B C. (UN x:C. A x - B) = ((UN x:C. A x) - B)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 757 | "!!A B C. (UN x:C. A - B x) = (A - (INT x:C. B x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 758 | "!!A B. (UN x: Union A. B x) = (UN y:A. UN x:y. B x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 759 | "!!A B C. (UN z: UNION A B. C z) = (UN x:A. UN z: B(x). C z)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 760 | "!!A B f. (UN x:f`A. B x) = (UN a:A. B (f a))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 761 | by auto | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 762 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 763 | lemma INT_simps [simp]: | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 764 |   "!!A B C. (INT x:C. A x Int B) = (if C={} then UNIV else (INT x:C. A x) Int B)"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 765 |   "!!A B C. (INT x:C. A Int B x) = (if C={} then UNIV else A Int (INT x:C. B x))"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 766 |   "!!A B C. (INT x:C. A x - B)   = (if C={} then UNIV else (INT x:C. A x) - B)"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 767 |   "!!A B C. (INT x:C. A - B x)   = (if C={} then UNIV else A - (UN x:C. B x))"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 768 | "!!a B C. (INT x:C. insert a (B x)) = insert a (INT x:C. B x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 769 | "!!A B C. (INT x:C. A x Un B) = ((INT x:C. A x) Un B)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 770 | "!!A B C. (INT x:C. A Un B x) = (A Un (INT x:C. B x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 771 | "!!A B. (INT x: Union A. B x) = (INT y:A. INT x:y. B x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 772 | "!!A B C. (INT z: UNION A B. C z) = (INT x:A. INT z: B(x). C z)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 773 | "!!A B f. (INT x:f`A. B x) = (INT a:A. B (f a))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 774 | by auto | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 775 | |
| 35828 
46cfc4b8112e
now use "Named_Thms" for "noatp", and renamed "noatp" to "no_atp"
 blanchet parents: 
35629diff
changeset | 776 | lemma ball_simps [simp,no_atp]: | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 777 | "!!A P Q. (ALL x:A. P x | Q) = ((ALL x:A. P x) | Q)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 778 | "!!A P Q. (ALL x:A. P | Q x) = (P | (ALL x:A. Q x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 779 | "!!A P Q. (ALL x:A. P --> Q x) = (P --> (ALL x:A. Q x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 780 | "!!A P Q. (ALL x:A. P x --> Q) = ((EX x:A. P x) --> Q)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 781 |   "!!P. (ALL x:{}. P x) = True"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 782 | "!!P. (ALL x:UNIV. P x) = (ALL x. P x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 783 | "!!a B P. (ALL x:insert a B. P x) = (P a & (ALL x:B. P x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 784 | "!!A P. (ALL x:Union A. P x) = (ALL y:A. ALL x:y. P x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 785 | "!!A B P. (ALL x: UNION A B. P x) = (ALL a:A. ALL x: B a. P x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 786 | "!!P Q. (ALL x:Collect Q. P x) = (ALL x. Q x --> P x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 787 | "!!A P f. (ALL x:f`A. P x) = (ALL x:A. P (f x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 788 | "!!A P. (~(ALL x:A. P x)) = (EX x:A. ~P x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 789 | by auto | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 790 | |
| 35828 
46cfc4b8112e
now use "Named_Thms" for "noatp", and renamed "noatp" to "no_atp"
 blanchet parents: 
35629diff
changeset | 791 | lemma bex_simps [simp,no_atp]: | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 792 | "!!A P Q. (EX x:A. P x & Q) = ((EX x:A. P x) & Q)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 793 | "!!A P Q. (EX x:A. P & Q x) = (P & (EX x:A. Q x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 794 |   "!!P. (EX x:{}. P x) = False"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 795 | "!!P. (EX x:UNIV. P x) = (EX x. P x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 796 | "!!a B P. (EX x:insert a B. P x) = (P(a) | (EX x:B. P x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 797 | "!!A P. (EX x:Union A. P x) = (EX y:A. EX x:y. P x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 798 | "!!A B P. (EX x: UNION A B. P x) = (EX a:A. EX x:B a. P x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 799 | "!!P Q. (EX x:Collect Q. P x) = (EX x. Q x & P x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 800 | "!!A P f. (EX x:f`A. P x) = (EX x:A. P (f x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 801 | "!!A P. (~(EX x:A. P x)) = (ALL x:A. ~P x)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 802 | by auto | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 803 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 804 | lemma ball_conj_distrib: | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 805 | "(ALL x:A. P x & Q x) = ((ALL x:A. P x) & (ALL x:A. Q x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 806 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 807 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 808 | lemma bex_disj_distrib: | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 809 | "(EX x:A. P x | Q x) = ((EX x:A. P x) | (EX x:A. Q x))" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 810 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 811 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 812 | |
| 13860 | 813 | text {* \medskip Maxiscoping: pulling out big Unions and Intersections. *}
 | 
| 814 | ||
| 815 | lemma UN_extend_simps: | |
| 816 |   "!!a B C. insert a (UN x:C. B x) = (if C={} then {a} else (UN x:C. insert a (B x)))"
 | |
| 817 |   "!!A B C. (UN x:C. A x) Un B    = (if C={} then B else (UN x:C. A x Un B))"
 | |
| 818 |   "!!A B C. A Un (UN x:C. B x)   = (if C={} then A else (UN x:C. A Un B x))"
 | |
| 819 | "!!A B C. ((UN x:C. A x) Int B) = (UN x:C. A x Int B)" | |
| 820 | "!!A B C. (A Int (UN x:C. B x)) = (UN x:C. A Int B x)" | |
| 821 | "!!A B C. ((UN x:C. A x) - B) = (UN x:C. A x - B)" | |
| 822 | "!!A B C. (A - (INT x:C. B x)) = (UN x:C. A - B x)" | |
| 823 | "!!A B. (UN y:A. UN x:y. B x) = (UN x: Union A. B x)" | |
| 824 | "!!A B C. (UN x:A. UN z: B(x). C z) = (UN z: UNION A B. C z)" | |
| 825 | "!!A B f. (UN a:A. B (f a)) = (UN x:f`A. B x)" | |
| 826 | by auto | |
| 827 | ||
| 828 | lemma INT_extend_simps: | |
| 829 |   "!!A B C. (INT x:C. A x) Int B = (if C={} then B else (INT x:C. A x Int B))"
 | |
| 830 |   "!!A B C. A Int (INT x:C. B x) = (if C={} then A else (INT x:C. A Int B x))"
 | |
| 831 |   "!!A B C. (INT x:C. A x) - B   = (if C={} then UNIV-B else (INT x:C. A x - B))"
 | |
| 832 |   "!!A B C. A - (UN x:C. B x)   = (if C={} then A else (INT x:C. A - B x))"
 | |
| 833 | "!!a B C. insert a (INT x:C. B x) = (INT x:C. insert a (B x))" | |
| 834 | "!!A B C. ((INT x:C. A x) Un B) = (INT x:C. A x Un B)" | |
| 835 | "!!A B C. A Un (INT x:C. B x) = (INT x:C. A Un B x)" | |
| 836 | "!!A B. (INT y:A. INT x:y. B x) = (INT x: Union A. B x)" | |
| 837 | "!!A B C. (INT x:A. INT z: B(x). C z) = (INT z: UNION A B. C z)" | |
| 838 | "!!A B f. (INT a:A. B (f a)) = (INT x:f`A. B x)" | |
| 839 | by auto | |
| 840 | ||
| 841 | ||
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 842 | no_notation | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 843 | less_eq (infix "\<sqsubseteq>" 50) and | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 844 | less (infix "\<sqsubset>" 50) and | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 845 | inf (infixl "\<sqinter>" 70) and | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 846 | sup (infixl "\<squnion>" 65) and | 
| 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 847 |   Inf  ("\<Sqinter>_" [900] 900) and
 | 
| 32678 | 848 |   Sup  ("\<Squnion>_" [900] 900) and
 | 
| 849 |   top ("\<top>") and
 | |
| 850 |   bot ("\<bottom>")
 | |
| 32135 
f645b51e8e54
set intersection and union now named inter and union; closer connection between set and lattice operations; factored out complete lattice
 haftmann parents: 
32120diff
changeset | 851 | |
| 30596 | 852 | lemmas mem_simps = | 
| 853 | insert_iff empty_iff Un_iff Int_iff Compl_iff Diff_iff | |
| 854 | mem_Collect_eq UN_iff Union_iff INT_iff Inter_iff | |
| 855 |   -- {* Each of these has ALREADY been added @{text "[simp]"} above. *}
 | |
| 21669 | 856 | |
| 11979 | 857 | end |