Skip to content

Commit 7fedf41

Browse files
Merge branch 'master' into turan-2
2 parents 40be7e9 + 048c8ef commit 7fedf41

5 files changed

Lines changed: 62 additions & 4 deletions

File tree

Mathlib/Data/Matrix/Basic.lean

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -880,4 +880,31 @@ variable {R m α}
880880

881881
end Transpose
882882

883+
section NonUnitalNonAssocSemiring
884+
variable {ι : Type*} [NonUnitalNonAssocSemiring α] [Fintype n]
885+
886+
theorem sum_mulVec (s : Finset ι) (x : ι → Matrix m n α) (y : n → α) :
887+
(∑ i ∈ s, x i) *ᵥ y = ∑ i ∈ s, x i *ᵥ y := by
888+
ext
889+
simp only [mulVec, dotProduct, sum_apply, Finset.sum_mul, Finset.sum_apply]
890+
rw [Finset.sum_comm]
891+
892+
theorem mulVec_sum (x : Matrix m n α) (s : Finset ι) (y : ι → (n → α)) :
893+
x *ᵥ ∑ i ∈ s, y i = ∑ i ∈ s, x *ᵥ y i := by
894+
ext
895+
simp only [mulVec, dotProduct_sum, Finset.sum_apply]
896+
897+
theorem sum_vecMul (s : Finset ι) (x : ι → (n → α)) (y : Matrix n m α) :
898+
(∑ i ∈ s, x i) ᵥ* y = ∑ i ∈ s, x i ᵥ* y := by
899+
ext
900+
simp only [vecMul, sum_dotProduct, Finset.sum_apply]
901+
902+
theorem vecMul_sum (x : n → α) (s : Finset ι) (y : ι → Matrix n m α) :
903+
x ᵥ* (∑ i ∈ s, y i) = ∑ i ∈ s, x ᵥ* y i := by
904+
ext
905+
simp only [vecMul, dotProduct, sum_apply, Finset.mul_sum, Finset.sum_apply]
906+
rw [Finset.sum_comm]
907+
908+
end NonUnitalNonAssocSemiring
909+
883910
end Matrix

Mathlib/Data/Matrix/Mul.lean

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,16 @@ theorem dotProduct_comp_equiv_symm (e : n ≃ m) : u ⬝ᵥ x ∘ e.symm = u ∘
138138
theorem comp_equiv_dotProduct_comp_equiv (e : m ≃ n) : x ∘ e ⬝ᵥ y ∘ e = x ⬝ᵥ y := by
139139
simp [← dotProduct_comp_equiv_symm, Function.comp_def _ e.symm]
140140

141+
theorem dotProduct_sum {ι : Type*} (u : m → α) (s : Finset ι) (v : ι → (m → α)) :
142+
u ⬝ᵥ ∑ i ∈ s, v i = ∑ i ∈ s, u ⬝ᵥ v i := by
143+
simp only [dotProduct, Finset.sum_apply, Finset.mul_sum]
144+
rw [Finset.sum_comm]
145+
146+
theorem sum_dotProduct {ι : Type*} (s : Finset ι) (u : ι → (m → α)) (v : m → α) :
147+
(∑ i ∈ s, u i) ⬝ᵥ v = ∑ i ∈ s, u i ⬝ᵥ v := by
148+
simp only [dotProduct, Finset.sum_apply, Finset.sum_mul]
149+
rw [Finset.sum_comm]
150+
141151
end NonUnitalNonAssocSemiring
142152

143153
section NonUnitalNonAssocSemiringDecidable

Mathlib/Order/Filter/AtTopBot/Finset.lean

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ Copyright (c) 2017 Johannes Hölzl. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Johannes Hölzl, Jeremy Avigad, Yury Kudryashov, Patrick Massot
55
-/
6+
import Mathlib.Data.Finset.Order
67
import Mathlib.Data.Finset.Preimage
78
import Mathlib.Order.Filter.AtTopBot.Tendsto
89
import Mathlib.Order.Filter.AtTopBot.Basic
910
import Mathlib.Order.Filter.Finite
11+
import Mathlib.Order.Interval.Finset.Defs
1012

