| author | nipkow | 
| Tue, 20 Oct 2009 14:44:02 +0200 | |
| changeset 33019 | bcf56a64ce1a | 
| parent 32879 | 7f5ce7af45fd | 
| child 34007 | aea892559fc5 | 
| 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 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 10 | less_eq (infix "\<sqsubseteq>" 50) and | 
| 
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 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 12 | inf (infixl "\<sqinter>" 70) and | 
| 32678 | 13 | sup (infixl "\<squnion>" 65) and | 
| 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 | ||
| 32879 | 28 | class complete_lattice = lattice + bot + top + 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: | 
| 32879 | 36 | "complete_lattice Sup Inf (op \<ge>) (op >) (op \<squnion>) (op \<sqinter>) \<top> \<bottom>" | 
| 32678 | 37 | by (auto intro!: complete_lattice.intro dual_lattice | 
| 38 | bot.intro top.intro dual_preorder, unfold_locales) | |
| 39 | (fact bot_least top_greatest | |
| 40 | Sup_upper Sup_least Inf_lower Inf_greatest)+ | |
| 41 | ||
| 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 | lemma Inf_Sup: "\<Sqinter>A = \<Squnion>{b. \<forall>a \<in> A. b \<le> a}"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 43 | 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 | 44 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 45 | lemma Sup_Inf:  "\<Squnion>A = \<Sqinter>{b. \<forall>a \<in> A. a \<le> b}"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 46 | 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 | 47 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 48 | lemma Inf_Univ: "\<Sqinter>UNIV = \<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 | 49 | unfolding Sup_Inf 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 | 50 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 51 | lemma Sup_Univ: "\<Squnion>UNIV = \<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 | 52 | unfolding Inf_Sup 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 | 53 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 54 | 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 | 55 | 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 | 56 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 57 | 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 | 58 | 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 | 59 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 60 | 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 | 61 |   "\<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 | 62 | 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 | 63 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 64 | 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 | 65 |   "\<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 | 66 | 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 | 67 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 68 | lemma Inf_insert_simp: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 69 |   "\<Sqinter>insert a A = (if A = {} then a else 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 | 70 |   by (cases "A = {}") (simp_all, simp add: Inf_insert)
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 71 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 72 | lemma Sup_insert_simp: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 73 |   "\<Squnion>insert a A = (if A = {} then a else 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 | 74 |   by (cases "A = {}") (simp_all, simp add: Sup_insert)
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 75 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 76 | 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 | 77 |   "\<Sqinter>{a, b} = a \<sqinter> b"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 78 | by (auto simp add: Inf_insert_simp) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 79 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 80 | 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 | 81 |   "\<Squnion>{a, b} = a \<squnion> b"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 82 | by (auto simp add: Sup_insert_simp) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 83 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 84 | lemma bot_def: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 85 |   "bot = \<Squnion>{}"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 86 | by (auto intro: antisym 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 | 87 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 88 | lemma top_def: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 89 |   "top = \<Sqinter>{}"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 90 | by (auto intro: antisym 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 | 91 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 92 | lemma sup_bot [simp]: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 93 | "x \<squnion> bot = x" | 
| 32642 
026e7c6a6d08
be more cautious wrt. simp rules: inf_absorb1, inf_absorb2, sup_absorb1, sup_absorb2 are no simp rules by default any longer
 haftmann parents: 
32606diff
changeset | 94 | using bot_least [of x] by (simp add: sup_commute sup_absorb2) | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 95 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 96 | lemma inf_top [simp]: | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 97 | "x \<sqinter> top = x" | 
| 32642 
026e7c6a6d08
be more cautious wrt. simp rules: inf_absorb1, inf_absorb2, sup_absorb1, sup_absorb2 are no simp rules by default any longer
 haftmann parents: 
32606diff
changeset | 98 | using top_greatest [of x] by (simp add: inf_commute inf_absorb2) | 
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 99 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 100 | 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 | 101 | "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 | 102 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 103 | 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 | 104 | "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 | 105 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 106 | end | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 107 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 108 | syntax | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 109 |   "_SUP1"     :: "pttrns => 'b => 'b"           ("(3SUP _./ _)" [0, 10] 10)
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 110 |   "_SUP"      :: "pttrn => 'a set => 'b => 'b"  ("(3SUP _:_./ _)" [0, 10] 10)
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 111 |   "_INF1"     :: "pttrns => 'b => 'b"           ("(3INF _./ _)" [0, 10] 10)
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 112 |   "_INF"      :: "pttrn => 'a set => 'b => 'b"  ("(3INF _:_./ _)" [0, 10] 10)
 | 
| 
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 | translations | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 115 | "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 | 116 | "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 | 117 | "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 | 118 | "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 | 119 | "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 | 120 | "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 | 121 | "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 | 122 | "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 | 123 | |
| 32120 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 124 | print_translation {* [
 | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 125 | Syntax.preserve_binder_abs2_tr' @{const_syntax SUPR} "_SUP",
 | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 126 | Syntax.preserve_binder_abs2_tr' @{const_syntax INFI} "_INF"
 | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 127 | ] *} -- {* to avoid eta-contraction of body *}
 | 
| 11979 | 128 | |
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 129 | 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 | 130 | begin | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 131 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 132 | lemma le_SUPI: "i : A \<Longrightarrow> M i \<le> (SUP i:A. M i)" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 133 | 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 | 134 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 135 | lemma SUP_leI: "(\<And>i. i : A \<Longrightarrow> M i \<le> u) \<Longrightarrow> (SUP i:A. M i) \<le> u" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 136 | 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 | 137 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 138 | lemma INF_leI: "i : A \<Longrightarrow> (INF i:A. M i) \<le> M i" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 139 | 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 | 140 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 141 | lemma le_INFI: "(\<And>i. i : A \<Longrightarrow> u \<le> M i) \<Longrightarrow> u \<le> (INF i:A. M i)" | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 142 | 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 | 143 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 144 | 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 | 145 | 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 | 146 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 147 | 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 | 148 | 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 | 149 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 150 | end | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 151 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 152 | |
| 32139 | 153 | 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 | 154 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 155 | 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 | 156 | begin | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 157 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 158 | definition | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 159 | 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 | 160 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 161 | definition | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 162 | 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 | 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 | 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 | 165 | 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 | 166 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 167 | end | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 168 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 169 | 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 | 170 |   "\<Sqinter>{}"
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 171 | 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 | 172 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 173 | 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 | 174 |   "\<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 | 175 | 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 | 176 | |
| 32120 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 177 | lemma INFI_bool_eq: | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 178 | "INFI = Ball" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 179 | proof (rule ext)+ | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 180 | fix A :: "'a set" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 181 | fix P :: "'a \<Rightarrow> bool" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 182 | 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 | 183 | 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 | 184 | qed | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 185 | |
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 186 | lemma SUPR_bool_eq: | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 187 | "SUPR = Bex" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 188 | proof (rule ext)+ | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 189 | fix A :: "'a set" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 190 | fix P :: "'a \<Rightarrow> bool" | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 191 | 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 | 192 | 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 | 193 | qed | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 194 | |
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 195 | 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 | 196 | begin | 
| 
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 | definition | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 199 |   Inf_fun_def [code del]: "\<Sqinter>A = (\<lambda>x. \<Sqinter>{y. \<exists>f\<in>A. y = 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 | 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 | definition | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 202 |   Sup_fun_def [code del]: "\<Squnion>A = (\<lambda>x. \<Squnion>{y. \<exists>f\<in>A. y = 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 | 203 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 204 | 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 | 205 | 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 | 206 | 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 | 207 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 208 | end | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 209 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 210 | 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 | 211 |   "\<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 | 212 | 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 | 213 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 214 | 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 | 215 |   "\<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 | 216 | 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 | 217 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 218 | |
| 32139 | 219 | subsection {* Union *}
 | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 220 | |
| 32587 
caa5ada96a00
Inter and Union are mere abbreviations for Inf and Sup
 haftmann parents: 
32436diff
changeset | 221 | abbreviation Union :: "'a set set \<Rightarrow> 'a set" where | 
| 
caa5ada96a00
Inter and Union are mere abbreviations for Inf and Sup
 haftmann parents: 
32436diff
changeset | 222 | "Union S \<equiv> \<Squnion>S" | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 223 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 224 | notation (xsymbols) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 225 |   Union  ("\<Union>_" [90] 90)
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 226 | |
| 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 | 227 | 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 | 228 |   "\<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 | 229 | proof (rule set_ext) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 230 | 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 | 231 |   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 | 232 | 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 | 233 |   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 | 234 | 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 | 235 | qed | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 236 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 237 | lemma Union_iff [simp, noatp]: | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 238 | "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 | 239 | by (unfold Union_eq) blast | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 240 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 241 | lemma UnionI [intro]: | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 242 | "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 | 243 |   -- {* 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 | 244 |     @{term A} may be flexible. *}
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 245 | by auto | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 246 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 247 | lemma UnionE [elim!]: | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 248 | "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 | 249 | by auto | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 250 | |
| 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 | 251 | 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 | 252 | 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 | 253 | |
| 
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 | 254 | 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 | 255 | 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 | 256 | |
| 
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 | 257 | 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 | 258 | 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 | 259 | |
| 
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 | 260 | 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 | 261 | 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 | 262 | |
| 
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 | 263 | 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 | 264 | 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 | 265 | |
| 
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 | 266 | 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 | 267 | 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 | 268 | |
| 
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 | 269 | 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 | 270 | 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 | 271 | |
| 
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 | 272 | 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 | 273 | 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 | 274 | |
| 
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 | 275 | lemma Union_empty_conv [simp,noatp]: "(\<Union>A = {}) = (\<forall>x\<in>A. 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 | 276 | 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 | 277 | |
| 
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 | 278 | lemma empty_Union_conv [simp,noatp]: "({} = \<Union>A) = (\<forall>x\<in>A. 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 | 279 | 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 | 280 | |
| 
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 | 281 | 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 | 282 | 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 | 283 | |
| 
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 | 284 | 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 | 285 | 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 | 286 | |
| 
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 | 287 | 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 | 288 | 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 | 289 | |
| 
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 | 290 | 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 | 291 | 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 | 292 | |
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 293 | |
| 32139 | 294 | 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 | 295 | |
| 32606 
b5c3a8a75772
INTER and UNION are mere abbreviations for INFI and SUPR
 haftmann parents: 
32587diff
changeset | 296 | 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 | 297 | "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 | 298 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 299 | syntax | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 300 |   "@UNION1"     :: "pttrns => 'b set => 'b set"           ("(3UN _./ _)" [0, 10] 10)
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 301 |   "@UNION"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3UN _:_./ _)" [0, 10] 10)
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 302 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 303 | syntax (xsymbols) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 304 |   "@UNION1"     :: "pttrns => 'b set => 'b set"           ("(3\<Union>_./ _)" [0, 10] 10)
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 305 |   "@UNION"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3\<Union>_\<in>_./ _)" [0, 10] 10)
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 306 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 307 | syntax (latex output) | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 308 |   "@UNION1"     :: "pttrns => 'b set => 'b set"           ("(3\<Union>(00\<^bsub>_\<^esub>)/ _)" [0, 10] 10)
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 309 |   "@UNION"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3\<Union>(00\<^bsub>_\<in>_\<^esub>)/ _)" [0, 10] 10)
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 310 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 311 | translations | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 312 | "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 | 313 | "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 | 314 | "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 | 315 | "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 | 316 | |
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 317 | text {*
 | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 318 | 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 | 319 |   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 | 320 |   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 | 321 | 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 | 322 | 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 | 323 | 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 | 324 | *} | 
| 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 325 | |
| 32120 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 326 | print_translation {* [
 | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 327 | Syntax.preserve_binder_abs2_tr' @{const_syntax UNION} "@UNION"
 | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 328 | ] *} -- {* 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 | 329 | |
| 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 | 330 | 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 | 331 | "(\<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 | 332 | by (fact SUPR_def) | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 333 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 334 | lemma Union_def: | 
| 32117 
0762b9ad83df
Set.thy: prefer = over == where possible; tuned ML setup; dropped (moved) ML legacy
 haftmann parents: 
32115diff
changeset | 335 | "\<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 | 336 | 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 | 337 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 338 | lemma UNION_def [noatp]: | 
| 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 | 339 |   "(\<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 | 340 | 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 | 341 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 342 | lemma Union_image_eq [simp]: | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 343 | "\<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 | 344 | 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 | 345 | |
| 11979 | 346 | lemma UN_iff [simp]: "(b: (UN x:A. B x)) = (EX x:A. b: B x)" | 
| 347 | by (unfold UNION_def) blast | |
| 348 | ||
| 349 | lemma UN_I [intro]: "a:A ==> b: B a ==> b: (UN x:A. B x)" | |
| 350 |   -- {* The order of the premises presupposes that @{term A} is rigid;
 | |
| 351 |     @{term b} may be flexible. *}
 | |
| 352 | by auto | |
| 353 | ||
| 354 | lemma UN_E [elim!]: "b : (UN x:A. B x) ==> (!!x. x:A ==> b: B x ==> R) ==> R" | |
| 355 | by (unfold UNION_def) blast | |
| 923 | 356 | |
| 11979 | 357 | lemma UN_cong [cong]: | 
| 358 | "A = B ==> (!!x. x:B ==> C x = D x) ==> (UN x:A. C x) = (UN x:B. D x)" | |
| 359 | by (simp add: UNION_def) | |
| 360 | ||
| 29691 | 361 | lemma strong_UN_cong: | 
| 362 | "A = B ==> (!!x. x:B =simp=> C x = D x) ==> (UN x:A. C x) = (UN x:B. D x)" | |
| 363 | by (simp add: UNION_def simp_implies_def) | |
| 364 | ||
| 32077 
3698947146b2
closer relation of sets and complete lattices; corresponding consts, defs and syntax at similar places in theory text
 haftmann parents: 
32064diff
changeset | 365 | 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 | 366 | 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 | 367 | |
| 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 | 368 | 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 | 369 | 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 | 370 | |
| 
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 | 371 | 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 | 372 | 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 | 373 | |
| 
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 | 374 | lemma Collect_bex_eq [noatp]: "{x. \<exists>y\<in>A. P x y} = (\<Union>y\<in>A. {x. P x 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 | 375 | 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 | 376 | |
| 
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 | 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 | 378 | 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 | 379 | |
| 
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 | 380 | lemma UN_empty [simp,noatp]: "(\<Union>x\<in>{}. 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 | 381 | 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 | 382 | |
| 
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 | 383 | 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 | 384 | 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 | 385 | |
| 
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 | 386 | 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 | 387 | 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 | 388 | |
| 
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 | 389 | 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 | 390 | 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 | 391 | |
| 
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 | 392 | 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 | 393 | 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 | 394 | |
| 
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 | 395 | 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 | 396 | 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 | 397 | |
| 
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 | 398 | 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 | 399 | 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 | 400 | |
| 
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 | 401 | lemma UN_subset_iff: "((\<Union>i\<in>I. A i) \<subseteq> B) = (\<forall>i\<in>I. A i \<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 | 402 | 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 | 403 | |
| 
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 | 404 | 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 | 405 | 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 | 406 | |
| 
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 | 407 | 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 | 408 | 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 | 409 | |
| 
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 | 410 | 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 | 411 | 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 | 412 | |
| 
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 | 413 | 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 | 414 |   "({} = (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 | 415 |   "((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 | 416 | 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 | 417 | |
| 
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 | lemma Collect_ex_eq [noatp]: "{x. \<exists>y. P x y} = (\<Union>y. {x. P x 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 | 419 | 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 | 420 | |
| 
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 | 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 | 422 | 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 | 423 | |
| 
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 | 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 | 425 | 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 | 426 | |
| 
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 | 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 | 428 | 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 | 429 | |
| 
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 | 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 | 431 | 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 | 432 | |
| 
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 | 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 | 434 | 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 | 435 | |
| 
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 | 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 | 437 | "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 | 438 | (\<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 | 439 | 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 | 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 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 | 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 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 | 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 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 | 448 |   -- {* 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 | 449 | 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 | 450 | |
| 
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 | 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 | 452 | 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 | 453 | |
| 11979 | 454 | |
| 32139 | 455 | subsection {* Inter *}
 | 
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 456 | |
| 32587 
caa5ada96a00
Inter and Union are mere abbreviations for Inf and Sup
 haftmann parents: 
32436diff
changeset | 457 | abbreviation Inter :: "'a set set \<Rightarrow> 'a set" where | 
| 
caa5ada96a00
Inter and Union are mere abbreviations for Inf and Sup
 haftmann parents: 
32436diff
changeset | 458 | "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 | 459 | |
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 460 | notation (xsymbols) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 461 |   Inter  ("\<Inter>_" [90] 90)
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 462 | |
| 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 | 463 | lemma Inter_eq [code del]: | 
| 
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 | 464 |   "\<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 | 465 | proof (rule set_ext) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 466 | 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 | 467 |   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 | 468 | 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 | 469 |   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 | 470 | 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 | 471 | qed | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 472 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 473 | lemma Inter_iff [simp,noatp]: "(A : Inter C) = (ALL X:C. A:X)" | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 474 | by (unfold Inter_eq) blast | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 475 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 476 | 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 | 477 | by (simp add: Inter_eq) | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 478 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 479 | text {*
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 480 |   \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 | 481 |   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 | 482 |   @{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 | 483 | *} | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 484 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 485 | 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 | 486 | by auto | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 487 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 488 | 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 | 489 |   -- {* ``Classical'' elimination rule -- does not require proving
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 490 |     @{prop "X:C"}. *}
 | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 491 | by (unfold Inter_eq) blast | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 492 | |
| 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 | 493 | 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 | 494 | 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 | 495 | |
| 
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 | 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 | 497 |   "[| !!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 | 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 | |
| 
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 | 500 | 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 | 501 | 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 | 502 | |
| 
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 | 503 | 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 | 504 | 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 | 505 | |
| 
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 | 506 | 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 | 507 | 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 | 508 | |
| 
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 | 509 | 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 | 510 | 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 | 511 | |
| 
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 | 512 | 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 | 513 | 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 | 514 | |
| 
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 | 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 | 516 | 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 | 517 | |
| 
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 | 518 | 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 | 519 | 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 | 520 | |
| 
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 | 521 | lemma Inter_UNIV_conv [simp,noatp]: | 
| 
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 | 522 | "(\<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 | 523 | "(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 | 524 | 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 | 525 | |
| 
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 | 526 | 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 | 527 | 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 | 528 | |
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 529 | |
| 32139 | 530 | subsection {* Intersections of families *}
 | 
| 11979 | 531 | |
| 32606 
b5c3a8a75772
INTER and UNION are mere abbreviations for INFI and SUPR
 haftmann parents: 
32587diff
changeset | 532 | 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 | 533 | "INTER \<equiv> INFI" | 
| 32081 | 534 | |
| 535 | syntax | |
| 536 |   "@INTER1"     :: "pttrns => 'b set => 'b set"           ("(3INT _./ _)" [0, 10] 10)
 | |
| 537 |   "@INTER"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3INT _:_./ _)" [0, 10] 10)
 | |
| 538 | ||
| 539 | syntax (xsymbols) | |
| 540 |   "@INTER1"     :: "pttrns => 'b set => 'b set"           ("(3\<Inter>_./ _)" [0, 10] 10)
 | |
| 541 |   "@INTER"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3\<Inter>_\<in>_./ _)" [0, 10] 10)
 | |
| 542 | ||
| 543 | syntax (latex output) | |
| 544 |   "@INTER1"     :: "pttrns => 'b set => 'b set"           ("(3\<Inter>(00\<^bsub>_\<^esub>)/ _)" [0, 10] 10)
 | |
| 545 |   "@INTER"      :: "pttrn => 'a set => 'b set => 'b set"  ("(3\<Inter>(00\<^bsub>_\<in>_\<^esub>)/ _)" [0, 10] 10)
 | |
| 546 | ||
| 547 | translations | |
| 548 | "INT x y. B" == "INT x. INT y. B" | |
| 549 | "INT x. B" == "CONST INTER CONST UNIV (%x. B)" | |
| 550 | "INT x. B" == "INT x:CONST UNIV. B" | |
| 551 | "INT x:A. B" == "CONST INTER A (%x. B)" | |
| 552 | ||
| 32120 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 553 | print_translation {* [
 | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 554 | Syntax.preserve_binder_abs2_tr' @{const_syntax INTER} "@INTER"
 | 
| 
53a21a5e6889
attempt for more concise setup of non-etacontracting binders
 haftmann parents: 
32117diff
changeset | 555 | ] *} -- {* to avoid eta-contraction of body *}
 | 
| 32081 | 556 | |
| 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 | 557 | 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 | 558 | "(\<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 | 559 | 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 | 560 | |
| 32115 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 561 | 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 | 562 | "\<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 | 563 | 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 | 564 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 565 | 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 | 566 |   "(\<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 | 567 | 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 | 568 | |
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 569 | lemma Inter_image_eq [simp]: | 
| 
8f10fb3bb46e
swapped bootstrap order of UNION/Union and INTER/Inter in theory Set
 haftmann parents: 
32082diff
changeset | 570 | "\<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 | 571 | 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 | 572 | |
| 11979 | 573 | lemma INT_iff [simp]: "(b: (INT x:A. B x)) = (ALL x:A. b: B x)" | 
| 574 | by (unfold INTER_def) blast | |
| 923 | 575 | |
| 11979 | 576 | lemma INT_I [intro!]: "(!!x. x:A ==> b: B x) ==> b : (INT x:A. B x)" | 
| 577 | by (unfold INTER_def) blast | |
| 578 | ||
| 579 | lemma INT_D [elim]: "b : (INT x:A. B x) ==> a:A ==> b: B a" | |
| 580 | by auto | |
| 581 | ||
| 582 | lemma INT_E [elim]: "b : (INT x:A. B x) ==> (b: B a ==> R) ==> (a~:A ==> R) ==> R" | |
| 583 |   -- {* "Classical" elimination -- by the Excluded Middle on @{prop "a:A"}. *}
 | |
| 584 | by (unfold INTER_def) blast | |
| 585 | ||
| 586 | lemma INT_cong [cong]: | |
| 587 | "A = B ==> (!!x. x:B ==> C x = D x) ==> (INT x:A. C x) = (INT x:B. D x)" | |
| 588 | by (simp add: INTER_def) | |
| 7238 
36e58620ffc8
replaced HOL_quantifiers flag by "HOL" print mode;
 wenzelm parents: 
5931diff
changeset | 589 | |
| 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 | 590 | 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 | 591 | by blast | 
| 
ab3d61baf66a
reverted to old version of Set.thy -- strange effects have to be traced first
 haftmann parents: 
30352diff
changeset | 592 | |
| 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 | 593 | 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 | 594 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 595 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 596 | 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 | 597 | by (fact INF_leI) | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 598 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 599 | 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 | 600 | by (fact le_INFI) | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 601 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 602 | 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 | 603 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 604 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 605 | 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 | 606 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 607 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 608 | lemma INT_subset_iff: "(B \<subseteq> (\<Inter>i\<in>I. A i)) = (\<forall>i\<in>I. B \<subseteq> A i)" | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 609 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 610 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 611 | 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 | 612 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 613 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 614 | 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 | 615 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 616 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 617 | lemma INT_insert_distrib: | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 618 | "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 | 619 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 620 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 621 | 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 | 622 | by auto | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 623 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 624 | 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 | 625 |   -- {* Look: it has an \emph{existential} quantifier *}
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 626 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 627 | |
| 18447 | 628 | lemma INTER_UNIV_conv[simp]: | 
| 13653 | 629 | "(UNIV = (INT x:A. B x)) = (\<forall>x\<in>A. B x = UNIV)" | 
| 630 | "((INT x:A. B x) = UNIV) = (\<forall>x\<in>A. B x = UNIV)" | |
| 631 | by blast+ | |
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 632 | |
| 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 | 633 | 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 | 634 | 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 | 635 | |
| 
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 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 | 637 | 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 | 638 | |
| 
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 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 | 640 | "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 | 641 | (\<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 | 642 |   -- {* 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 | 643 | 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 | 644 | |
| 
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 | 645 | 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 | 646 | 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 | 647 | |
| 
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 | 648 | |
| 32139 | 649 | subsection {* Distributive laws *}
 | 
| 12897 
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_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 | 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_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 | 655 | by blast | 
| 
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 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 | 658 |   -- {* 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 | 659 |   -- {* Union of a family of unions *}
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 660 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 661 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 662 | 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 | 663 |   -- {* Equivalent version *}
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 664 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 665 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 666 | 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 | 667 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 668 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 669 | 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 | 670 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 671 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 672 | 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 | 673 |   -- {* Equivalent version *}
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 674 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 675 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 676 | 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 | 677 |   -- {* Halmos, Naive Set Theory, page 35. *}
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 678 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 679 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 680 | 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 | 681 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 682 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 683 | 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 | 684 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 685 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 686 | 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 | 687 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 688 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 689 | |
| 32139 | 690 | 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 | 691 | |
| 
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 | 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 | 693 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 694 | |
| 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 | 695 | 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 | 696 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 697 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 698 | |
| 32139 | 699 | subsection {* Miniscoping and maxiscoping *}
 | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 700 | |
| 13860 | 701 | text {* \medskip Miniscoping: pushing in quantifiers and big Unions
 | 
| 702 | and Intersections. *} | |
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 703 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 704 | lemma UN_simps [simp]: | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 705 |   "!!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 | 706 |   "!!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 | 707 |   "!!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 | 708 | "!!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 | 709 | "!!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 | 710 | "!!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 | 711 | "!!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 | 712 | "!!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 | 713 | "!!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 | 714 | "!!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 | 715 | by auto | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 716 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 717 | lemma INT_simps [simp]: | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 718 |   "!!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 | 719 |   "!!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 | 720 |   "!!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 | 721 |   "!!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 | 722 | "!!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 | 723 | "!!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 | 724 | "!!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 | 725 | "!!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 | 726 | "!!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 | 727 | "!!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 | 728 | by auto | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 729 | |
| 24286 
7619080e49f0
ATP blacklisting is now in theory data, attribute noatp
 paulson parents: 
24280diff
changeset | 730 | lemma ball_simps [simp,noatp]: | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 731 | "!!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 | 732 | "!!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 | 733 | "!!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 | 734 | "!!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 | 735 |   "!!P. (ALL x:{}. P x) = True"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 736 | "!!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 | 737 | "!!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 | 738 | "!!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 | 739 | "!!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 | 740 | "!!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 | 741 | "!!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 | 742 | "!!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 | 743 | by auto | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 744 | |
| 24286 
7619080e49f0
ATP blacklisting is now in theory data, attribute noatp
 paulson parents: 
24280diff
changeset | 745 | lemma bex_simps [simp,noatp]: | 
| 12897 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 746 | "!!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 | 747 | "!!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 | 748 |   "!!P. (EX x:{}. P x) = False"
 | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 749 | "!!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 | 750 | "!!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 | 751 | "!!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 | 752 | "!!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 | 753 | "!!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 | 754 | "!!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 | 755 | "!!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 | 756 | by auto | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 757 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 758 | lemma ball_conj_distrib: | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 759 | "(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 | 760 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 761 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 762 | lemma bex_disj_distrib: | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 763 | "(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 | 764 | by blast | 
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 765 | |
| 
f4d10ad0ea7b
converted/deleted equalities.ML, mono.ML, subset.ML (see Set.thy);
 wenzelm parents: 
12633diff
changeset | 766 | |
| 13860 | 767 | text {* \medskip Maxiscoping: pulling out big Unions and Intersections. *}
 | 
| 768 | ||
| 769 | lemma UN_extend_simps: | |
| 770 |   "!!a B C. insert a (UN x:C. B x) = (if C={} then {a} else (UN x:C. insert a (B x)))"
 | |
| 771 |   "!!A B C. (UN x:C. A x) Un B    = (if C={} then B else (UN x:C. A x Un B))"
 | |
| 772 |   "!!A B C. A Un (UN x:C. B x)   = (if C={} then A else (UN x:C. A Un B x))"
 | |
| 773 | "!!A B C. ((UN x:C. A x) Int B) = (UN x:C. A x Int B)" | |
| 774 | "!!A B C. (A Int (UN x:C. B x)) = (UN x:C. A Int B x)" | |
| 775 | "!!A B C. ((UN x:C. A x) - B) = (UN x:C. A x - B)" | |
| 776 | "!!A B C. (A - (INT x:C. B x)) = (UN x:C. A - B x)" | |
| 777 | "!!A B. (UN y:A. UN x:y. B x) = (UN x: Union A. B x)" | |
| 778 | "!!A B C. (UN x:A. UN z: B(x). C z) = (UN z: UNION A B. C z)" | |
| 779 | "!!A B f. (UN a:A. B (f a)) = (UN x:f`A. B x)" | |
| 780 | by auto | |
| 781 | ||
| 782 | lemma INT_extend_simps: | |
| 783 |   "!!A B C. (INT x:C. A x) Int B = (if C={} then B else (INT x:C. A x Int B))"
 | |
| 784 |   "!!A B C. A Int (INT x:C. B x) = (if C={} then A else (INT x:C. A Int B x))"
 | |
| 785 |   "!!A B C. (INT x:C. A x) - B   = (if C={} then UNIV-B else (INT x:C. A x - B))"
 | |
| 786 |   "!!A B C. A - (UN x:C. B x)   = (if C={} then A else (INT x:C. A - B x))"
 | |
| 787 | "!!a B C. insert a (INT x:C. B x) = (INT x:C. insert a (B x))" | |
| 788 | "!!A B C. ((INT x:C. A x) Un B) = (INT x:C. A x Un B)" | |
| 789 | "!!A B C. A Un (INT x:C. B x) = (INT x:C. A Un B x)" | |
| 790 | "!!A B. (INT y:A. INT x:y. B x) = (INT x: Union A. B x)" | |
| 791 | "!!A B C. (INT x:A. INT z: B(x). C z) = (INT z: UNION A B. C z)" | |
| 792 | "!!A B f. (INT a:A. B (f a)) = (INT x:f`A. B x)" | |
| 793 | by auto | |
| 794 | ||
| 795 | ||
| 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 | 796 | 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 | 797 | 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 | 798 | 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 | 799 | 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 | 800 | 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 | 801 |   Inf  ("\<Sqinter>_" [900] 900) and
 | 
| 32678 | 802 |   Sup  ("\<Squnion>_" [900] 900) and
 | 
| 803 |   top ("\<top>") and
 | |
| 804 |   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 | 805 | |
| 30596 | 806 | lemmas mem_simps = | 
| 807 | insert_iff empty_iff Un_iff Int_iff Compl_iff Diff_iff | |
| 808 | mem_Collect_eq UN_iff Union_iff INT_iff Inter_iff | |
| 809 |   -- {* Each of these has ALREADY been added @{text "[simp]"} above. *}
 | |
| 21669 | 810 | |
| 11979 | 811 | end |