Skip to content

Commit 5c08dca

Browse files
committed
feat: Finset.sup in a group (#19460)
Co-authored-by: Andrew Yang
1 parent 551481f commit 5c08dca

File tree

8 files changed

+92
-23
lines changed

8 files changed

+92
-23
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -655,6 +655,7 @@ import Mathlib.Algebra.Order.Group.CompleteLattice
655655
import Mathlib.Algebra.Order.Group.Cone
656656
import Mathlib.Algebra.Order.Group.Defs
657657
import Mathlib.Algebra.Order.Group.DenselyOrdered
658+
import Mathlib.Algebra.Order.Group.Finset
658659
import Mathlib.Algebra.Order.Group.Indicator
659660
import Mathlib.Algebra.Order.Group.InjSurj
660661
import Mathlib.Algebra.Order.Group.Instances
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/-
2+
Copyright (c) 2024 Yaël Dillies, Andrew Yang. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Yaël Dillies, Andrew Yang
5+
-/
6+
import Mathlib.Algebra.Order.Group.OrderIso
7+
import Mathlib.Algebra.Order.Monoid.Canonical.Defs
8+
import Mathlib.Algebra.Order.Monoid.Unbundled.MinMax
9+
import Mathlib.Algebra.Order.Monoid.Unbundled.Pow
10+
import Mathlib.Algebra.Order.Monoid.Unbundled.WithTop
11+
import Mathlib.Data.Finset.Lattice.Fold
12+
13+
/-!
14+
# `Finset.sup` in a group
15+
-/
16+
17+
assert_not_exists MonoidWithZero
18+
19+
namespace Finset
20+
variable {ι κ M G : Type*}
21+
22+
lemma fold_max_add [LinearOrder M] [Add M] [AddRightMono M] (s : Finset ι) (a : WithBot M)
23+
(f : ι → M) : s.fold max ⊥ (fun i ↦ ↑(f i) + a) = s.fold max ⊥ ((↑) ∘ f) + a := by
24+
classical
25+
induction' s using Finset.induction_on with a s _ ih <;> simp [*, max_add_add_right]
26+
27+
@[to_additive nsmul_inf']
28+
lemma inf'_pow [LinearOrder M] [Monoid M] [MulLeftMono M] [MulRightMono M] (s : Finset ι)
29+
(f : ι → M) (n : ℕ) (hs) : s.inf' hs f ^ n = s.inf' hs fun a ↦ f a ^ n :=
30+
map_finset_inf' (OrderHom.mk _ <| pow_left_mono n) hs _
31+
32+
@[to_additive nsmul_sup']
33+
lemma sup'_pow [LinearOrder M] [Monoid M] [MulLeftMono M] [MulRightMono M] (s : Finset ι)
34+
(f : ι → M) (n : ℕ) (hs) : s.sup' hs f ^ n = s.sup' hs fun a ↦ f a ^ n :=
35+
map_finset_sup' (OrderHom.mk _ <| pow_left_mono n) hs _
36+
37+
section Group
38+
variable [Group G] [LinearOrder G]
39+
40+
@[to_additive "Also see `Finset.sup'_add'` that works for canonically ordered monoids."]
41+
lemma sup'_mul [MulRightMono G] (s : Finset ι) (f : ι → G) (a : G) (hs) :
42+
s.sup' hs f * a = s.sup' hs fun i ↦ f i * a := map_finset_sup' (OrderIso.mulRight a) hs f
43+
44+
set_option linter.docPrime false in
45+
@[to_additive "Also see `Finset.add_sup''` that works for canonically ordered monoids."]
46+
lemma mul_sup' [MulLeftMono G] (s : Finset ι) (f : ι → G) (a : G) (hs) :
47+
a * s.sup' hs f = s.sup' hs fun i ↦ a * f i := map_finset_sup' (OrderIso.mulLeft a) hs f
48+
49+
end Group
50+
51+
section CanonicallyLinearOrderedAddCommMonoid
52+
variable [CanonicallyLinearOrderedAddCommMonoid M] [Sub M] [AddLeftReflectLE M] [OrderedSub M]
53+
{s : Finset ι} {t : Finset κ}
54+
55+
/-- Also see `Finset.sup'_add` that works for ordered groups. -/
56+
lemma sup'_add' (s : Finset ι) (f : ι → M) (a : M) (hs : s.Nonempty) :
57+
s.sup' hs f + a = s.sup' hs fun i ↦ f i + a := by
58+
apply le_antisymm
59+
· apply add_le_of_le_tsub_right_of_le
60+
· exact Finset.le_sup'_of_le _ hs.choose_spec le_add_self
61+
· exact Finset.sup'_le _ _ fun i hi ↦ le_tsub_of_add_le_right (Finset.le_sup' (f · + a) hi)
62+
· exact Finset.sup'_le _ _ fun i hi ↦ add_le_add_right (Finset.le_sup' _ hi) _
63+
64+
/-- Also see `Finset.add_sup'` that works for ordered groups. -/
65+
lemma add_sup'' (hs : s.Nonempty) (f : ι → M) (a : M) :
66+
a + s.sup' hs f = s.sup' hs fun i ↦ a + f i := by simp_rw [add_comm a, Finset.sup'_add']
67+
68+
protected lemma sup_add (hs : s.Nonempty) (f : ι → M) (a : M) :
69+
s.sup f + a = s.sup fun i ↦ f i + a := by
70+
rw [← Finset.sup'_eq_sup hs, ← Finset.sup'_eq_sup hs, sup'_add']
71+
72+
protected lemma add_sup (hs : s.Nonempty) (f : ι → M) (a : M) :
73+
a + s.sup f = s.sup fun i ↦ a + f i := by
74+
rw [← Finset.sup'_eq_sup hs, ← Finset.sup'_eq_sup hs, add_sup'']
75+
76+
lemma sup_add_sup (hs : s.Nonempty) (ht : t.Nonempty) (f : ι → M) (g : κ → M) :
77+
s.sup f + t.sup g = (s ×ˢ t).sup fun ij ↦ f ij.1 + g ij.2 := by
78+
simp only [Finset.sup_add hs, Finset.add_sup ht, Finset.sup_product_left]
79+
80+
end CanonicallyLinearOrderedAddCommMonoid
81+
end Finset

Mathlib/Algebra/Polynomial/Basic.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Chris Hughes, Johannes Hölzl, Kim Morrison, Jens Wagemaker
55
-/
66
import Mathlib.Algebra.GroupWithZero.Divisibility
7-
import Mathlib.Data.Finset.Sort
87
import Mathlib.Algebra.MonoidAlgebra.Defs
8+
import Mathlib.Algebra.Order.Monoid.Unbundled.WithTop
9+
import Mathlib.Data.Finset.Sort
910
import Mathlib.Order.OmegaCompletePartialOrder
1011

1112
/-!

Mathlib/Data/Finset/Fold.lean

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ Copyright (c) 2017 Mario Carneiro. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Mario Carneiro
55
-/
6-
import Mathlib.Algebra.Order.Monoid.Unbundled.MinMax
7-
import Mathlib.Algebra.Order.Monoid.Unbundled.WithTop
86
import Mathlib.Data.Finset.Image
97
import Mathlib.Data.Multiset.Fold
108

@@ -231,11 +229,6 @@ theorem fold_max_lt : s.fold max b f < c ↔ b < c ∧ ∀ x ∈ s, f x < c := b
231229
theorem lt_fold_max : c < s.fold max b f ↔ c < b ∨ ∃ x ∈ s, c < f x :=
232230
fold_op_rel_iff_or lt_max_iff
233231

234-
theorem fold_max_add [Add β] [AddRightMono β] (n : WithBot β)
235-
(s : Finset α) : (s.fold max ⊥ fun x : α => ↑(f x) + n) = s.fold max ⊥ ((↑) ∘ f) + n := by
236-
classical
237-
induction' s using Finset.induction_on with a s _ ih <;> simp [*, max_add_add_right]
238-
239232
end Order
240233

241234
end Fold

Mathlib/Data/Finset/Lattice/Fold.lean

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ Copyright (c) 2018 Mario Carneiro. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Mario Carneiro
55
-/
6-
import Mathlib.Algebra.Order.Monoid.Unbundled.Pow
76
import Mathlib.Data.Finset.Fold
87
import Mathlib.Data.Finset.Pi
98
import Mathlib.Data.Finset.Prod
@@ -819,13 +818,6 @@ theorem _root_.map_finset_sup' [SemilatticeSup β] [FunLike F α β] [SupHomClas
819818
f (s.sup' hs g) = s.sup' hs (f ∘ g) := by
820819
refine hs.cons_induction ?_ ?_ <;> intros <;> simp [*]
821820

822-
lemma nsmul_sup' {α β : Type*} [AddMonoid β] [LinearOrder β]
823-
[AddLeftMono β] [AddRightMono β]
824-
{s : Finset α} (hs : s.Nonempty) (f : α → β) (n : ℕ) :
825-
s.sup' hs (fun a => n • f a) = n • s.sup' hs f :=
826-
let ns : SupHom β β := { toFun := (n • ·), map_sup' := fun _ _ => (nsmul_right_mono n).map_max }
827-
(map_finset_sup' ns hs _).symm
828-
829821
/-- To rewrite from right to left, use `Finset.sup'_comp_eq_image`. -/
830822
@[simp]
831823
theorem sup'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)
@@ -857,6 +849,11 @@ lemma sup'_comp_eq_map {s : Finset γ} {f : γ ↪ β} (g : β → α) (hs : s.N
857849
theorem sup'_mono {s₁ s₂ : Finset β} (h : s₁ ⊆ s₂) (h₁ : s₁.Nonempty) :
858850
s₁.sup' h₁ f ≤ s₂.sup' (h₁.mono h) f :=
859851
Finset.sup'_le h₁ _ (fun _ hb => le_sup' _ (h hb))
852+
853+
@[gcongr]
854+
lemma sup'_mono_fun {hs : s.Nonempty} {f g : β → α} (h : ∀ b ∈ s, f b ≤ g b) :
855+
s.sup' hs f ≤ s.sup' hs g := sup'_le _ _ fun b hb ↦ (h b hb).trans (le_sup' _ hb)
856+
860857
end Sup'
861858

862859
section Inf'
@@ -974,13 +971,6 @@ theorem _root_.map_finset_inf' [SemilatticeInf β] [FunLike F α β] [InfHomClas
974971
f (s.inf' hs g) = s.inf' hs (f ∘ g) := by
975972
refine hs.cons_induction ?_ ?_ <;> intros <;> simp [*]
976973

977-
lemma nsmul_inf' {α β : Type*} [AddMonoid β] [LinearOrder β]
978-
[AddLeftMono β] [AddRightMono β]
979-
{s : Finset α} (hs : s.Nonempty) (f : α → β) (n : ℕ) :
980-
s.inf' hs (fun a => n • f a) = n • s.inf' hs f :=
981-
let ns : InfHom β β := { toFun := (n • ·), map_inf' := fun _ _ => (nsmul_right_mono n).map_min }
982-
(map_finset_inf' ns hs _).symm
983-
984974
/-- To rewrite from right to left, use `Finset.inf'_comp_eq_image`. -/
985975
@[simp]
986976
theorem inf'_image [DecidableEq β] {s : Finset γ} {f : γ → β} (hs : (s.image f).Nonempty)

Mathlib/Order/Filter/AtTopBot/Monoid.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Yury Kudryashov
55
-/
66
import Mathlib.Algebra.Order.Monoid.OrderDual
7+
import Mathlib.Algebra.Order.Monoid.Unbundled.Pow
78
import Mathlib.Order.Filter.AtTopBot
89

910
/-!

Mathlib/RingTheory/HahnSeries/Basic.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Aaron Anderson
55
-/
66
import Mathlib.Algebra.Group.Support
7+
import Mathlib.Algebra.Order.Monoid.Unbundled.WithTop
78
import Mathlib.Order.WellFoundedSet
89

910
/-!

Mathlib/Topology/Algebra/ConstMulAction.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Alex Kontorovich, Heather Macbeth
55
-/
66
import Mathlib.Algebra.Module.ULift
7+
import Mathlib.Algebra.Order.Group.Synonym
78
import Mathlib.Data.Set.Pointwise.SMul
89
import Mathlib.GroupTheory.GroupAction.Defs
910
import Mathlib.Topology.Algebra.Constructions

0 commit comments

Comments
 (0)