@@ -44,51 +44,65 @@ variable {ι : Sort*} {S : Set (Set α)} {f : ι → Set α} {s t : Set α} {a :
4444open Set
4545
4646/-- A set `s` is *sup-closed* if `a ⊔ b ∈ s` for all `a ∈ s`, `b ∈ s`. -/
47+ @ [to_dual /-- A set `s` is *inf-closed* if `a ⊓ b ∈ s` for all `a ∈ s`, `b ∈ s`. -/ ]
4748def SupClosed (s : Set α) : Prop := ∀ ⦃a⦄, a ∈ s → ∀ ⦃b⦄, b ∈ s → a ⊔ b ∈ s
4849
49- @[simp] lemma supClosed_empty : SupClosed (∅ : Set α) := by simp [SupClosed]
50- @[simp] lemma supClosed_singleton : SupClosed ({a} : Set α) := by simp [SupClosed]
50+ @ [to_dual (attr := simp) ] lemma supClosed_empty : SupClosed (∅ : Set α) := by simp [SupClosed]
51+ @ [to_dual (attr := simp) ] lemma supClosed_singleton : SupClosed ({a} : Set α) := by simp [SupClosed]
5152
52- @[simp] lemma supClosed_univ : SupClosed (univ : Set α) := by simp [SupClosed]
53+ @ [to_dual (attr := simp)] lemma supClosed_univ : SupClosed (univ : Set α) := by simp [SupClosed]
54+
55+ @[to_dual]
5356lemma SupClosed.inter (hs : SupClosed s) (ht : SupClosed t) : SupClosed (s ∩ t) :=
5457 fun _a ha _b hb ↦ ⟨hs ha.1 hb.1 , ht ha.2 hb.2 ⟩
5558
59+ @[to_dual]
5660lemma supClosed_sInter (hS : ∀ s ∈ S, SupClosed s) : SupClosed (⋂₀ S) :=
5761 fun _a ha _b hb _s hs ↦ hS _ hs (ha _ hs) (hb _ hs)
5862
63+ @[to_dual]
5964lemma supClosed_iInter (hf : ∀ i, SupClosed (f i)) : SupClosed (⋂ i, f i) :=
6065 supClosed_sInter <| forall_mem_range.2 hf
6166
67+ @ [to_dual InfClosed.codirectedOn]
6268lemma SupClosed.directedOn (hs : SupClosed s) : DirectedOn (· ≤ ·) s :=
6369 fun _a ha _b hb ↦ ⟨_, hs ha hb, le_sup_left, le_sup_right⟩
6470
71+ @[to_dual]
6572lemma IsUpperSet.supClosed (hs : IsUpperSet s) : SupClosed s := fun _a _ _b ↦ hs le_sup_right
6673
74+ @[to_dual]
6775lemma SupClosed.preimage [FunLike F β α] [SupHomClass F β α] (hs : SupClosed s) (f : F) :
6876 SupClosed (f ⁻¹' s) :=
6977 fun a ha b hb ↦ by simpa [map_sup] using hs ha hb
7078
79+ @[to_dual]
7180lemma SupClosed.image [FunLike F α β] [SupHomClass F α β] (hs : SupClosed s) (f : F) :
7281 SupClosed (f '' s) := by
7382 rintro _ ⟨a, ha, rfl⟩ _ ⟨b, hb, rfl⟩
7483 rw [← map_sup]
7584 exact Set.mem_image_of_mem _ <| hs ha hb
7685
86+ @[to_dual]
7787lemma supClosed_range [FunLike F α β] [SupHomClass F α β] (f : F) : SupClosed (Set.range f) := by
7888 simpa using supClosed_univ.image f
7989
90+ @[to_dual]
8091lemma SupClosed.prod {t : Set β} (hs : SupClosed s) (ht : SupClosed t) : SupClosed (s ×ˢ t) :=
8192 fun _a ha _b hb ↦ ⟨hs ha.1 hb.1 , ht ha.2 hb.2 ⟩
8293
94+ @[to_dual]
8395lemma supClosed_pi {ι : Type *} {α : ι → Type *} [∀ i, SemilatticeSup (α i)] {s : Set ι}
8496 {t : ∀ i, Set (α i)} (ht : ∀ i ∈ s, SupClosed (t i)) : SupClosed (s.pi t) :=
8597 fun _a ha _b hb _i hi ↦ ht _ hi (ha _ hi) (hb _ hi)
8698
99+ @[to_dual]
87100lemma SupClosed.insert_upperBounds {s : Set α} {a : α} (hs : SupClosed s) (ha : a ∈ upperBounds s) :
88101 SupClosed (insert a s) := by
89102 rw [SupClosed]
90103 aesop
91104
105+ @[to_dual]
92106lemma SupClosed.insert_lowerBounds {s : Set α} {a : α} (h : SupClosed s) (ha : a ∈ lowerBounds s) :
93107 SupClosed (insert a s) := by
94108 rw [SupClosed]
@@ -101,93 +115,19 @@ section Finset
101115variable {ι : Type *} {f : ι → α} {s : Set α} {t : Finset ι} {a : α}
102116open Finset
103117
118+ @[to_dual]
104119lemma SupClosed.finsetSup'_mem (hs : SupClosed s) (ht : t.Nonempty) :
105120 (∀ i ∈ t, f i ∈ s) → t.sup' ht f ∈ s :=
106121 sup'_induction _ _ hs
107122
123+ @[to_dual]
108124lemma SupClosed.finsetSup_mem [OrderBot α] (hs : SupClosed s) (ht : t.Nonempty) :
109125 (∀ i ∈ t, f i ∈ s) → t.sup f ∈ s :=
110126 sup'_eq_sup ht f ▸ hs.finsetSup'_mem ht
111127
112128end Finset
113129end SemilatticeSup
114130
115- section SemilatticeInf
116- variable [SemilatticeInf α] [SemilatticeInf β]
117-
118- section Set
119- variable {ι : Sort *} {S : Set (Set α)} {f : ι → Set α} {s t : Set α} {a : α}
120- open Set
121-
122- /-- A set `s` is *inf-closed* if `a ⊓ b ∈ s` for all `a ∈ s`, `b ∈ s`. -/
123- def InfClosed (s : Set α) : Prop := ∀ ⦃a⦄, a ∈ s → ∀ ⦃b⦄, b ∈ s → a ⊓ b ∈ s
124-
125- @[simp] lemma infClosed_empty : InfClosed (∅ : Set α) := by simp [InfClosed]
126- @[simp] lemma infClosed_singleton : InfClosed ({a} : Set α) := by simp [InfClosed]
127-
128- @[simp] lemma infClosed_univ : InfClosed (univ : Set α) := by simp [InfClosed]
129- lemma InfClosed.inter (hs : InfClosed s) (ht : InfClosed t) : InfClosed (s ∩ t) :=
130- fun _a ha _b hb ↦ ⟨hs ha.1 hb.1 , ht ha.2 hb.2 ⟩
131-
132- lemma infClosed_sInter (hS : ∀ s ∈ S, InfClosed s) : InfClosed (⋂₀ S) :=
133- fun _a ha _b hb _s hs ↦ hS _ hs (ha _ hs) (hb _ hs)
134-
135- lemma infClosed_iInter (hf : ∀ i, InfClosed (f i)) : InfClosed (⋂ i, f i) :=
136- infClosed_sInter <| forall_mem_range.2 hf
137-
138- lemma InfClosed.codirectedOn (hs : InfClosed s) : DirectedOn (· ≥ ·) s :=
139- fun _a ha _b hb ↦ ⟨_, hs ha hb, inf_le_left, inf_le_right⟩
140-
141- lemma IsLowerSet.infClosed (hs : IsLowerSet s) : InfClosed s := fun _a _ _b ↦ hs inf_le_right
142-
143- lemma InfClosed.preimage [FunLike F β α] [InfHomClass F β α] (hs : InfClosed s) (f : F) :
144- InfClosed (f ⁻¹' s) :=
145- fun a ha b hb ↦ by simpa [map_inf] using hs ha hb
146-
147- lemma InfClosed.image [FunLike F α β] [InfHomClass F α β] (hs : InfClosed s) (f : F) :
148- InfClosed (f '' s) := by
149- rintro _ ⟨a, ha, rfl⟩ _ ⟨b, hb, rfl⟩
150- rw [← map_inf]
151- exact Set.mem_image_of_mem _ <| hs ha hb
152-
153- lemma infClosed_range [FunLike F α β] [InfHomClass F α β] (f : F) : InfClosed (Set.range f) := by
154- simpa using infClosed_univ.image f
155-
156- lemma InfClosed.prod {t : Set β} (hs : InfClosed s) (ht : InfClosed t) : InfClosed (s ×ˢ t) :=
157- fun _a ha _b hb ↦ ⟨hs ha.1 hb.1 , ht ha.2 hb.2 ⟩
158-
159- lemma infClosed_pi {ι : Type *} {α : ι → Type *} [∀ i, SemilatticeInf (α i)] {s : Set ι}
160- {t : ∀ i, Set (α i)} (ht : ∀ i ∈ s, InfClosed (t i)) : InfClosed (s.pi t) :=
161- fun _a ha _b hb _i hi ↦ ht _ hi (ha _ hi) (hb _ hi)
162-
163- lemma InfClosed.insert_upperBounds {s : Set α} {a : α} (hs : InfClosed s) (ha : a ∈ upperBounds s) :
164- InfClosed (insert a s) := by
165- rw [InfClosed]
166- have ha' : ∀ b ∈ s, b ≤ a := fun _ a ↦ ha a
167- aesop
168-
169- lemma InfClosed.insert_lowerBounds {s : Set α} {a : α} (h : InfClosed s) (ha : a ∈ lowerBounds s) :
170- InfClosed (insert a s) := by
171- rw [InfClosed]
172- aesop
173-
174- end Set
175-
176- section Finset
177- variable {ι : Type *} {f : ι → α} {s : Set α} {t : Finset ι} {a : α}
178- open Finset
179-
180- lemma InfClosed.finsetInf'_mem (hs : InfClosed s) (ht : t.Nonempty) :
181- (∀ i ∈ t, f i ∈ s) → t.inf' ht f ∈ s :=
182- inf'_induction _ _ hs
183-
184- lemma InfClosed.finsetInf_mem [OrderTop α] (hs : InfClosed s) (ht : t.Nonempty) :
185- (∀ i ∈ t, f i ∈ s) → t.inf f ∈ s :=
186- inf'_eq_inf ht f ▸ hs.finsetInf'_mem ht
187-
188- end Finset
189- end SemilatticeInf
190-
191131open Finset OrderDual
192132
193133section Lattice
0 commit comments