Skip to content

Commit 3c51295

Browse files
committed
chore(LinearAlgebra/Projection): deprecating subtype ∘ linearProjOfIsCompl in favor of IsCompl.projection (leanprover-community#27644)
This deprecates all instances of `U.subtype ∘ U.linearProjOfIsCompl V hUV` and `(U.linearProjOfIsCompl V hUV x : E)` in favor of `hUV.projection` and `hUV.projection x` respectively in `LinearAlgebra/Projection` and other files.
1 parent ce9386e commit 3c51295

4 files changed

Lines changed: 45 additions & 30 deletions

File tree

Mathlib/Algebra/Lie/LieTheorem.lean

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,14 +180,15 @@ theorem exists_nontrivial_weightSpace_of_lieIdeal [LieModule.IsTriangularizable
180180
refine nontrivial_of_ne ⟨v, ?_⟩ 0 ?_
181181
· rw [mem_weightSpace]
182182
intro x
183-
have hπ : (π₁ x : L) + π₂ x = x := linearProjOfIsCompl_add_linearProjOfIsCompl_eq_self hA x
184-
suffices(π₂ x : L), v⁆ = (c • e (π₂ x)) • v by
183+
have hπ : (π₁ x : L) + π₂ x = x := hA.projection_add_projection_eq_self x
184+
sufficeshA.symm.projection x, v⁆ = (c • e (π₂ x)) • v by
185185
calc ⁅x, v⁆
186-
= ⁅π₁ x, v⁆ + ⁅(π₂ x : L), v⁆ := congr(⁅$hπ.symm, v⁆) ▸ add_lie _ _ _
187-
_ = χ₀ (π₁ x) • v + (c • e (π₂ x)) • v := by rw [hv' (π₁ x), this]
186+
= ⁅π₁ x, v⁆ + ⁅hA.symm.projection x, v⁆ := congr(⁅$hπ.symm, v⁆) ▸ add_lie _ _ _
187+
_ = χ₀ (π₁ x) • v + (c • e (π₂ x)) • v := by rw [hv' (π₁ x), this]
188188
_ = _ := by simp [add_smul]
189-
calc ⁅(π₂ x : L), v⁆
190-
= e (π₂ x) • ↑(c • ⟨v, hv⟩ : W) := by rw [← he, smul_lie, ← hvc.apply_eq_smul]; rfl
189+
calc ⁅hA.symm.projection x, v⁆
190+
= e (π₂ x) • ↑(c • ⟨v, hv⟩ : W) := by
191+
rw [IsCompl.projection_apply, ← he, smul_lie, ← hvc.apply_eq_smul]; rfl
191192
_ = (c • e (π₂ x)) • v := by rw [smul_assoc, smul_comm]; rfl
192193
· simpa [ne_eq, LieSubmodule.mk_eq_zero] using hvc.right
193194

Mathlib/Analysis/InnerProductSpace/Projection/Submodule.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,8 @@ theorem orthogonalProjection_eq_linearProjOfIsCompl [K.HasOrthogonalProjection]
182182
K.orthogonalProjection x =
183183
K.linearProjOfIsCompl _ Submodule.isCompl_orthogonal_of_hasOrthogonalProjection x := by
184184
have : IsCompl K Kᗮ := Submodule.isCompl_orthogonal_of_hasOrthogonalProjection
185-
conv_lhs => rw [← Submodule.linearProjOfIsCompl_add_linearProjOfIsCompl_eq_self this x]
185+
conv_lhs => rw [← IsCompl.projection_add_projection_eq_self this x]
186+
simp_rw [IsCompl.projection_apply]
186187
rw [map_add, orthogonalProjection_mem_subspace_eq_self,
187188
orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero (Submodule.coe_mem _), add_zero]
188189

Mathlib/Analysis/InnerProductSpace/Symmetric.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,8 @@ theorem _root_.Submodule.IsCompl.projection_isSymmetric_iff
273273
← Submodule.linearProjOfIsCompl_apply_left hUV ⟨u, hu⟩, ← U.subtype_apply, ← comp_apply,
274274
← h, comp_apply, linearProjOfIsCompl_apply_right hUV ⟨v, hv⟩,
275275
map_zero, inner_zero_left]
276-
· nth_rw 2 [← linearProjOfIsCompl_add_linearProjOfIsCompl_eq_self hUV x]
277-
nth_rw 1 [← linearProjOfIsCompl_add_linearProjOfIsCompl_eq_self hUV y]
276+
· nth_rw 2 [← hUV.projection_add_projection_eq_self x]
277+
nth_rw 1 [← hUV.projection_add_projection_eq_self y]
278278
rw [isOrtho_iff_inner_eq] at h
279279
simp [inner_add_right, inner_add_left, h, inner_eq_zero_symm]
280280

Mathlib/LinearAlgebra/Projection.lean

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,15 @@ theorem IsCompl.projection_apply (hpq : IsCompl p q) (x : E) :
156156
hpq.projection x = p.linearProjOfIsCompl q hpq x :=
157157
rfl
158158

159+
@[simp]
160+
theorem coe_linearProjOfIsCompl_apply (hpq : IsCompl p q) (x : E) :
161+
(p.linearProjOfIsCompl q hpq x : E) = hpq.projection x :=
162+
rfl
163+
159164
@[simp]
160165
theorem IsCompl.projection_apply_mem (hpq : IsCompl p q) (x : E) :
161-
hpq.projection x ∈ p := by
162-
simp [projection]
166+
hpq.projection x ∈ p :=
167+
SetLike.coe_mem _
163168

164169
@[simp]
165170
theorem linearProjOfIsCompl_apply_left (h : IsCompl p q) (x : p) :
@@ -188,7 +193,7 @@ theorem linearProjOfIsCompl_apply_eq_zero_iff (h : IsCompl p q) {x : E} :
188193
@[simp]
189194
theorem IsCompl.projection_apply_eq_zero_iff (hpq : IsCompl p q) {x : E} :
190195
hpq.projection x = 0 ↔ x ∈ q := by
191-
simp [projection, linearProjOfIsCompl_apply_eq_zero_iff hpq]
196+
simp [projection, -coe_linearProjOfIsCompl_apply]
192197

193198
theorem linearProjOfIsCompl_apply_right' (h : IsCompl p q) (x : E) (hx : x ∈ q) :
194199
linearProjOfIsCompl p q h x = 0 :=
@@ -212,14 +217,18 @@ theorem linearProjOfIsCompl_comp_subtype (h : IsCompl p q) :
212217
(linearProjOfIsCompl p q h).comp p.subtype = LinearMap.id :=
213218
LinearMap.ext <| linearProjOfIsCompl_apply_left h
214219

215-
theorem linearProjOfIsCompl_idempotent (h : IsCompl p q) (x : E) :
216-
linearProjOfIsCompl p q h (linearProjOfIsCompl p q h x) = linearProjOfIsCompl p q h x :=
220+
theorem linearProjOfIsCompl_isCompl_projection (h : IsCompl p q) (x : E) :
221+
linearProjOfIsCompl p q h (h.projection x) = linearProjOfIsCompl p q h x :=
217222
linearProjOfIsCompl_apply_left h _
218223

224+
@[deprecated (since := "2025-07-29")] alias linearProjOfIsCompl_idempotent :=
225+
linearProjOfIsCompl_isCompl_projection
226+
219227
/-- The linear projection onto a subspace along its complement is an idempotent. -/
228+
@[simp]
220229
theorem IsCompl.projection_isIdempotentElem (hpq : IsCompl p q) :
221-
IsIdempotentElem hpq.projection := by
222-
simp [projection, IsIdempotentElem, LinearMap.ext_iff]
230+
IsIdempotentElem hpq.projection :=
231+
LinearMap.ext fun _ ↦ congr($(linearProjOfIsCompl_isCompl_projection hpq _))
223232

224233
theorem existsUnique_add_of_isCompl_prod (hc : IsCompl p q) (x : E) :
225234
∃! u : p × q, (u.fst : E) + u.snd = x :=
@@ -230,28 +239,32 @@ theorem existsUnique_add_of_isCompl (hc : IsCompl p q) (x : E) :
230239
let ⟨u, hu₁, hu₂⟩ := existsUnique_add_of_isCompl_prod hc x
231240
⟨u.1, u.2, hu₁, fun r s hrs => Prod.eq_iff_fst_eq_snd_eq.1 (hu₂ ⟨r, s⟩ hrs)⟩
232241

233-
theorem linearProjOfIsCompl_add_linearProjOfIsCompl_eq_self (hpq : IsCompl p q) (x : E) :
234-
(p.linearProjOfIsCompl q hpq x + q.linearProjOfIsCompl p hpq.symm x : E) = x := by
235-
dsimp only [linearProjOfIsCompl]
242+
theorem IsCompl.projection_add_projection_eq_self (hpq : IsCompl p q) (x : E) :
243+
hpq.projection x + hpq.symm.projection x = x := by
244+
dsimp only [IsCompl.projection, linearProjOfIsCompl]
236245
rw [← prodComm_trans_prodEquivOfIsCompl _ _ hpq]
237246
exact (prodEquivOfIsCompl _ _ hpq).apply_symm_apply x
238247

248+
@[deprecated (since := "2025-07-29")] alias linearProjOfIsCompl_add_linearProjOfIsCompl_eq_self :=
249+
IsCompl.projection_add_projection_eq_self
250+
239251
@[deprecated (since := "2025-07-11")] alias linear_proj_add_linearProjOfIsCompl_eq_self :=
240252
linearProjOfIsCompl_add_linearProjOfIsCompl_eq_self
241253

242-
lemma linearProjOfIsCompl_eq_self_sub_linearProjOfIsCompl (hpq : IsCompl p q) (x : E) :
243-
(q.linearProjOfIsCompl p hpq.symm x : E) = x - (p.linearProjOfIsCompl q hpq x : E) := by
244-
rw [eq_sub_iff_add_eq, linearProjOfIsCompl_add_linearProjOfIsCompl_eq_self]
254+
lemma IsCompl.projection_eq_self_sub_projection (hpq : IsCompl p q) (x : E) :
255+
hpq.symm.projection x = x - hpq.projection x := by
256+
rw [eq_sub_iff_add_eq, projection_add_projection_eq_self]
245257

246-
/-- The projection to `p` along `q` of `x` equals `x` if and only if `x ∈ p`. -/
247-
@[simp] lemma linearProjOfIsCompl_eq_self_iff (hpq : IsCompl p q) (x : E) :
248-
(p.linearProjOfIsCompl q hpq x : E) = x ↔ x ∈ p := by
249-
rw [eq_comm, ← sub_eq_zero, ← linearProjOfIsCompl_eq_self_sub_linearProjOfIsCompl,
250-
coe_eq_zero, linearProjOfIsCompl_apply_eq_zero_iff]
258+
@[deprecated (since := "2025-07-29")] alias linearProjOfIsCompl_eq_self_sub_linearProjOfIsCompl :=
259+
IsCompl.projection_eq_self_sub_projection
251260

261+
/-- The projection to `p` along `q` of `x` equals `x` if and only if `x ∈ p`. -/
252262
@[simp] lemma IsCompl.projection_eq_self_iff (hpq : IsCompl p q) (x : E) :
253263
hpq.projection x = x ↔ x ∈ p := by
254-
rw [hpq.projection_apply, linearProjOfIsCompl_eq_self_iff hpq]
264+
rw [eq_comm, ← sub_eq_zero, ← projection_eq_self_sub_projection, projection_apply_eq_zero_iff]
265+
266+
@[deprecated (since := "2025-07-29")] alias linearProjOfIsCompl_eq_self_iff :=
267+
IsCompl.projection_eq_self_iff
255268

256269
end Submodule
257270

@@ -346,8 +359,8 @@ theorem range_ofIsCompl (hpq : IsCompl p q) {φ : p →ₗ[R] F} {ψ : q →ₗ[
346359
all_goals rintro - ⟨x, rfl⟩; exact ⟨x, by simp⟩
347360

348361
theorem ofIsCompl_subtype_zero_eq (hpq : IsCompl p q) :
349-
ofIsCompl hpq p.subtype 0 = p.subtype ∘ₗ p.linearProjOfIsCompl q hpq := by
350-
simp [ofIsCompl_eq_add]
362+
ofIsCompl hpq p.subtype 0 = hpq.projection := by
363+
simp [ofIsCompl_eq_add, IsCompl.projection]
351364

352365
theorem ofIsCompl_symm (hpq : IsCompl p q) {φ : p →ₗ[R] F} {ψ : q →ₗ[R] F} :
353366
ofIsCompl hpq.symm ψ φ = ofIsCompl hpq φ ψ := by

0 commit comments

Comments
 (0)