1113
/-!
1214
# `Filter.atTop` and `Filter.atBot` filters and finite sets.
@@ -70,4 +72,19 @@ theorem tendsto_finset_powerset_atTop_atTop : Tendsto (Finset.powerset (α := α
7072
refine tendsto_atTop_atTop.mpr fun t ↦ ⟨t.sup id, fun _ hu _ hv ↦ ?_⟩
7173
exact Finset.mem_powerset.mpr <| (Finset.le_sup_of_le hv fun _ h ↦ h).trans hu
7274

75+
theorem tendsto_finset_Iic_atTop_atTop [Preorder α] [LocallyFiniteOrderBot α] :
76+
Tendsto (Finset.Iic (α := α)) atTop atTop := by
77+
rcases isEmpty_or_nonempty α with _ | _
78+
· exact tendsto_of_isEmpty
79+
by_cases h : IsDirected α (· ≤ ·)
80+
· refine tendsto_atTop_atTop.mpr fun s ↦ ?_
81+
obtain ⟨a, ha⟩ := Finset.exists_le s
82+
exact ⟨a, fun b hb c hc ↦ by simpa using (ha c hc).trans hb⟩
83+
· obtain h := Filter.atTop_neBot_iff.not.mpr (fun h' ↦ h h'.2)
84+
simp [not_ne_iff.mp <| Filter.neBot_iff.not.mp h]
85+
86+
theorem tendsto_finset_Ici_atBot_atTop [Preorder α] [LocallyFiniteOrderTop α] :
87+
Tendsto (Finset.Ici (α := α)) atBot atTop :=
88+
tendsto_finset_Iic_atTop_atTop (α := αᵒᵈ)
89+
7390
end Filter

Mathlib/RingTheory/LocalRing/Quotient.lean

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ lemma basisQuotient_repr {ι} [Fintype ι] (b : Basis ι R S) (x) (i) :
106106
Ideal.Quotient.mk_smul_mk_quotient_map_quotient, ← Algebra.smul_def]
107107
rw [← map_sum, Basis.sum_repr b x]
108108

109-
lemma exists_maximalIdeal_pow_le_of_finite_quotient (I : Ideal R) [Finite (R ⧸ I)] :
110-
∃ n, maximalIdeal R ^ n ≤ I := by
109+
lemma exists_maximalIdeal_pow_le_of_isArtinianRing_quotient
110+
(I : Ideal R) [IsArtinianRing (R ⧸ I)] : ∃ n, maximalIdeal R ^ n ≤ I := by
111111
by_cases hI : I = ⊤
112112
· simp [hI]
113113
have : Nontrivial (R ⧸ I) := Ideal.Quotient.nontrivial hI
@@ -122,9 +122,13 @@ lemma exists_maximalIdeal_pow_le_of_finite_quotient (I : Ideal R) [Finite (R ⧸
122122
Ideal.map_eq_bot_iff_le_ker, Ideal.mk_ker] at hn
123123
exact ⟨n, hn⟩
124124

125+
@[deprecated (since := "2025-09-27")]
126+
alias exists_maximalIdeal_pow_le_of_finite_quotient :=
127+
exists_maximalIdeal_pow_le_of_isArtinianRing_quotient
128+
125129
lemma finite_quotient_iff [IsNoetherianRing R] [Finite (ResidueField R)] {I : Ideal R} :
126130
Finite (R ⧸ I) ↔ ∃ n, (maximalIdeal R) ^ n ≤ I := by
127-
refine ⟨fun _ ↦ exists_maximalIdeal_pow_le_of_finite_quotient I, ?_⟩
131+
refine ⟨fun _ ↦ exists_maximalIdeal_pow_le_of_isArtinianRing_quotient I, ?_⟩
128132
rintro ⟨n, hn⟩
129133
have : Finite (R ⧸ maximalIdeal R) := ‹_›
130134
have := (Ideal.finite_quotient_pow (IsNoetherian.noetherian (maximalIdeal R)) n)

Mathlib/Topology/Algebra/Ring/Compact.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ instance finite_residueField_of_compactSpace : Finite (ResidueField R) :=
104104
lemma isOpen_iff_finite_quotient {I : Ideal R} :
105105
IsOpen (X := R) I ↔ Finite (R ⧸ I) := by
106106
refine ⟨AddSubgroup.quotient_finite_of_isOpen I.toAddSubgroup, fun H ↦ ?_⟩
107-
obtain ⟨n, hn⟩ := exists_maximalIdeal_pow_le_of_finite_quotient I
107+
obtain ⟨n, hn⟩ := exists_maximalIdeal_pow_le_of_isArtinianRing_quotient I
108108
exact AddSubgroup.isOpen_mono (H₁ := (maximalIdeal R ^ n).toAddSubgroup)
109109
(H₂ := I.toAddSubgroup) hn (isOpen_maximalIdeal_pow R n)
110110

0 commit comments

Comments
 (0)