Skip to content

Commit 4646bc6

Browse files
urkudkim-em
andcommitted
chore: reduce defeq abuse (#35286)
Cherry-picked from #35182, improved Co-authored-by: Kim Morrison <477956+kim-em@users.noreply.github.com>
1 parent 2e7b749 commit 4646bc6

File tree

5 files changed

+56
-33
lines changed

5 files changed

+56
-33
lines changed

Mathlib/Algebra/Module/SnakeLemma.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@ such that `f₂` is surjective with a (set-theoretic) section `σ`, `g₁` is in
4848
(set-theoretic) retraction `ρ`, and that `ι₃` is injective and `π₁` is surjective.
4949
-/
5050

51-
variable {R} [CommRing R] {M₁ M₂ M₃ N₁ N₂ N₃}
51+
variable {R : Type*} [CommRing R] {M₁ M₂ M₃ N₁ N₂ N₃ : Type*}
5252
[AddCommGroup M₁] [Module R M₁] [AddCommGroup M₂] [Module R M₂] [AddCommGroup M₃] [Module R M₃]
5353
[AddCommGroup N₁] [Module R N₁] [AddCommGroup N₂] [Module R N₂] [AddCommGroup N₃] [Module R N₃]
5454
(i₁ : M₁ →ₗ[R] N₁) (i₂ : M₂ →ₗ[R] N₂) (i₃ : M₃ →ₗ[R] N₃)
5555
(f₁ : M₁ →ₗ[R] M₂) (f₂ : M₂ →ₗ[R] M₃) (hf : Exact f₁ f₂)
5656
(g₁ : N₁ →ₗ[R] N₂) (g₂ : N₂ →ₗ[R] N₃) (hg : Exact g₁ g₂)
5757
(h₁ : g₁.comp i₁ = i₂.comp f₁) (h₂ : g₂.comp i₂ = i₃.comp f₂)
5858
(σ : M₃ → M₂) (hσ : f₂ ∘ σ = id) (ρ : N₂ → N₁) (hρ : ρ ∘ g₁ = id)
59-
{K₂ K₃ C₁ C₂} [AddCommGroup K₂] [Module R K₂] [AddCommGroup K₃] [Module R K₃]
59+
{K₂ K₃ C₁ C₂ : Type*} [AddCommGroup K₂] [Module R K₂] [AddCommGroup K₃] [Module R K₃]
6060
[AddCommGroup C₁] [Module R C₁] [AddCommGroup C₂] [Module R C₂]
6161
(ι₂ : K₂ →ₗ[R] M₂) (hι₂ : Exact ι₂ i₂) (ι₃ : K₃ →ₗ[R] M₃) (hι₃ : Exact ι₃ i₃)
6262
(π₁ : N₁ →ₗ[R] C₁) (hπ₁ : Exact i₁ π₁) (π₂ : N₂ →ₗ[R] C₂) (hπ₂ : Exact i₂ π₂)

Mathlib/Algebra/MonoidAlgebra/Grading.lean

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,12 @@ theorem grade_eq_lsingle_range (m : M) :
8080
Submodule.ext (mem_grade_iff' R m)
8181

8282
theorem single_mem_gradeBy {R} [CommSemiring R] (f : M → ι) (m : M) (r : R) :
83-
Finsupp.single m r ∈ gradeBy R f (f m) := by
83+
single m r ∈ gradeBy R f (f m) := by
8484
intro x hx
8585
rw [Finset.mem_singleton.mp (Finsupp.support_single_subset hx)]
8686

87-
theorem single_mem_grade {R} [CommSemiring R] (i : M) (r : R) : Finsupp.single i r ∈ grade R i :=
87+
theorem single_mem_grade {R} [CommSemiring R] (i : M) (r : R) :
88+
single i r ∈ grade R i :=
8889
single_mem_gradeBy _ _ _
8990

9091
end

Mathlib/RingTheory/AdjoinRoot.lean

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -874,51 +874,69 @@ open Ideal DoubleQuot Polynomial
874874

875875
variable [CommRing R] (I : Ideal R) (f : R[X])
876876

877-
set_option backward.isDefEq.respectTransparency false in
878877
/-- The natural isomorphism `R[α]/(I[α]) ≅ R[α]/((I[x] ⊔ (f)) / (f))` for `α` a root of
879878
`f : R[X]` and `I : Ideal R`.
880879
881-
See `adjoin_root.quot_map_of_equiv` for the isomorphism with `(R/I)[X] / (f mod I)`. -/
882-
def quotMapOfEquivQuotMapCMapSpanMk :
880+
See `AdjoinRoot.quotAdjoinRootEquivQuotPolynomialQuot`
881+
for the isomorphism with `(R/I)[X] / (f mod I)`. -/
882+
def quotMapOfEquivQuotMapCMapMk :
883883
AdjoinRoot f ⧸ I.map (of f) ≃+*
884-
AdjoinRoot f ⧸ (I.map (C : R →+* R[X])).map (Ideal.Quotient.mk (span {f})) :=
884+
AdjoinRoot f ⧸ (I.map (C : R →+* R[X])).map (AdjoinRoot.mk f) :=
885885
Ideal.quotEquivOfEq (by rw [of, AdjoinRoot.mk, Ideal.map_map])
886886

887+
@[deprecated (since := "2026-03-02")]
888+
alias quotMapOfEquivQuotMapCMapSpanMk := quotMapOfEquivQuotMapCMapMk
889+
887890
@[simp]
888-
theorem quotMapOfEquivQuotMapCMapSpanMk_mk (x : AdjoinRoot f) :
889-
quotMapOfEquivQuotMapCMapSpanMk I f (Ideal.Quotient.mk (I.map (of f)) x) =
891+
theorem quotMapOfEquivQuotMapCMapMk_mk (x : AdjoinRoot f) :
892+
quotMapOfEquivQuotMapCMapMk I f (Ideal.Quotient.mk (I.map (of f)) x) =
890893
Ideal.Quotient.mk (Ideal.map (Ideal.Quotient.mk (span {f})) (I.map (C : R →+* R[X]))) x := rfl
891894

892-
set_option backward.isDefEq.respectTransparency false in
895+
@[deprecated (since := "2026-03-02")]
896+
alias quotMapOfEquivQuotMapCMapSpanMk_mk := quotMapOfEquivQuotMapCMapMk_mk
897+
893898
--this lemma should have the simp tag but this causes a lint issue
894-
theorem quotMapOfEquivQuotMapCMapSpanMk_symm_mk (x : AdjoinRoot f) :
895-
(quotMapOfEquivQuotMapCMapSpanMk I f).symm
899+
theorem quotMapOfEquivQuotMapCMapMk_symm_mk (x : AdjoinRoot f) :
900+
(quotMapOfEquivQuotMapCMapMk I f).symm
896901
(Ideal.Quotient.mk ((I.map (C : R →+* R[X])).map (Ideal.Quotient.mk (span {f}))) x) =
897902
Ideal.Quotient.mk (I.map (of f)) x := by
898-
rw [quotMapOfEquivQuotMapCMapSpanMk, Ideal.quotEquivOfEq_symm]
903+
rw [quotMapOfEquivQuotMapCMapMk, Ideal.quotEquivOfEq_symm]
899904
exact Ideal.quotEquivOfEq_mk _ _
900905

906+
@[deprecated (since := "2026-03-02")]
907+
alias quotMapOfEquivQuotMapCMapSpanMk_symm_mk := quotMapOfEquivQuotMapCMapMk_symm_mk
908+
901909
/-- The natural isomorphism `R[α]/((I[x] ⊔ (f)) / (f)) ≅ (R[x]/I[x])/((f) ⊔ I[x] / I[x])`
902910
for `α` a root of `f : R[X]` and `I : Ideal R` -/
903-
def quotMapCMapSpanMkEquivQuotMapCQuotMapSpanMk :
904-
AdjoinRoot f ⧸ (I.map (C : R →+* R[X])).map (Ideal.Quotient.mk (span ({f} : Set R[X]))) ≃+*
911+
def quotMapCMapSpanMkEquivQuotMapCQuotMapMk :
912+
AdjoinRoot f ⧸ (I.map (C : R →+* R[X])).map (AdjoinRoot.mk f) ≃+*
905913
(R[X] ⧸ I.map (C : R →+* R[X])) ⧸
906914
(span ({f} : Set R[X])).map (Ideal.Quotient.mk (I.map (C : R →+* R[X]))) :=
907915
quotQuotEquivComm (Ideal.span ({f} : Set R[X])) (I.map (C : R →+* R[X]))
908916

917+
@[deprecated (since := "2026-03-02")]
918+
alias quotMapCMapSpanMkEquivQuotMapCQuotMapSpanMk := quotMapCMapSpanMkEquivQuotMapCQuotMapMk
919+
909920
-- This lemma should have the simp tag but this causes a lint issue.
910-
theorem quotMapCMapSpanMkEquivQuotMapCQuotMapSpanMk_mk (p : R[X]) :
911-
quotMapCMapSpanMkEquivQuotMapCQuotMapSpanMk I f (Ideal.Quotient.mk _ (mk f p)) =
921+
theorem quotMapCMapSpanMkEquivQuotMapCQuotMapMk_mk (p : R[X]) :
922+
quotMapCMapSpanMkEquivQuotMapCQuotMapMk I f (Ideal.Quotient.mk _ (mk f p)) =
912923
quotQuotMk (I.map C) (span {f}) p :=
913924
rfl
914925

926+
@[deprecated (since := "2026-03-02")]
927+
alias quotMapCMapSpanMkEquivQuotMapCQuotMapSpanMk_mk := quotMapCMapSpanMkEquivQuotMapCQuotMapMk_mk
928+
915929
@[simp]
916-
theorem quotMapCMapSpanMkEquivQuotMapCQuotMapSpanMk_symm_quotQuotMk (p : R[X]) :
917-
(quotMapCMapSpanMkEquivQuotMapCQuotMapSpanMk I f).symm (quotQuotMk (I.map C) (span {f}) p) =
930+
theorem quotMapCMapSpanMkEquivQuotMapCQuotMapMk_symm_quotQuotMk (p : R[X]) :
931+
(quotMapCMapSpanMkEquivQuotMapCQuotMapMk I f).symm (quotQuotMk (I.map C) (span {f}) p) =
918932
Ideal.Quotient.mk (Ideal.map (Ideal.Quotient.mk (span {f})) (I.map (C : R →+* R[X])))
919933
(mk f p) :=
920934
rfl
921935

936+
@[deprecated (since := "2026-03-02")]
937+
alias quotMapCMapSpanMkEquivQuotMapCQuotMapSpanMk_symm_quotQuotMk :=
938+
quotMapCMapSpanMkEquivQuotMapCQuotMapMk_symm_quotQuotMk
939+
922940
/-- The natural isomorphism `(R/I)[x]/(f mod I) ≅ (R[x]/I*R[x])/(f mod I[x])` where
923941
`f : R[X]` and `I : Ideal R` -/
924942
def Polynomial.quotQuotEquivComm :
@@ -951,8 +969,8 @@ theorem Polynomial.quotQuotEquivComm_symm_mk_mk (p : R[X]) :
951969
def quotAdjoinRootEquivQuotPolynomialQuot :
952970
AdjoinRoot f ⧸ I.map (of f) ≃+*
953971
(R ⧸ I)[X] ⧸ span ({f.map (Ideal.Quotient.mk I)} : Set (R ⧸ I)[X]) :=
954-
(quotMapOfEquivQuotMapCMapSpanMk I f).trans
955-
((quotMapCMapSpanMkEquivQuotMapCQuotMapSpanMk I f).trans
972+
(quotMapOfEquivQuotMapCMapMk I f).trans
973+
((quotMapCMapSpanMkEquivQuotMapCQuotMapMk I f).trans
956974
((Ideal.quotEquivOfEq (by rw [map_span, Set.image_singleton])).trans
957975
(Polynomial.quotQuotEquivComm I f).symm))
958976

@@ -962,7 +980,6 @@ theorem quotAdjoinRootEquivQuotPolynomialQuot_mk_of (p : R[X]) :
962980
Ideal.Quotient.mk (span ({f.map (Ideal.Quotient.mk I)} : Set (R ⧸ I)[X]))
963981
(p.map (Ideal.Quotient.mk I)) := rfl
964982

965-
set_option backward.isDefEq.respectTransparency false in
966983
@[simp]
967984
theorem quotAdjoinRootEquivQuotPolynomialQuot_symm_mk_mk (p : R[X]) :
968985
(quotAdjoinRootEquivQuotPolynomialQuot I f).symm
@@ -973,8 +990,8 @@ theorem quotAdjoinRootEquivQuotPolynomialQuot_symm_mk_mk (p : R[X]) :
973990
RingEquiv.symm_trans_apply, RingEquiv.symm_trans_apply, RingEquiv.symm_symm,
974991
Polynomial.quotQuotEquivComm_mk, Ideal.quotEquivOfEq_symm, Ideal.quotEquivOfEq_mk, ←
975992
RingHom.comp_apply, ← DoubleQuot.quotQuotMk,
976-
quotMapCMapSpanMkEquivQuotMapCQuotMapSpanMk_symm_quotQuotMk,
977-
quotMapOfEquivQuotMapCMapSpanMk_symm_mk]
993+
quotMapCMapSpanMkEquivQuotMapCQuotMapMk_symm_quotQuotMk,
994+
quotMapOfEquivQuotMapCMapMk_symm_mk]
978995

979996
/-- Promote `AdjoinRoot.quotAdjoinRootEquivQuotPolynomialQuot` to an alg_equiv. -/
980997
@[simps!]

Mathlib/RingTheory/Kaehler/Basic.lean

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,9 @@ instance KaehlerDifferential.isScalarTower' : IsScalarTower R (S ⊗[R] S) Ω[S
175175
def KaehlerDifferential.fromIdeal : KaehlerDifferential.ideal R S →ₗ[S ⊗[R] S] Ω[S⁄R] :=
176176
(KaehlerDifferential.ideal R S).toCotangent
177177

178+
theorem KaehlerDifferential.fromIdeal_surjective : Function.Surjective (fromIdeal R S) :=
179+
Ideal.toCotangent_surjective _
180+
178181
/-- (Implementation) The underlying linear map of the derivation into `Ω[S⁄R]`. -/
179182
def KaehlerDifferential.DLinearMap : S →ₗ[R] Ω[S⁄R] :=
180183
((KaehlerDifferential.fromIdeal R S).restrictScalars R).comp
@@ -219,13 +222,14 @@ theorem KaehlerDifferential.span_range_derivation :
219222
Submodule.span S (Set.range <| KaehlerDifferential.D R S) = ⊤ := by
220223
rw [_root_.eq_top_iff]
221224
rintro x -
222-
obtain ⟨⟨x, hx⟩, rfl⟩ := Ideal.toCotangent_surjective _ x
223-
have : x ∈ (KaehlerDifferential.ideal R S).restrictScalars S := hx
224-
rw [← KaehlerDifferential.submodule_span_range_eq_ideal] at this
225-
suffices ∃ hx, (KaehlerDifferential.ideal R S).toCotangent ⟨x, hx⟩ ∈
226-
Submodule.span S (Set.range <| KaehlerDifferential.D R S) by
227-
exact this.choose_spec
228-
refine Submodule.span_induction ?_ ?_ ?_ ?_ this
225+
obtain ⟨⟨x, hx⟩, rfl⟩ := fromIdeal_surjective R S x
226+
rw [← Submodule.restrictScalars_mem S, ← KaehlerDifferential.submodule_span_range_eq_ideal] at hx
227+
suffices ∃ hx,
228+
fromIdeal R S ⟨x, hx⟩ ∈ Submodule.span S (Set.range <| KaehlerDifferential.D R S) from
229+
this.snd
230+
-- TODO: this proof looks like we're reinventing `Submodule.span_le`.
231+
-- I'm not sure what's the RHS here though.
232+
refine Submodule.span_induction ?_ ?_ ?_ ?_ hx
229233
· rintro _ ⟨x, rfl⟩
230234
refine ⟨KaehlerDifferential.one_smul_sub_smul_one_mem_ideal R x, ?_⟩
231235
apply Submodule.subset_span

Mathlib/RingTheory/KrullDimension/Polynomial.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ private lemma height_eq_height_add_one_of_isMaximal (p : Ideal R) [p.IsMaximal]
5858
let _ : Field (R ⧸ p) := Quotient.field p
5959
suffices h : (P.map (Ideal.Quotient.mk (Ideal.map (algebraMap R R[X]) p))).height = 1 by
6060
rw [height_eq_height_add_of_liesOver_of_hasGoingDown p, h]
61-
let e : (R[X] ⧸ (p.map C)) ≃+* (R ⧸ p)[X] := (polynomialQuotientEquivQuotientPolynomial p).symm
61+
let e : (R[X] ⧸ (p.map (algebraMap R R[X]))) ≃+* (R ⧸ p)[X] :=
62+
(polynomialQuotientEquivQuotientPolynomial p).symm
6263
let P' : Ideal (R ⧸ p)[X] := Ideal.map e <| P.map (Ideal.Quotient.mk <| p.map (algebraMap R R[X]))
6364
have : (P.map (Ideal.Quotient.mk <| p.map (algebraMap R R[X]))).IsMaximal := by
6465
refine .map_of_surjective_of_ker_le Quotient.mk_surjective ?_

0 commit comments

Comments
 (0)