Skip to content

Commit 59f45d5

Browse files
committed
chore(Order/CompleteLattice/Finset): use to_dual and some golfs
1 parent 9987a7e commit 59f45d5

1 file changed

Lines changed: 26 additions & 52 deletions

File tree

Mathlib/Order/CompleteLattice/Finset.lean

Lines changed: 26 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ variable {ι' : Sort*} [CompleteLattice α]
3232
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
3333
`⨆ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `iSup_eq_iSup_finset'` for a version
3434
that works for `ι : Sort*`. -/
35+
@[to_dual
36+
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
37+
`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `iInf_eq_iInf_finset'` for a version
38+
that works for `ι : Sort*`. -/]
3539
theorem iSup_eq_iSup_finset (s : ι → α) : ⨆ i, s i = ⨆ t : Finset ι, ⨆ i ∈ t, s i := by
3640
classical
3741
refine le_antisymm ?_ ?_
@@ -41,23 +45,14 @@ theorem iSup_eq_iSup_finset (s : ι → α) : ⨆ i, s i = ⨆ t : Finset ι,
4145
/-- Supremum of `s i`, `i : ι`, is equal to the supremum over `t : Finset ι` of suprema
4246
`⨆ i ∈ t, s i`. This version works for `ι : Sort*`. See `iSup_eq_iSup_finset` for a version
4347
that assumes `ι : Type*` but has no `PLift`s. -/
48+
@[to_dual
49+
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
50+
`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `iInf_eq_iInf_finset` for a version
51+
that assumes `ι : Type*` but has no `PLift`s. -/]
4452
theorem iSup_eq_iSup_finset' (s : ι' → α) :
4553
⨆ i, s i = ⨆ t : Finset (PLift ι'), ⨆ i ∈ t, s (PLift.down i) := by
4654
rw [← iSup_eq_iSup_finset, ← Equiv.plift.surjective.iSup_comp]; rfl
4755

48-
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
49-
`⨅ i ∈ t, s i`. This version assumes `ι` is a `Type*`. See `iInf_eq_iInf_finset'` for a version
50-
that works for `ι : Sort*`. -/
51-
theorem iInf_eq_iInf_finset (s : ι → α) : ⨅ i, s i = ⨅ (t : Finset ι) (i ∈ t), s i :=
52-
@iSup_eq_iSup_finset αᵒᵈ _ _ _
53-
54-
/-- Infimum of `s i`, `i : ι`, is equal to the infimum over `t : Finset ι` of infima
55-
`⨅ i ∈ t, s i`. This version works for `ι : Sort*`. See `iInf_eq_iInf_finset` for a version
56-
that assumes `ι : Type*` but has no `PLift`s. -/
57-
theorem iInf_eq_iInf_finset' (s : ι' → α) :
58-
⨅ i, s i = ⨅ t : Finset (PLift ι'), ⨅ i ∈ t, s (PLift.down i) :=
59-
@iSup_eq_iSup_finset' αᵒᵈ _ _ _
60-
6156
end Lattice
6257

6358
namespace Set
@@ -91,12 +86,9 @@ theorem iInter_eq_iInter_finset' (s : ι' → Set α) :
9186
⋂ i, s i = ⋂ t : Finset (PLift ι'), ⋂ i ∈ t, s (PLift.down i) :=
9287
iInf_eq_iInf_finset' s
9388

94-
theorem iUnion_finset_eq_set (s : Set ι) :
95-
⋃ s' : Finset s, Subtype.val '' (s' : Set s) = s := by
89+
theorem iUnion_finset_eq_set (s : Set ι) : ⋃ s' : Finset s, Subtype.val '' (s' : Set s) = s := by
9690
ext x
97-
simp only [Set.mem_iUnion, Set.mem_image, SetLike.mem_coe, Subtype.exists,
98-
exists_and_right, exists_eq_right]
99-
exact ⟨fun ⟨_, hx, _⟩ ↦ hx, fun hx ↦ ⟨{⟨x, hx⟩}, hx, by simp⟩⟩
91+
simpa usingfun ⟨_, hx, _⟩ ↦ hx, fun hx ↦ ⟨{⟨x, hx⟩}, hx, by simp⟩⟩
10092

10193
end Set
10294

@@ -124,64 +116,46 @@ end minimal
124116

125117
section Lattice
126118

119+
@[to_dual]
127120
theorem iSup_coe [SupSet β] (f : α → β) (s : Finset α) : ⨆ x ∈ (↑s : Set α), f x = ⨆ x ∈ s, f x :=
128121
rfl
129122

130-
theorem iInf_coe [InfSet β] (f : α → β) (s : Finset α) : ⨅ x ∈ (↑s : Set α), f x = ⨅ x ∈ s, f x :=
131-
rfl
132-
133123
variable [CompleteLattice β]
134124

