Skip to content

Commit 09dceaf

Browse files
martinwintermathpre-commit-ci-lite[bot]
authored andcommitted
chore(LinearAlgebra/SesquilinearForm): deprecate IsOrtho and associated lemmas (leanprover-community#37381)
Next steps in cleaning up bilinearity and orthogonality: - deprecate `IsOrtho` and accompanying trivial lemmas (this also allows to shorten the proofs in `orthogonalBilin`). - deprecate `ortho_smul_right` and `ortho_smul_left` since now provable from simp. - remove uses of deprecated definitions. - replace `IsOrtho` in undergrad.yaml by `iIsOrtho`. See discussion at [#mathlib4 > Reorganizing bilinearity and orthogonality?](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Reorganizing.20bilinearity.20and.20orthogonality.3F/with/582426197) Due to too agressive simplification I had to remove simp from - `QuadraticMap.associated_apply` - `QuadraticMap.isOrtho_polarBilin` Co-authored-by: Martin Winter <martin.winter.math@gmail.com> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 3691aaf commit 09dceaf

12 files changed

Lines changed: 112 additions & 94 deletions

File tree

Mathlib/Algebra/Lie/InvariantForm.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def orthogonal (hΦ_inv : Φ.lieInvariant L) (N : LieSubmodule R L M) : LieSubmo
7474
__ := Φ.orthogonal N
7575
lie_mem {x y} := by
7676
suffices (∀ n ∈ N, Φ n y = 0) → ∀ n ∈ N, Φ n ⁅x, y⁆ = 0 by
77-
simpa only [LinearMap.BilinForm.isOrtho_def, -- and some default simp lemmas
77+
simpa only [
7878
AddSubsemigroup.mem_carrier, AddSubmonoid.mem_toSubsemigroup, Submodule.mem_toAddSubmonoid,
7979
LinearMap.BilinForm.mem_orthogonal_iff, LieSubmodule.mem_toSubmodule]
8080
intro H a ha
@@ -89,7 +89,7 @@ lemma orthogonal_toSubmodule (N : LieSubmodule R L M) :
8989

9090
lemma mem_orthogonal (N : LieSubmodule R L M) (y : M) :
9191
y ∈ orthogonal Φ hΦ_inv N ↔ ∀ x ∈ N, Φ x y = 0 := by
92-
simp [orthogonal, LinearMap.BilinForm.isOrtho_def, LinearMap.BilinForm.mem_orthogonal_iff]
92+
simp [orthogonal, LinearMap.BilinForm.mem_orthogonal_iff]
9393

9494
variable [LieAlgebra R L]
9595

@@ -202,7 +202,7 @@ theorem isSemisimple_of_nondegenerate : IsSemisimple K L := by
202202
intro J hJ hJI
203203
rw [← lie_eq_self_of_isAtom_of_nonabelian J hJ (hL J hJ), lieIdeal_oper_eq_span, lieSpan_le]
204204
rintro _ ⟨x, y, rfl⟩
205-
simp only [orthogonal_carrier, LinearMap.IsOrtho, Set.mem_setOf_eq]
205+
simp only [orthogonal_carrier, Set.mem_setOf_eq]
206206
intro z hz
207207
rw [← neg_eq_zero, ← hΦ_inv]
208208
suffices ⁅(x : L), z⁆ = 0 by simp only [this, map_zero, LinearMap.zero_apply]

Mathlib/Algebra/Lie/TraceForm.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ noncomputable def killingCompl : LieIdeal R L :=
404404
lemma coe_killingCompl_top :
405405
killingCompl R L ⊤ = LinearMap.ker (killingForm R L) := by
406406
ext x
407-
simp [LinearMap.ext_iff, LinearMap.BilinForm.IsOrtho, LieModule.traceForm_comm R L L x]
407+
simp [LinearMap.ext_iff, LieModule.traceForm_comm R L L x]
408408

409409
lemma restrict_killingForm :
410410
(killingForm R L).restrict I = LieModule.traceForm R I L :=

Mathlib/Algebra/Lie/Weights/Killing.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ lemma traceForm_eq_zero_of_mem_ker_of_mem_span_coroot {α : Weight K H L} {x y :
524524
refine le_antisymm (fun x hx ↦ ?_) (fun x hx y hy ↦ ?_)
525525
· simp only [LinearMap.BilinForm.mem_orthogonal_iff] at hx
526526
specialize hx (coroot α) (Submodule.mem_span_singleton_self _)
527-
simp only [LinearMap.BilinForm.isOrtho_def, traceForm_coroot, smul_eq_mul, nsmul_eq_mul,
527+
simp only [traceForm_coroot, smul_eq_mul, nsmul_eq_mul,
528528
Nat.cast_ofNat, mul_eq_zero, OfNat.ofNat_ne_zero, inv_eq_zero, false_or] at hx
529529
simpa using hx.resolve_left (root_apply_cartanEquivDual_symm_ne_zero hα)
530530
· have := traceForm_eq_zero_of_mem_ker_of_mem_span_coroot hx hy

Mathlib/LinearAlgebra/BilinearForm/Orthogonal.lean

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,32 +50,47 @@ namespace BilinForm
5050

5151
/-- The proposition that two elements of a bilinear form space are orthogonal. For orthogonality
5252
of an indexed set of elements, use `BilinForm.iIsOrtho`. -/
53+
@[deprecated "Use `B x y = 0`." (since := "2026-03-30")]
5354
def IsOrtho (B : BilinForm R M) (x y : M) : Prop :=
5455
B x y = 0
5556

57+
set_option linter.deprecated false in
58+
@[deprecated "`BilinMap.IsOrtho` has been deprecated" (since := "2026-03-30")]
5659
theorem isOrtho_def {B : BilinForm R M} {x y : M} : B.IsOrtho x y ↔ B x y = 0 :=
5760
Iff.rfl
5861

62+
set_option linter.deprecated false in
63+
@[deprecated "`BilinMap.IsOrtho` has been deprecated" (since := "2026-03-30")]
5964
theorem isOrtho_zero_left (x : M) : IsOrtho B (0 : M) x := LinearMap.isOrtho_zero_left B x
6065

66+
set_option linter.deprecated false in
67+
@[deprecated "`BilinMap.IsOrtho` has been deprecated" (since := "2026-03-30")]
6168
theorem isOrtho_zero_right (x : M) : IsOrtho B x (0 : M) :=
6269
zero_right x
6370

64-
theorem ne_zero_of_not_isOrtho_self {B : BilinForm K V} (x : V) (hx₁ : ¬B.IsOrtho x x) : x ≠ 0 :=
65-
fun hx₂ => hx₁ (hx₂.symm ▸ isOrtho_zero_left _)
71+
theorem ne_zero_of_not_isOrtho_self {B : BilinForm K V} (x : V) (hx₁ : B x x0) : x ≠ 0 := by
72+
by_contra; simp [this] at hx₁
6673

67-
theorem IsRefl.ortho_comm (H : B.IsRefl) {x y : M} : IsOrtho B x y ↔ IsOrtho B y x :=
74+
theorem IsRefl.eq_iff (H : B.IsRefl) {x y : M} : B x y = 0B y x = 0 :=
6875
⟨eq_zero H, eq_zero H⟩
6976

70-
theorem IsAlt.ortho_comm (H : B₁.IsAlt) {x y : M₁} : IsOrtho B₁ x y ↔ IsOrtho B₁ y x :=
71-
LinearMap.IsAlt.ortho_comm H
77+
@[deprecated (since := "2026-03-31")]
78+
alias IsRefl.ortho_comm := IsRefl.eq_iff
7279

73-
theorem IsSymm.ortho_comm (H : B.IsSymm) {x y : M} : IsOrtho B x y ↔ IsOrtho B y x :=
74-
LinearMap.IsSymm.ortho_comm (isSymm_iff.1 H)
80+
theorem IsAlt.eq_iff (H : B₁.IsAlt) {x y : M₁} : B₁ x y = 0 ↔ B₁ y x = 0 :=
81+
LinearMap.IsAlt.eq_iff H
82+
83+
@[deprecated (since := "2026-03-31")]
84+
alias IsAlt.ortho_comm := IsAlt.eq_iff
85+
86+
theorem IsSymm.eq_iff (H : B.IsSymm) {x y : M} : B x y = 0 ↔ B y x = 0 :=
87+
LinearMap.IsSymm.eq_iff (isSymm_iff.1 H)
88+
89+
@[deprecated (since := "2026-03-31")]
90+
alias IsSymm.ortho_comm := IsSymm.eq_iff
7591

7692
/-- A set of vectors `v` is orthogonal with respect to some bilinear form `B` if and only
77-
if for all `i ≠ j`, `B (v i) (v j) = 0`. For orthogonality between two elements, use
78-
`BilinForm.IsOrtho` -/
93+
if for all `i ≠ j`, `B (v i) (v j) = 0`. -/
7994
def iIsOrtho {n : Type w} (B : BilinForm R M) (v : n → M) : Prop :=
8095
B.IsOrthoᵢ v
8196

@@ -88,15 +103,17 @@ section
88103
variable {R₄ M₄ : Type*} [CommRing R₄] [IsDomain R₄]
89104
variable [AddCommGroup M₄] [Module R₄ M₄] {G : BilinForm R₄ M₄}
90105

91-
@[simp]
106+
set_option linter.deprecated false in
107+
@[deprecated "`BilinMap.IsOrtho` has been deprecated" (since := "2026-03-30")]
92108
theorem isOrtho_smul_left {x y : M₄} {a : R₄} (ha : a ≠ 0) :
93109
IsOrtho G (a • x) y ↔ IsOrtho G x y := by
94110
dsimp only [IsOrtho]
95111
rw [map_smul]
96112
simp only [LinearMap.smul_apply, smul_eq_mul, mul_eq_zero, or_iff_right_iff_imp]
97113
exact fun a ↦ (ha a).elim
98114

99-
@[simp]
115+
set_option linter.deprecated false in
116+
@[deprecated "`BilinMap.IsOrtho` has been deprecated" (since := "2026-03-30")]
100117
theorem isOrtho_smul_right {x y : M₄} {a : R₄} (ha : a ≠ 0) :
101118
IsOrtho G x (a • y) ↔ IsOrtho G x y := by
102119
dsimp only [IsOrtho]
@@ -107,7 +124,7 @@ theorem isOrtho_smul_right {x y : M₄} {a : R₄} (ha : a ≠ 0) :
107124
/-- A set of orthogonal vectors `v` with respect to some bilinear form `B` is linearly independent
108125
if for all `i`, `B (v i) (v i) ≠ 0`. -/
109126
theorem linearIndependent_of_iIsOrtho {n : Type w} {B : BilinForm K V} {v : n → V}
110-
(hv₁ : B.iIsOrtho v) (hv₂ : ∀ i, ¬B.IsOrtho (v i) (v i)) : LinearIndependent K v := by
127+
(hv₁ : B.iIsOrtho v) (hv₂ : ∀ i, B (v i) (v i)0) : LinearIndependent K v := by
111128
classical
112129
rw [linearIndependent_iff']
113130
intro s w hs i hi
@@ -136,10 +153,10 @@ variable {N L : Submodule R M}
136153

137154
@[simp]
138155
theorem mem_orthogonal_iff {N : Submodule R M} {m : M} :
139-
m ∈ B.orthogonal N ↔ ∀ n ∈ N, IsOrtho B n m :=
156+
m ∈ B.orthogonal N ↔ ∀ n ∈ N, B n m = 0 :=
140157
Iff.rfl
141158

142-
@[simp] lemma orthogonal_bot : B.orthogonal ⊥ = ⊤ := by ext; simp [IsOrtho]
159+
@[simp] lemma orthogonal_bot : B.orthogonal ⊥ = ⊤ := by ext; simp
143160

144161
theorem orthogonal_le (h : N ≤ L) : B.orthogonal L ≤ B.orthogonal N := fun _ hn l hl => hn l (h hl)
145162

@@ -148,14 +165,14 @@ theorem le_orthogonal_orthogonal (b : B.IsRefl) : N ≤ B.orthogonal (B.orthogon
148165

149166
lemma orthogonal_top_eq_ker (hB : B.IsRefl) :
150167
B.orthogonal ⊤ = LinearMap.ker B := by
151-
ext; simp [LinearMap.BilinForm.IsOrtho, LinearMap.ext_iff, hB.eq_iff]
168+
ext; simp [LinearMap.ext_iff, hB.eq_iff]
152169

153170
lemma orthogonal_top_eq_bot (hB : B.Nondegenerate) :
154171
B.orthogonal ⊤ = ⊥ :=
155172
(Submodule.eq_bot_iff _).mpr fun x hx ↦ hB.2 x (by simpa using! hx)
156173

157174
-- ↓ This lemma only applies in fields as we require `a * b = 0 → a = 0 ∨ b = 0`
158-
theorem span_singleton_inf_orthogonal_eq_bot {B : BilinForm K V} {x : V} (hx : ¬B.IsOrtho x x) :
175+
theorem span_singleton_inf_orthogonal_eq_bot {B : BilinForm K V} {x : V} (hx : B x x0) :
159176
K ∙ x ⊓ B.orthogonal (K ∙ x) = ⊥ :=
160177
LinearMap.span_singleton_inf_orthogonal_eq_bot B _ hx
161178

@@ -164,13 +181,13 @@ theorem orthogonal_span_singleton_eq_toLin_ker {B : BilinForm K V} (x : V) :
164181
B.orthogonal (K ∙ x) = LinearMap.ker (LinearMap.BilinForm.toLinHomAux₁ B x) :=
165182
LinearMap.orthogonal_span_singleton_eq_to_lin_ker ..
166183

167-
theorem span_singleton_sup_orthogonal_eq_top {B : BilinForm K V} {x : V} (hx : ¬B.IsOrtho x x) :
184+
theorem span_singleton_sup_orthogonal_eq_top {B : BilinForm K V} {x : V} (hx : B x x0) :
168185
K ∙ x ⊔ B.orthogonal (K ∙ x) = ⊤ :=
169186
LinearMap.span_singleton_sup_orthogonal_eq_top hx
170187

171188
/-- Given a bilinear form `B` and some `x` such that `B x x ≠ 0`, the span of the singleton of `x`
172189
is complement to its orthogonal complement. -/
173-
theorem isCompl_span_singleton_orthogonal {B : BilinForm K V} {x : V} (hx : ¬B.IsOrtho x x) :
190+
theorem isCompl_span_singleton_orthogonal {B : BilinForm K V} {x : V} (hx : B x x0) :
174191
IsCompl (K ∙ x) (B.orthogonal <| K ∙ x) :=
175192
LinearMap.isCompl_span_singleton_orthogonal hx
176193

@@ -189,14 +206,14 @@ theorem nondegenerate_restrict_of_disjoint_orthogonal (B : BilinForm R₁ M₁)
189206
elements. -/
190207
theorem iIsOrtho.not_isOrtho_basis_self_of_nondegenerate {n : Type w} [Nontrivial R]
191208
{B : BilinForm R M} {v : Basis n R M} (h : B.iIsOrtho v) (hB : B.Nondegenerate) (i : n) :
192-
¬B.IsOrtho (v i) (v i) :=
209+
B (v i) (v i)0 :=
193210
h.not_isOrtho_basis_self_of_separatingLeft hB.1 i
194211

195212
/-- Given an orthogonal basis with respect to a bilinear form, the bilinear form is nondegenerate
196213
iff the basis has no elements which are self-orthogonal. -/
197214
theorem iIsOrtho.nondegenerate_iff_not_isOrtho_basis_self {n : Type w} [IsDomain R]
198215
(B : BilinForm R M) (v : Basis n R M) (hO : B.iIsOrtho v) :
199-
B.Nondegenerate ↔ ∀ i, ¬B.IsOrtho (v i) (v i) :=
216+
B.Nondegenerate ↔ ∀ i, B (v i) (v i)0 :=
200217
⟨hO.not_isOrtho_basis_self_of_nondegenerate, hO.nondegenerate_of_not_isOrtho_basis_self _⟩
201218

202219
section
@@ -351,7 +368,7 @@ on the whole space. -/
351368
/-- The restriction of a reflexive, non-degenerate bilinear form on the orthogonal complement of
352369
the span of a singleton is also non-degenerate. -/
353370
theorem restrict_nondegenerate_orthogonal_spanSingleton (B : BilinForm K V) (b₁ : B.Nondegenerate)
354-
(b₂ : B.IsRefl) {x : V} (hx : ¬B.IsOrtho x x) :
371+
(b₂ : B.IsRefl) {x : V} (hx : B x x0) :
355372
Nondegenerate <| B.restrict <| B.orthogonal (K ∙ x) := by
356373
have (n : V) : n ∈ K ∙ x ⊔ B.orthogonal (K ∙ x) :=
357374
(span_singleton_sup_orthogonal_eq_top hx).symm ▸ Submodule.mem_top

Mathlib/LinearAlgebra/QuadraticForm/Basic.lean

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -901,16 +901,14 @@ def associatedHom : QuadraticMap R M N →ₗ[S] (BilinMap R M N) where
901901

902902
variable (Q : QuadraticMap R M N)
903903

904-
@[simp]
905904
theorem associated_apply (x y : M) :
906-
associatedHom S Q x y = ⅟(2 : Module.End R N) • (Q (x + y) - Q x - Q y) :=
907-
rfl
905+
associatedHom S Q x y = ⅟(2 : Module.End R N) • (Q (x + y) - Q x - Q y) := rfl
908906

909907
set_option backward.defeqAttrib.useBackward true in
910908
/-- Twice the associated bilinear map of `Q` is the same as the polar of `Q`. -/
911909
@[simp] theorem two_nsmul_associated : 2 • associatedHom S Q = Q.polarBilin := by
912910
ext
913-
dsimp
911+
dsimp [associated_apply]
914912
rw [← LinearMap.smul_apply, nsmul_eq_mul, Nat.cast_ofNat, mul_invOf_self', Module.End.one_apply,
915913
polar]
916914

@@ -1065,9 +1063,9 @@ alias ⟨IsOrtho.symm, _⟩ := isOrtho_comm
10651063

10661064
theorem _root_.LinearMap.BilinForm.toQuadraticMap_isOrtho [IsCancelAdd R]
10671065
[NoZeroDivisors R] [CharZero R] {B : BilinMap R M R} {x y : M} (h : B.IsSymm) :
1068-
B.toQuadraticMap.IsOrtho x y ↔ B.IsOrtho x y := by
1066+
B.toQuadraticMap.IsOrtho x y ↔ B x y = 0 := by
10691067
letI : AddCancelMonoid R := { ‹IsCancelAdd R›, (inferInstance : AddCommMonoid R) with }
1070-
simp_rw [isOrtho_def, LinearMap.isOrtho_def, B.toQuadraticMap_apply, map_add,
1068+
simp_rw [isOrtho_def, B.toQuadraticMap_apply, map_add,
10711069
LinearMap.add_apply, add_comm _ (B y y), add_add_add_comm _ _ (B y y), add_comm (B y y)]
10721070
rw [add_eq_left (a := B x x + B y y), ← h.eq, RingHom.id_apply, add_self_eq_zero]
10731071

@@ -1077,18 +1075,16 @@ section CommRing
10771075
variable [CommRing R] [AddCommGroup M] [Module R M] [AddCommGroup N] [Module R N]
10781076
{Q : QuadraticMap R M N}
10791077

1080-
@[simp]
1081-
theorem isOrtho_polarBilin {x y : M} : Q.polarBilin.IsOrtho x y ↔ IsOrtho Q x y := by
1082-
simp_rw [isOrtho_def, LinearMap.isOrtho_def, polarBilin_apply_apply, polar, sub_sub, sub_eq_zero]
1078+
theorem isOrtho_polarBilin {x y : M} : Q.polarBilin x y = 0 ↔ IsOrtho Q x y := by
1079+
simp_rw [isOrtho_def, polarBilin_apply_apply, polar, sub_sub, sub_eq_zero]
10831080

10841081
theorem IsOrtho.polar_eq_zero {x y : M} (h : IsOrtho Q x y) : polar Q x y = 0 :=
10851082
isOrtho_polarBilin.mpr h
10861083

10871084
@[simp]
10881085
theorem associated_isOrtho [Invertible (2 : R)] {x y : M} :
1089-
Q.associated.IsOrtho x y ↔ Q.IsOrtho x y := by
1090-
simp_rw [isOrtho_def, LinearMap.isOrtho_def, associated_apply, invOf_smul_eq_iff,
1091-
smul_zero, sub_sub, sub_eq_zero]
1086+
Q.associated x y = 0 ↔ Q.IsOrtho x y := by
1087+
simp_rw [isOrtho_def, associated_apply, invOf_smul_eq_iff, smul_zero, sub_sub, sub_eq_zero]
10921088

10931089
end CommRing
10941090

@@ -1366,7 +1362,7 @@ variable [CommRing R] [AddCommGroup M] [Module R M]
13661362
on a module `M` over a ring `R` with invertible `2`, i.e. there exists some
13671363
`x : M` such that `B x x ≠ 0`. -/
13681364
theorem exists_bilinForm_self_ne_zero [htwo : Invertible (2 : R)] {B : BilinForm R M}
1369-
(hB₁ : B ≠ 0) (hB₂ : B.IsSymm) : ∃ x, ¬B.IsOrtho x x := by
1365+
(hB₁ : B ≠ 0) (hB₂ : B.IsSymm) : ∃ x, B x x0 := by
13701366
lift B to QuadraticForm R M using hB₂ with Q
13711367
obtain ⟨x, hx⟩ := QuadraticMap.exists_quadraticMap_ne_zero hB₁
13721368
exact ⟨x, fun h => hx (Q.associated_eq_self_apply ℕ x ▸ h)⟩
@@ -1410,15 +1406,15 @@ theorem exists_orthogonal_basis [hK : Invertible (2 : K)] {B : LinearMap.BilinFo
14101406
intro y
14111407
refine ⟨-B x y / B x x, fun z hz => ?_⟩
14121408
obtain ⟨c, rfl⟩ := Submodule.mem_span_singleton.1 hz
1413-
rw [IsOrtho, map_smul, smul_apply, map_add, map_smul, smul_eq_mul, smul_eq_mul,
1409+
rw [map_smul, smul_apply, map_add, map_smul, smul_eq_mul, smul_eq_mul,
14141410
div_mul_cancel₀ _ hx, add_neg_cancel, mul_zero])
14151411
refine ⟨b, ?_⟩
14161412
rw [Basis.coe_mkFinCons]
14171413
intro j i
14181414
refine Fin.cases ?_ (fun i => ?_) i <;> refine Fin.cases ?_ (fun j => ?_) j <;> intro hij <;>
14191415
simp only [Function.onFun, Fin.cons_zero, Fin.cons_succ, Function.comp_apply]
14201416
· exact (hij rfl).elim
1421-
· rw [IsOrtho, ← hB₂.eq]
1417+
· rw [← hB₂.eq]
14221418
exact (v' j).prop _ (Submodule.mem_span_singleton_self x)
14231419
· exact (v' i).prop _ (Submodule.mem_span_singleton_self x)
14241420
· exact hv₁ (ne_of_apply_ne _ hij)

Mathlib/LinearAlgebra/QuadraticForm/IsometryEquiv.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ theorem equivalent_weightedSumSquares_units_of_nondegenerate' (Q : QuadraticForm
171171
∃ w : Fin (Module.finrank K V) → Kˣ, Equivalent Q (weightedSumSquares K w) := by
172172
obtain ⟨v, hv₁⟩ := exists_orthogonal_basis (associated_isSymm K Q)
173173
have hv₂ := hv₁.not_isOrtho_basis_self_of_separatingLeft hQ
174-
simp_rw [LinearMap.IsOrtho, associated_eq_self_apply] at hv₂
174+
simp_rw [associated_eq_self_apply] at hv₂
175175
exact ⟨fun i => Units.mk0 _ (hv₂ i), ⟨Q.isometryEquivWeightedSumSquares v hv₁⟩⟩
176176

177177
variable {ι S R : Type*}

Mathlib/LinearAlgebra/QuadraticForm/Radical.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ the radical of a quadratic map is the kernel of its associated bilinear map. -/
138138
lemma radical_eq_ker_associated : Q.radical = (QuadraticMap.associated Q).ker := by
139139
rw [radical_eq_ker_polarBilin]
140140
ext m
141-
simp [LinearMap.ext_iff, QuadraticMap.polar, -smul_eq_mul, invOf_smul_eq_iff]
141+
simp [associated_apply, LinearMap.ext_iff, QuadraticMap.polar, invOf_smul_eq_iff]
142142

143143
/--
144144
If `2` is invertible in the coefficient ring,

Mathlib/LinearAlgebra/QuadraticForm/TensorProduct.lean

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,10 @@ protected abbrev tmul (Q₁ : QuadraticForm A M₁) (Q₂ : QuadraticForm R M₂
110110
theorem associated_tmul [Invertible (2 : A)] (Q₁ : QuadraticForm A M₁) (Q₂ : QuadraticForm R M₂) :
111111
(Q₁.tmul Q₂).associated = BilinForm.tmul Q₁.associated Q₂.associated := by
112112
rw [BilinForm.tmul, BilinForm.tensorDistrib, LinearMap.comp_apply, ← BilinMap.tmul,
113-
← QuadraticMap.associated_tmul Q₁ Q₂]
114-
aesop
113+
← QuadraticMap.associated_tmul Q₁ Q₂, LinearEquiv.coe_coe, LinearEquiv.congrRight₂_apply]
114+
ext : 6
115+
simp [associated_apply]
116+
rfl
115117

116118
set_option backward.isDefEq.respectTransparency false in
117119
theorem polarBilin_tmul [Invertible (2 : A)] (Q₁ : QuadraticForm A M₁) (Q₂ : QuadraticForm R M₂) :

Mathlib/LinearAlgebra/QuadraticForm/TensorProduct/Isometries.lean

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ theorem tmul_comp_tensorMap
4747
have h₃ : Q₃ = Q₄.comp g.toLinearMap := QuadraticMap.ext fun x => (g.map_app x).symm
4848
refine (QuadraticMap.associated_rightInverse R).injective ?_
4949
ext m₁ m₃ m₁' m₃'
50-
simp [-associated_apply, h₁, h₃, associated_tmul]
50+
simp [h₁, h₃, associated_tmul]
5151

5252
@[simp]
5353
theorem tmul_tensorMap_apply
@@ -156,8 +156,7 @@ theorem comp_tensorRId_eq (Q₁ : QuadraticForm R M₁) :
156156
Q₁.comp (TensorProduct.rid R M₁) = Q₁.tmul (sq (R := R)) := by
157157
refine (QuadraticMap.associated_rightInverse R).injective ?_
158158
ext m₁ m₁'
159-
simp only [associated_tmul, QuadraticMap.associated_comp]
160-
simp [-associated_apply, one_mul]
159+
simp [associated_tmul, QuadraticMap.associated_comp, one_mul]
161160

162161
@[simp]
163162
theorem tmul_tensorRId_apply

Mathlib/LinearAlgebra/RootSystem/Finite/Nondegenerate.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,11 +328,11 @@ lemma orthogonal_rootSpan_eq :
328328
rw [← LinearMap.BilinForm.orthogonal_top_eq_ker P.rootForm_symmetric.isRefl]
329329
refine le_antisymm ?_ (by intro; simp_all)
330330
rintro x hx y -
331-
simp only [LinearMap.BilinForm.mem_orthogonal_iff, LinearMap.BilinForm.IsOrtho] at hx ⊢
331+
simp only [LinearMap.BilinForm.mem_orthogonal_iff] at hx ⊢
332332
obtain ⟨u, hu, v, hv, rfl⟩ : ∃ᵉ (u ∈ P.rootSpan R) (v ∈ LinearMap.ker P.RootForm), u + v = y := by
333333
rw [← Submodule.mem_sup, P.isCompl_rootSpan_ker_rootForm.sup_eq_top]; exact Submodule.mem_top
334334
simp only [LinearMap.mem_ker] at hv
335-
simp [LinearMap.IsOrtho, hx _ hu, hv]
335+
simp [hx _ hu, hv]
336336

337337
@[simp]
338338
lemma orthogonal_corootSpan_eq :

0 commit comments

Comments
 (0)