Documentation

Mathlib.Analysis.InnerProductSpace.Projection.Basic

The orthogonal projection #

Given a nonempty subspace K of an inner product space E such that K admits an orthogonal projection, this file constructs K.orthogonalProjection : E โ†’L[๐•œ] K, the orthogonal projection of E onto K. This map satisfies: for any point u in E, the point v = K.orthogonalProjection u in K minimizes the distance โ€–u - vโ€– to u.

This file also defines K.starProjection : E โ†’L[๐•œ] E which is the orthogonal projection of E onto K but as a map from E to E instead of E to K.

Basic API for orthogonalProjection and starProjection is developed.

References #

The orthogonal projection construction is adapted from

The Coq code is available at the following address: http://www.lri.fr/~sboldo/elfic/index.html

class Submodule.HasOrthogonalProjection {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) :

A subspace K : Submodule ๐•œ E has an orthogonal projection if every vector v : E admits an orthogonal projection to K.

Instances
    @[instance 100]
    instance Submodule.HasOrthogonalProjection.ofCompleteSpace {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [CompleteSpace โ†ฅK] :
    instance Submodule.HasOrthogonalProjection.map_linearIsometryEquiv {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] {E' : Type u_4} [NormedAddCommGroup E'] [InnerProductSpace ๐•œ E'] (f : E โ‰ƒโ‚—แตข[๐•œ] E') :
    def Submodule.orthogonalProjectionFn {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] (v : E) :
    E

    The orthogonal projection onto a complete subspace, as an unbundled function. This definition is only intended for use in setting up the bundled version orthogonalProjection and should not be used once that is defined.

    Equations
    Instances For
      theorem Submodule.orthogonalProjectionFn_mem {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (v : E) :

      The unbundled orthogonal projection is in the given subspace. This lemma is only intended for use in setting up the bundled version and should not be used once that is defined.

      theorem Submodule.orthogonalProjectionFn_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (v w : E) :
      w โˆˆ K โ†’ inner ๐•œ (v - K.orthogonalProjectionFn v) w = 0

      The characterization of the unbundled orthogonal projection. This lemma is only intended for use in setting up the bundled version and should not be used once that is defined.

      theorem Submodule.eq_orthogonalProjectionFn_of_mem_of_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {u v : E} (hvm : v โˆˆ K) (hvo : โˆ€ w โˆˆ K, inner ๐•œ (u - v) w = 0) :

      The unbundled orthogonal projection is the unique point in K with the orthogonality property. This lemma is only intended for use in setting up the bundled version and should not be used once that is defined.

      def Submodule.orthogonalProjection {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] :
      E โ†’L[๐•œ] โ†ฅK

      The orthogonal projection onto a complete subspace.

      Equations
      Instances For
        @[simp]
        theorem Submodule.orthogonalProjectionFn_eq {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (v : E) :
        def Submodule.starProjection {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (U : Submodule ๐•œ E) [U.HasOrthogonalProjection] :
        E โ†’L[๐•œ] E

        The orthogonal projection onto a subspace as a map from the full space to itself, as opposed to Submodule.orthogonalProjection, which maps into the subtype. This version is important as it satisfies IsStarProjection.

        Equations
        Instances For
          theorem Submodule.starProjection_apply {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (U : Submodule ๐•œ E) [U.HasOrthogonalProjection] (v : E) :
          @[simp]
          theorem Submodule.coe_orthogonalProjection_apply {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (U : Submodule ๐•œ E) [U.HasOrthogonalProjection] (v : E) :
          @[simp]
          theorem Submodule.starProjection_apply_mem {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (U : Submodule ๐•œ E) [U.HasOrthogonalProjection] (x : E) :
          @[simp]
          theorem Submodule.starProjection_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (v w : E) :
          w โˆˆ K โ†’ inner ๐•œ (v - K.starProjection v) w = 0

          The characterization of the orthogonal projection.

          @[deprecated Submodule.starProjection_inner_eq_zero (since := "2025-07-07")]
          theorem Submodule.orthogonalProjection_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (v w : E) :
          w โˆˆ K โ†’ inner ๐•œ (v - K.starProjection v) w = 0

          Alias of Submodule.starProjection_inner_eq_zero.


          The characterization of the orthogonal projection.

          @[simp]
          theorem Submodule.sub_starProjection_mem_orthogonal {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (v : E) :

          The difference of v from its orthogonal projection onto K is in Kแ—ฎ.

          @[deprecated Submodule.sub_starProjection_mem_orthogonal (since := "2025-07-07")]
          theorem Submodule.sub_orthogonalProjection_mem_orthogonal {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (v : E) :

          Alias of Submodule.sub_starProjection_mem_orthogonal.


          The difference of v from its orthogonal projection onto K is in Kแ—ฎ.

          theorem Submodule.eq_starProjection_of_mem_of_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {u v : E} (hvm : v โˆˆ K) (hvo : โˆ€ w โˆˆ K, inner ๐•œ (u - v) w = 0) :

          The orthogonal projection is the unique point in K with the orthogonality property.

          @[deprecated Submodule.eq_starProjection_of_mem_of_inner_eq_zero (since := "2025-07-07")]
          theorem Submodule.eq_orthogonalProjection_of_mem_of_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {u v : E} (hvm : v โˆˆ K) (hvo : โˆ€ w โˆˆ K, inner ๐•œ (u - v) w = 0) :

          Alias of Submodule.eq_starProjection_of_mem_of_inner_eq_zero.


          The orthogonal projection is the unique point in K with the orthogonality property.

          theorem Submodule.eq_starProjection_of_mem_orthogonal {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {u v : E} (hv : v โˆˆ K) (hvo : u - v โˆˆ Kแ—ฎ) :

          A point in K with the orthogonality property (here characterized in terms of Kแ—ฎ) must be the orthogonal projection.

          @[deprecated Submodule.eq_starProjection_of_mem_orthogonal (since := "2025-07-07")]
          theorem Submodule.eq_orthogonalProjection_of_mem_orthogonal {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {u v : E} (hv : v โˆˆ K) (hvo : u - v โˆˆ Kแ—ฎ) :

          Alias of Submodule.eq_starProjection_of_mem_orthogonal.


          A point in K with the orthogonality property (here characterized in terms of Kแ—ฎ) must be the orthogonal projection.

          theorem Submodule.eq_starProjection_of_mem_orthogonal' {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {u v z : E} (hv : v โˆˆ K) (hz : z โˆˆ Kแ—ฎ) (hu : u = v + z) :

          A point in K with the orthogonality property (here characterized in terms of Kแ—ฎ) must be the orthogonal projection.

          @[deprecated Submodule.eq_starProjection_of_mem_orthogonal' (since := "2025-07-07")]
          theorem Submodule.eq_orthogonalProjection_of_mem_orthogonal' {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {u v z : E} (hv : v โˆˆ K) (hz : z โˆˆ Kแ—ฎ) (hu : u = v + z) :

          Alias of Submodule.eq_starProjection_of_mem_orthogonal'.


          A point in K with the orthogonality property (here characterized in terms of Kแ—ฎ) must be the orthogonal projection.

          @[simp]
          theorem Submodule.starProjection_orthogonal_val {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (u : E) :
          @[deprecated Submodule.starProjection_orthogonal_val (since := "2025-07-07")]
          theorem Submodule.orthogonalProjection_orthogonal_val {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (u : E) :

          Alias of Submodule.starProjection_orthogonal_val.

          theorem Submodule.orthogonalProjection_orthogonal {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (u : E) :
          theorem Submodule.starProjection_minimal {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {U : Submodule ๐•œ E} [U.HasOrthogonalProjection] (y : E) :
          โ€–y - U.starProjection yโ€– = โจ… (x : โ†ฅU), โ€–y - โ†‘xโ€–

          The orthogonal projection of y on U minimizes the distance โ€–y - xโ€– for x โˆˆ U.

          @[deprecated Submodule.starProjection_minimal (since := "2025-07-07")]
          theorem Submodule.orthogonalProjection_minimal {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {U : Submodule ๐•œ E} [U.HasOrthogonalProjection] (y : E) :
          โ€–y - U.starProjection yโ€– = โจ… (x : โ†ฅU), โ€–y - โ†‘xโ€–

          Alias of Submodule.starProjection_minimal.


          The orthogonal projection of y on U minimizes the distance โ€–y - xโ€– for x โˆˆ U.

          @[deprecated "As there are no subtypes causing dependent type issues, there is no need for this result as `simp` will suffice" (since := "12-07-2025")]
          theorem Submodule.eq_starProjection_of_eq_submodule {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {K' : Submodule ๐•œ E} [K'.HasOrthogonalProjection] (h : K = K') (u : E) :

          The orthogonal projections onto equal subspaces are coerced back to the same point in E.

          @[deprecated Submodule.eq_starProjection_of_eq_submodule (since := "2025-07-07")]
          theorem Submodule.eq_orthogonalProjection_of_eq_submodule {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {K' : Submodule ๐•œ E} [K'.HasOrthogonalProjection] (h : K = K') (u : E) :

          Alias of Submodule.eq_starProjection_of_eq_submodule.


          The orthogonal projections onto equal subspaces are coerced back to the same point in E.

          @[simp]
          theorem Submodule.orthogonalProjection_mem_subspace_eq_self {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (v : โ†ฅK) :
          K.orthogonalProjection โ†‘v = v

          The orthogonal projection sends elements of K to themselves.

          @[simp]
          theorem Submodule.starProjection_mem_subspace_eq_self {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (v : โ†ฅK) :
          K.starProjection โ†‘v = โ†‘v
          theorem Submodule.starProjection_eq_self_iff {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {v : E} :

          A point equals its orthogonal projection if and only if it lies in the subspace.

          @[deprecated Submodule.starProjection_eq_self_iff (since := "2025-07-07")]
          theorem Submodule.orthogonalProjection_eq_self_iff {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {v : E} :

          Alias of Submodule.starProjection_eq_self_iff.


          A point equals its orthogonal projection if and only if it lies in the subspace.

          @[simp]
          @[simp]
          theorem Submodule.range_starProjection {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (U : Submodule ๐•œ E) [U.HasOrthogonalProjection] :
          theorem Submodule.starProjection_top {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] :
          theorem Submodule.starProjection_top' {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] :
          @[simp]
          theorem Submodule.orthogonalProjection_eq_zero_iff {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] {v : E} :
          @[simp]
          @[simp]
          theorem Submodule.ker_starProjection {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (U : Submodule ๐•œ E) [U.HasOrthogonalProjection] :
          theorem LinearIsometry.map_starProjection {๐•œ : Type u_1} [RCLike ๐•œ] {E : Type u_4} {E' : Type u_5} [NormedAddCommGroup E] [NormedAddCommGroup E'] [InnerProductSpace ๐•œ E] [InnerProductSpace ๐•œ E'] (f : E โ†’โ‚—แตข[๐•œ] E') (p : Submodule ๐•œ E) [p.HasOrthogonalProjection] [(Submodule.map f.toLinearMap p).HasOrthogonalProjection] (x : E) :
          @[deprecated LinearIsometry.map_starProjection (since := "2025-07-07")]
          theorem LinearIsometry.map_orthogonalProjection {๐•œ : Type u_1} [RCLike ๐•œ] {E : Type u_4} {E' : Type u_5} [NormedAddCommGroup E] [NormedAddCommGroup E'] [InnerProductSpace ๐•œ E] [InnerProductSpace ๐•œ E'] (f : E โ†’โ‚—แตข[๐•œ] E') (p : Submodule ๐•œ E) [p.HasOrthogonalProjection] [(Submodule.map f.toLinearMap p).HasOrthogonalProjection] (x : E) :

          Alias of LinearIsometry.map_starProjection.

          theorem LinearIsometry.map_starProjection' {๐•œ : Type u_1} [RCLike ๐•œ] {E : Type u_4} {E' : Type u_5} [NormedAddCommGroup E] [NormedAddCommGroup E'] [InnerProductSpace ๐•œ E] [InnerProductSpace ๐•œ E'] (f : E โ†’โ‚—แตข[๐•œ] E') (p : Submodule ๐•œ E) [p.HasOrthogonalProjection] [(Submodule.map f p).HasOrthogonalProjection] (x : E) :
          @[deprecated LinearIsometry.map_starProjection' (since := "2025-07-07")]
          theorem LinearIsometry.map_orthogonalProjection' {๐•œ : Type u_1} [RCLike ๐•œ] {E : Type u_4} {E' : Type u_5} [NormedAddCommGroup E] [NormedAddCommGroup E'] [InnerProductSpace ๐•œ E] [InnerProductSpace ๐•œ E'] (f : E โ†’โ‚—แตข[๐•œ] E') (p : Submodule ๐•œ E) [p.HasOrthogonalProjection] [(Submodule.map f p).HasOrthogonalProjection] (x : E) :

          Alias of LinearIsometry.map_starProjection'.

          theorem Submodule.starProjection_map_apply {๐•œ : Type u_1} [RCLike ๐•œ] {E : Type u_4} {E' : Type u_5} [NormedAddCommGroup E] [NormedAddCommGroup E'] [InnerProductSpace ๐•œ E] [InnerProductSpace ๐•œ E'] (f : E โ‰ƒโ‚—แตข[๐•œ] E') (p : Submodule ๐•œ E) [p.HasOrthogonalProjection] (x : E') :
          (map (โ†‘f.toLinearEquiv) p).starProjection x = f (p.starProjection (f.symm x))

          Orthogonal projection onto the Submodule.map of a subspace.

          @[deprecated Submodule.starProjection_map_apply (since := "2025-07-07")]
          theorem Submodule.orthogonalProjection_map_apply {๐•œ : Type u_1} [RCLike ๐•œ] {E : Type u_4} {E' : Type u_5} [NormedAddCommGroup E] [NormedAddCommGroup E'] [InnerProductSpace ๐•œ E] [InnerProductSpace ๐•œ E'] (f : E โ‰ƒโ‚—แตข[๐•œ] E') (p : Submodule ๐•œ E) [p.HasOrthogonalProjection] (x : E') :
          (map (โ†‘f.toLinearEquiv) p).starProjection x = f (p.starProjection (f.symm x))

          Alias of Submodule.starProjection_map_apply.


          Orthogonal projection onto the Submodule.map of a subspace.

          @[simp]
          theorem Submodule.orthogonalProjection_bot {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] :

          The orthogonal projection onto the trivial submodule is the zero map.

          @[simp]
          theorem Submodule.starProjection_bot {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] :

          The orthogonal projection has norm โ‰ค 1.

          theorem Submodule.norm_orthogonalProjection_apply {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] {v : E} (hv : v โˆˆ K) :
          theorem Submodule.norm_starProjection_apply {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] {v : E} (hv : v โˆˆ K) :

          The orthogonal projection onto a closed subspace is norm non-increasing.

          theorem Submodule.lipschitzWith_orthogonalProjection {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] :

          The orthogonal projection onto a closed subspace is a 1-Lipschitz map.

          theorem Submodule.lipschitzWith_starProjection {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] :
          theorem Submodule.norm_orthogonalProjection {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] (hK : K โ‰  โŠฅ) :

          The operator norm of the orthogonal projection onto a nontrivial subspace is 1.

          theorem Submodule.norm_starProjection {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] (hK : K โ‰  โŠฅ) :
          theorem Submodule.smul_starProjection_singleton (๐•œ : Type u_1) {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {v : E} (w : E) :
          โ†‘(โ€–vโ€– ^ 2) โ€ข (span ๐•œ {v}).starProjection w = inner ๐•œ v w โ€ข v
          @[deprecated Submodule.smul_starProjection_singleton (since := "2025-07-07")]
          theorem Submodule.smul_orthogonalProjection_singleton (๐•œ : Type u_1) {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {v : E} (w : E) :
          โ†‘(โ€–vโ€– ^ 2) โ€ข (span ๐•œ {v}).starProjection w = inner ๐•œ v w โ€ข v

          Alias of Submodule.smul_starProjection_singleton.

          theorem Submodule.starProjection_singleton (๐•œ : Type u_1) {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {v : E} (w : E) :
          (span ๐•œ {v}).starProjection w = (inner ๐•œ v w / โ†‘(โ€–vโ€– ^ 2)) โ€ข v

          Formula for orthogonal projection onto a single vector.

          @[deprecated Submodule.starProjection_singleton (since := "2025-07-07")]
          theorem Submodule.orthogonalProjection_singleton (๐•œ : Type u_1) {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {v : E} (w : E) :
          (span ๐•œ {v}).starProjection w = (inner ๐•œ v w / โ†‘(โ€–vโ€– ^ 2)) โ€ข v

          Alias of Submodule.starProjection_singleton.


          Formula for orthogonal projection onto a single vector.

          theorem Submodule.starProjection_unit_singleton (๐•œ : Type u_1) {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {v : E} (hv : โ€–vโ€– = 1) (w : E) :
          (span ๐•œ {v}).starProjection w = inner ๐•œ v w โ€ข v

          Formula for orthogonal projection onto a single unit vector.

          @[deprecated Submodule.starProjection_unit_singleton (since := "2025-07-07")]
          theorem Submodule.orthogonalProjection_unit_singleton (๐•œ : Type u_1) {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {v : E} (hv : โ€–vโ€– = 1) (w : E) :
          (span ๐•œ {v}).starProjection w = inner ๐•œ v w โ€ข v

          Alias of Submodule.starProjection_unit_singleton.


          Formula for orthogonal projection onto a single unit vector.

          theorem Submodule.exists_add_mem_mem_orthogonal {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (v : E) :
          โˆƒ y โˆˆ K, โˆƒ z โˆˆ Kแ—ฎ, v = y + z

          If K is complete, any v in E can be expressed as a sum of elements of K and Kแ—ฎ.

          The orthogonal projection onto K of an element of Kแ—ฎ is zero.

          theorem Submodule.IsOrtho.orthogonalProjection_comp_subtypeL {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {U V : Submodule ๐•œ E} [U.HasOrthogonalProjection] (h : U โŸ‚ V) :

          The projection into U from an orthogonal submodule V is the zero map.

          The projection into U from V is the zero map if and only if U and V are orthogonal.

          U.starProjection โˆ˜ V.starProjection = 0 iff U and V are pairwise orthogonal.

          theorem Submodule.orthogonalProjection_orthogonal_apply_eq_zero {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [Kแ—ฎ.HasOrthogonalProjection] {v : E} (hv : v โˆˆ K) :

          The orthogonal projection onto Kแ—ฎ of an element of K is zero.

          @[deprecated Submodule.orthogonalProjection_orthogonal_apply_eq_zero (since := "22-07-2025")]

          Alias of Submodule.orthogonalProjection_orthogonal_apply_eq_zero.


          The orthogonal projection onto Kแ—ฎ of an element of K is zero.

          theorem Submodule.starProjection_orthogonal_apply_eq_zero {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [Kแ—ฎ.HasOrthogonalProjection] {v : E} (hv : v โˆˆ K) :

          If U โ‰ค V, then projecting on V and then on U is the same as projecting on U.

          @[deprecated Submodule.orthogonalProjection_starProjection_of_le (since := "2025-07-07")]

          Alias of Submodule.orthogonalProjection_starProjection_of_le.


          If U โ‰ค V, then projecting on V and then on U is the same as projecting on U.

          The orthogonal projection onto (๐•œ โˆ™ v)แ—ฎ of v is zero.

          theorem Submodule.starProjection_orthogonalComplement_singleton_eq_zero {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (v : E) :
          (span ๐•œ {v})แ—ฎ.starProjection v = 0
          theorem Submodule.starProjection_add_starProjection_orthogonal {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (w : E) :

          If the orthogonal projection to K is well-defined, then a vector splits as the sum of its orthogonal projections onto a complete submodule K and onto the orthogonal complement of K.

          @[deprecated Submodule.starProjection_add_starProjection_orthogonal (since := "2025-07-07")]

          Alias of Submodule.starProjection_add_starProjection_orthogonal.


          If the orthogonal projection to K is well-defined, then a vector splits as the sum of its orthogonal projections onto a complete submodule K and onto the orthogonal complement of K.

          The Pythagorean theorem, for an orthogonal projection.

          In a complete space E, the projection maps onto a complete subspace K and its orthogonal complement sum to the identity.

          @[deprecated Submodule.id_eq_sum_starProjection_self_orthogonalComplement (since := "2025-07-07")]

          Alias of Submodule.id_eq_sum_starProjection_self_orthogonalComplement.


          In a complete space E, the projection maps onto a complete subspace K and its orthogonal complement sum to the identity.

          @[simp]
          theorem Submodule.inner_orthogonalProjection_eq_of_mem_right {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (u : โ†ฅK) (v : E) :
          inner ๐•œ (K.orthogonalProjection v) u = inner ๐•œ v โ†‘u
          @[simp]
          theorem Submodule.inner_orthogonalProjection_eq_of_mem_left {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] {K : Submodule ๐•œ E} [K.HasOrthogonalProjection] (u : โ†ฅK) (v : E) :
          inner ๐•œ u (K.orthogonalProjection v) = inner ๐•œ (โ†‘u) v
          theorem Submodule.inner_starProjection_left_eq_right {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] (u v : E) :
          inner ๐•œ (K.starProjection u) v = inner ๐•œ u (K.starProjection v)

          The orthogonal projection is self-adjoint.

          @[deprecated Submodule.inner_starProjection_left_eq_right (since := "2025-07-07")]
          theorem Submodule.inner_orthogonalProjection_left_eq_right {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] (u v : E) :
          inner ๐•œ (K.starProjection u) v = inner ๐•œ u (K.starProjection v)

          Alias of Submodule.inner_starProjection_left_eq_right.


          The orthogonal projection is self-adjoint.

          theorem Submodule.starProjection_isSymmetric {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] :

          The orthogonal projection is symmetric.

          @[deprecated Submodule.starProjection_isSymmetric (since := "2025-07-07")]
          theorem Submodule.orthogonalProjection_isSymmetric {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] :

          Alias of Submodule.starProjection_isSymmetric.


          The orthogonal projection is symmetric.

          theorem Submodule.starProjection_apply_eq_zero_iff {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] {v : E} :
          theorem Submodule.re_inner_starProjection_eq_normSq {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] (v : E) :
          @[deprecated Submodule.re_inner_starProjection_eq_normSq (since := "2025-07-07")]
          theorem Submodule.re_inner_orthogonalProjection_eq_normSq {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] (v : E) :

          Alias of Submodule.re_inner_starProjection_eq_normSq.

          theorem Submodule.re_inner_starProjection_nonneg {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] (v : E) :
          0 โ‰ค RCLike.re (inner ๐•œ (K.starProjection v) v)
          @[deprecated Submodule.re_inner_starProjection_nonneg (since := "2025-07-07")]
          theorem Submodule.re_inner_orthogonalProjection_nonneg {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] (K : Submodule ๐•œ E) [K.HasOrthogonalProjection] (v : E) :
          0 โ‰ค RCLike.re (inner ๐•œ (K.starProjection v) v)

          Alias of Submodule.re_inner_starProjection_nonneg.