125+
@[to_dual]
135126
theorem iSup_singleton (a : α) (s : α → β) : ⨆ x ∈ ({a} : Finset α), s x = s a := by simp
136127

137-
theorem iInf_singleton (a : α) (s : α → β) : ⨅ x ∈ ({a} : Finset α), s x = s a := by simp
138-
128+
@[to_dual]
139129
theorem iSup_option_toFinset (o : Option α) (f : α → β) : ⨆ x ∈ o.toFinset, f x = ⨆ x ∈ o, f x := by
140130
simp
141131

142-
theorem iInf_option_toFinset (o : Option α) (f : α → β) : ⨅ x ∈ o.toFinset, f x = ⨅ x ∈ o, f x :=
143-
@iSup_option_toFinset _ βᵒᵈ _ _ _
144-
145132
variable [DecidableEq α]
146133

134+
@[to_dual]
147135
theorem iSup_union {f : α → β} {s t : Finset α} :
148-
⨆ x ∈ s ∪ t, f x = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x := by simp [iSup_or, iSup_sup_eq]
149-
150-
theorem iInf_union {f : α → β} {s t : Finset α} :
151-
⨅ x ∈ s ∪ t, f x = (⨅ x ∈ s, f x) ⊓ ⨅ x ∈ t, f x :=
152-
@iSup_union α βᵒᵈ _ _ _ _ _
136+
⨆ x ∈ s ∪ t, f x = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x := by
137+
simpa using _root_.iSup_union
153138

139+
@[to_dual]
154140
theorem iSup_insert (a : α) (s : Finset α) (t : α → β) :
155141
⨆ x ∈ insert a s, t x = t a ⊔ ⨆ x ∈ s, t x := by
156-
rw [insert_eq]
157-
simp only [iSup_union, Finset.iSup_singleton]
158-
159-
theorem iInf_insert (a : α) (s : Finset α) (t : α → β) :
160-
⨅ x ∈ insert a s, t x = t a ⊓ ⨅ x ∈ s, t x :=
161-
@iSup_insert α βᵒᵈ _ _ _ _ _
142+
simpa using _root_.iSup_insert
162143

144+
@[to_dual]
163145
theorem iSup_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
164-
⨆ x ∈ s.image f, g x = ⨆ y ∈ s, g (f y) := by rw [← iSup_coe, coe_image, iSup_image, iSup_coe]
165-
166-
theorem iInf_finset_image {f : γ → α} {g : α → β} {s : Finset γ} :
167-
⨅ x ∈ s.image f, g x = ⨅ y ∈ s, g (f y) := by rw [← iInf_coe, coe_image, iInf_image, iInf_coe]
146+
⨆ x ∈ s.image f, g x = ⨆ y ∈ s, g (f y) := by
147+
simpa using iSup_image
168148

149+
@[to_dual]
169150
theorem iSup_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
170151
⨆ i ∈ insert x t, Function.update f x s i = s ⊔ ⨆ i ∈ t, f i := by
171-
simp only [Finset.iSup_insert, update_self]
172-
rcongr (i hi); apply update_of_ne; rintro rfl; exact hx hi
173-
174-
theorem iInf_insert_update {x : α} {t : Finset α} (f : α → β) {s : β} (hx : x ∉ t) :
175-
⨅ i ∈ insert x t, update f x s i = s ⊓ ⨅ i ∈ t, f i :=
176-
@iSup_insert_update α βᵒᵈ _ _ _ _ f _ hx
152+
rw [Finset.iSup_insert]
153+
grind
177154

155+
@[to_dual]
178156
theorem iSup_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
179157
⨆ y ∈ s.biUnion t, f y = ⨆ (x ∈ s) (y ∈ t x), f y := by simp [@iSup_comm _ α, iSup_and]
180158

181-
theorem iInf_biUnion (s : Finset γ) (t : γ → Finset α) (f : α → β) :
182-
⨅ y ∈ s.biUnion t, f y = ⨅ (x ∈ s) (y ∈ t x), f y :=
183-
@iSup_biUnion _ βᵒᵈ _ _ _ _ _ _
184-
185159
end Lattice
186160

187161
theorem set_biUnion_coe (s : Finset α) (t : α → Set β) : ⋃ x ∈ (↑s : Set α), t x = ⋃ x ∈ s, t x :=
@@ -211,7 +185,7 @@ theorem set_biInter_option_toFinset (o : Option α) (f : α → Set β) :
211185

212186
theorem subset_set_biUnion_of_mem {s : Finset α} {f : α → Set β} {x : α} (h : x ∈ s) :
213187
f x ⊆ ⋃ y ∈ s, f y :=
214-
show f x ≤ ⨆ y ∈ s, f y from le_iSup_of_le x <| by simp only [h, iSup_pos, le_refl]
188+
le_iSup_of_le x <| by simp [h]
215189

216190
variable [DecidableEq α]
217191

0 commit comments

Comments
 (0)