Module docstring
{"# Finset.sup in a group
"}
{"# Finset.sup in a group
"}
Multiset.toFinset_nsmul
theorem
(s : Multiset α) : ∀ n ≠ 0, (n • s).toFinset = s.toFinset
@[simp] lemma toFinset_nsmul (s : Multiset α) : ∀ n ≠ 0, (n • s).toFinset = s.toFinset
| 0, h => by contradiction
| n + 1, _ => by
by_cases h : n = 0
· rw [h, zero_add, one_nsmul]
· rw [add_nsmul, toFinset_add, one_nsmul, toFinset_nsmul s n h, Finset.union_idempotent]
Multiset.toFinset_eq_singleton_iff
theorem
(s : Multiset α) (a : α) : s.toFinset = { a } ↔ card s ≠ 0 ∧ s = card s • { a }
lemma toFinset_eq_singleton_iff (s : Multiset α) (a : α) :
s.toFinset = {a} ↔ card s ≠ 0 ∧ s = card s • {a} := by
refine ⟨fun H ↦ ⟨fun h ↦ ?_, ext' fun x ↦ ?_⟩, fun H ↦ ?_⟩
· rw [card_eq_zero.1 h, toFinset_zero] at H
exact Finset.singleton_ne_empty _ H.symm
· rw [count_nsmul, count_singleton]
by_cases hx : x = a
· simp_rw [hx, ite_true, mul_one, count_eq_card]
intro y hy
rw [← mem_toFinset, H, Finset.mem_singleton] at hy
exact hy.symm
have hx' : x ∉ s := fun h' ↦ hx <| by rwa [← mem_toFinset, H, Finset.mem_singleton] at h'
simp_rw [count_eq_zero_of_not_mem hx', hx, ite_false, Nat.mul_zero]
simpa only [toFinset_nsmul _ _ H.1, toFinset_singleton] using congr($(H.2).toFinset)
Multiset.toFinset_card_eq_one_iff
theorem
(s : Multiset α) : #s.toFinset = 1 ↔ Multiset.card s ≠ 0 ∧ ∃ a : α, s = Multiset.card s • { a }
Finset.fold_max_add
theorem
[LinearOrder M] [Add M] [AddRightMono M] (s : Finset ι) (a : WithBot M) (f : ι → M) :
s.fold max ⊥ (fun i ↦ ↑(f i) + a) = s.fold max ⊥ ((↑) ∘ f) + a
lemma fold_max_add [LinearOrder M] [Add M] [AddRightMono M] (s : Finset ι) (a : WithBot M)
(f : ι → M) : s.fold max ⊥ (fun i ↦ ↑(f i) + a) = s.fold max ⊥ ((↑) ∘ f) + a := by
classical
induction' s using Finset.induction_on with a s _ ih <;> simp [*, max_add_add_right]
Finset.inf'_pow
theorem
[LinearOrder M] [Monoid M] [MulLeftMono M] [MulRightMono M] (s : Finset ι) (f : ι → M) (n : ℕ) (hs) :
s.inf' hs f ^ n = s.inf' hs fun a ↦ f a ^ n
@[to_additive nsmul_inf']
lemma inf'_pow [LinearOrder M] [Monoid M] [MulLeftMono M] [MulRightMono M] (s : Finset ι)
(f : ι → M) (n : ℕ) (hs) : s.inf' hs f ^ n = s.inf' hs fun a ↦ f a ^ n :=
map_finset_inf' (OrderHom.mk _ <| pow_left_mono n) hs _
Finset.sup'_pow
theorem
[LinearOrder M] [Monoid M] [MulLeftMono M] [MulRightMono M] (s : Finset ι) (f : ι → M) (n : ℕ) (hs) :
s.sup' hs f ^ n = s.sup' hs fun a ↦ f a ^ n
@[to_additive nsmul_sup']
lemma sup'_pow [LinearOrder M] [Monoid M] [MulLeftMono M] [MulRightMono M] (s : Finset ι)
(f : ι → M) (n : ℕ) (hs) : s.sup' hs f ^ n = s.sup' hs fun a ↦ f a ^ n :=
map_finset_sup' (OrderHom.mk _ <| pow_left_mono n) hs _
Finset.sup'_mul
theorem
[MulRightMono G] (s : Finset ι) (f : ι → G) (a : G) (hs) : s.sup' hs f * a = s.sup' hs fun i ↦ f i * a
@[to_additive "Also see `Finset.sup'_add'` that works for canonically ordered monoids."]
lemma sup'_mul [MulRightMono G] (s : Finset ι) (f : ι → G) (a : G) (hs) :
s.sup' hs f * a = s.sup' hs fun i ↦ f i * a := map_finset_sup' (OrderIso.mulRight a) hs f
Finset.mul_sup'
theorem
[MulLeftMono G] (s : Finset ι) (f : ι → G) (a : G) (hs) : a * s.sup' hs f = s.sup' hs fun i ↦ a * f i
@[to_additive "Also see `Finset.add_sup''` that works for canonically ordered monoids."]
lemma mul_sup' [MulLeftMono G] (s : Finset ι) (f : ι → G) (a : G) (hs) :
a * s.sup' hs f = s.sup' hs fun i ↦ a * f i := map_finset_sup' (OrderIso.mulLeft a) hs f
Finset.sup'_add'
theorem
(s : Finset ι) (f : ι → M) (a : M) (hs : s.Nonempty) : s.sup' hs f + a = s.sup' hs fun i ↦ f i + a
/-- Also see `Finset.sup'_add` that works for ordered groups. -/
lemma sup'_add' (s : Finset ι) (f : ι → M) (a : M) (hs : s.Nonempty) :
s.sup' hs f + a = s.sup' hs fun i ↦ f i + a := by
apply le_antisymm
· apply add_le_of_le_tsub_right_of_le
· exact Finset.le_sup'_of_le _ hs.choose_spec le_add_self
· exact Finset.sup'_le _ _ fun i hi ↦ le_tsub_of_add_le_right (Finset.le_sup' (f · + a) hi)
· exact Finset.sup'_le _ _ fun i hi ↦ add_le_add_right (Finset.le_sup' _ hi) _
Finset.add_sup''
theorem
(hs : s.Nonempty) (f : ι → M) (a : M) : a + s.sup' hs f = s.sup' hs fun i ↦ a + f i
/-- Also see `Finset.add_sup'` that works for ordered groups. -/
lemma add_sup'' (hs : s.Nonempty) (f : ι → M) (a : M) :
a + s.sup' hs f = s.sup' hs fun i ↦ a + f i := by simp_rw [add_comm a, Finset.sup'_add']
Finset.sup_add
theorem
(hs : s.Nonempty) (f : ι → M) (a : M) : s.sup f + a = s.sup fun i ↦ f i + a
protected lemma sup_add (hs : s.Nonempty) (f : ι → M) (a : M) :
s.sup f + a = s.sup fun i ↦ f i + a := by
rw [← Finset.sup'_eq_sup hs, ← Finset.sup'_eq_sup hs, sup'_add']
Finset.add_sup
theorem
(hs : s.Nonempty) (f : ι → M) (a : M) : a + s.sup f = s.sup fun i ↦ a + f i
protected lemma add_sup (hs : s.Nonempty) (f : ι → M) (a : M) :
a + s.sup f = s.sup fun i ↦ a + f i := by
rw [← Finset.sup'_eq_sup hs, ← Finset.sup'_eq_sup hs, add_sup'']
Finset.sup_add_sup
theorem
(hs : s.Nonempty) (ht : t.Nonempty) (f : ι → M) (g : κ → M) : s.sup f + t.sup g = (s ×ˢ t).sup fun ij ↦ f ij.1 + g ij.2
lemma sup_add_sup (hs : s.Nonempty) (ht : t.Nonempty) (f : ι → M) (g : κ → M) :
s.sup f + t.sup g = (s ×ˢ t).sup fun ij ↦ f ij.1 + g ij.2 := by
simp only [Finset.sup_add hs, Finset.add_sup ht, Finset.sup_product_left]