Documentation

Mathlib.Analysis.InnerProductSpace.Basic

Inner product space #

This file defines inner product spaces and proves the basic properties. We do not formally define Hilbert spaces, but they can be obtained using the set of assumptions [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] [CompleteSpace E].

An inner product space is a vector space endowed with an inner product. It generalizes the notion of dot product in ℝ^n and provides the means of defining the length of a vector and the angle between two vectors. In particular vectors x and y are orthogonal if their inner product equals zero. We define both the real and complex cases at the same time using the RCLike typeclass.

This file proves general results on inner product spaces. For the specific construction of an inner product structure on n → 𝕜 for 𝕜 = ℝ or , see EuclideanSpace in Analysis.InnerProductSpace.PiL2.

Main results #

Notation #

We globally denote the real and complex inner products by ⟪·, ·⟫_ℝ and ⟪·, ·⟫_ℂ respectively. We also provide two notation namespaces: RealInnerProductSpace, ComplexInnerProductSpace, which respectively introduce the plain notation ⟪·, ·⟫ for the real and complex inner product.

Implementation notes #

We choose the convention that inner products are conjugate linear in the first argument and linear in the second.

Tags #

inner product space, Hilbert space, norm

References #

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

class Inner (𝕜 : Type u_4) (E : Type u_5) :
Type (max u_4 u_5)

Syntactic typeclass for types endowed with an inner product

  • inner : EE𝕜

    The inner product function.

Instances

    The inner product with values in 𝕜.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      Pretty printer defined by notation3 command.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        The inner product with values in .

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          The inner product with values in .

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            class InnerProductSpace (𝕜 : Type u_4) (E : Type u_5) [RCLike 𝕜] [SeminormedAddCommGroup E] extends NormedSpace 𝕜 E, Inner 𝕜 E :
            Type (max u_4 u_5)

            A (pre) inner product space is a vector space with an additional operation called inner product. The (semi)norm could be derived from the inner product, instead we require the existence of a seminorm and the fact that ‖x‖^2 = re ⟪x, x⟫ to be able to put instances on 𝕂 or product spaces.

            Note that NormedSpace does not assume that ‖x‖=0 implies x=0 (it is rather a seminorm).

            To construct a seminorm from an inner product, see PreInnerProductSpace.ofCore.

            Instances

              Constructing a normed space structure from an inner product #

              In the definition of an inner product space, we require the existence of a norm, which is equal (but maybe not defeq) to the square root of the scalar product. This makes it possible to put an inner product space structure on spaces with a preexisting norm (for instance ), with good properties. However, sometimes, one would like to define the norm starting only from a well-behaved scalar product. This is what we implement in this paragraph, starting from a structure InnerProductSpace.Core stating that we have a nice scalar product.

              Our goal here is not to develop a whole theory with all the supporting API, as this will be done below for InnerProductSpace. Instead, we implement the bare minimum to go as directly as possible to the construction of the norm and the proof of the triangular inequality.

              Warning: Do not use this Core structure if the space you are interested in already has a norm instance defined on it, otherwise this will create a second non-defeq norm instance!

              class PreInnerProductSpace.Core (𝕜 : Type u_4) (F : Type u_5) [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] extends Inner 𝕜 F :
              Type (max u_4 u_5)

              A structure requiring that a scalar product is positive semidefinite and symmetric.

              • inner : FF𝕜
              • conj_symm : ∀ (x y : F), (starRingEnd 𝕜) (inner y x) = inner x y

                The inner product is hermitian, taking the conj swaps the arguments.

              • nonneg_re : ∀ (x : F), 0 RCLike.re (inner x x)

                The inner product is positive (semi)definite.

              • add_left : ∀ (x y z : F), inner (x + y) z = inner x z + inner y z

                The inner product is additive in the first coordinate.

              • smul_left : ∀ (x y : F) (r : 𝕜), inner (r x) y = (starRingEnd 𝕜) r * inner x y

                The inner product is conjugate linear in the first coordinate.

              Instances
                class InnerProductSpace.Core (𝕜 : Type u_4) (F : Type u_5) [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] extends PreInnerProductSpace.Core 𝕜 F :
                Type (max u_4 u_5)

                A structure requiring that a scalar product is positive definite. Some theorems that require this assumptions are put under section InnerProductSpace.Core.

                Instances
                  instance instCoreOfCore (𝕜 : Type u_4) (F : Type u_5) [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [cd : InnerProductSpace.Core 𝕜 F] :
                  Equations
                  • instCoreOfCore 𝕜 F = { inner := inner, conj_symm := , nonneg_re := , add_left := , smul_left := }

                  Define PreInnerProductSpace.Core from PreInnerProductSpace. Defined to reuse lemmas about PreInnerProductSpace.Core for PreInnerProductSpaces. Note that the Seminorm instance provided by PreInnerProductSpace.Core.norm is propositionally but not definitionally equal to the original norm.

                  Equations
                  • PreInnerProductSpace.toCore = { toInner := InnerProductSpace.toInner, conj_symm := , nonneg_re := , add_left := , smul_left := }
                  Instances For
                    def InnerProductSpace.toCore {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [c : InnerProductSpace 𝕜 E] :

                    Define InnerProductSpace.Core from InnerProductSpace. Defined to reuse lemmas about InnerProductSpace.Core for InnerProductSpaces. Note that the Norm instance provided by InnerProductSpace.Core.norm is propositionally but not definitionally equal to the original norm.

                    Equations
                    • InnerProductSpace.toCore = { toInner := InnerProductSpace.toInner, conj_symm := , nonneg_re := , add_left := , smul_left := , definite := }
                    Instances For
                      def InnerProductSpace.Core.toPreInner' {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] :
                      Inner 𝕜 F

                      Inner product defined by the PreInnerProductSpace.Core structure. We can't reuse PreInnerProductSpace.Core.toInner because it takes PreInnerProductSpace.Core as an explicit argument.

                      Equations
                      • InnerProductSpace.Core.toPreInner' = c.toInner
                      Instances For
                        def InnerProductSpace.Core.normSq {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x : F) :

                        The norm squared function for PreInnerProductSpace.Core structure.

                        Equations
                        Instances For
                          theorem InnerProductSpace.Core.inner_conj_symm {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) :
                          (starRingEnd 𝕜) (inner y x) = inner x y
                          theorem InnerProductSpace.Core.inner_self_nonneg {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] {x : F} :
                          0 RCLike.re (inner x x)
                          theorem InnerProductSpace.Core.inner_self_im {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x : F) :
                          RCLike.im (inner x x) = 0
                          theorem InnerProductSpace.Core.inner_add_left {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y z : F) :
                          inner (x + y) z = inner x z + inner y z
                          theorem InnerProductSpace.Core.inner_add_right {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y z : F) :
                          inner x (y + z) = inner x y + inner x z
                          theorem InnerProductSpace.Core.inner_re_symm {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) :
                          RCLike.re (inner x y) = RCLike.re (inner y x)
                          theorem InnerProductSpace.Core.inner_im_symm {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) :
                          RCLike.im (inner x y) = -RCLike.im (inner y x)
                          theorem InnerProductSpace.Core.inner_smul_left {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) {r : 𝕜} :
                          inner (r x) y = (starRingEnd 𝕜) r * inner x y
                          theorem InnerProductSpace.Core.inner_smul_right {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) {r : 𝕜} :
                          inner x (r y) = r * inner x y
                          theorem InnerProductSpace.Core.inner_zero_left {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x : F) :
                          inner 0 x = 0
                          theorem InnerProductSpace.Core.inner_zero_right {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x : F) :
                          inner x 0 = 0
                          theorem InnerProductSpace.Core.inner_self_of_eq_zero {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] {x : F} :
                          x = 0inner x x = 0
                          theorem InnerProductSpace.Core.ne_zero_of_inner_self_ne_zero {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] {x : F} :
                          inner x x 0x 0
                          theorem InnerProductSpace.Core.inner_self_ofReal_re {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x : F) :
                          (RCLike.re (inner x x)) = inner x x
                          theorem InnerProductSpace.Core.norm_inner_symm {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) :
                          theorem InnerProductSpace.Core.inner_neg_left {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) :
                          inner (-x) y = -inner x y
                          theorem InnerProductSpace.Core.inner_neg_right {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) :
                          inner x (-y) = -inner x y
                          theorem InnerProductSpace.Core.inner_sub_left {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y z : F) :
                          inner (x - y) z = inner x z - inner y z
                          theorem InnerProductSpace.Core.inner_sub_right {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y z : F) :
                          inner x (y - z) = inner x y - inner x z
                          theorem InnerProductSpace.Core.inner_mul_symm_re_eq_norm {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) :
                          RCLike.re (inner x y * inner y x) = inner x y * inner y x
                          theorem InnerProductSpace.Core.inner_add_add_self {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) :
                          inner (x + y) (x + y) = inner x x + inner x y + inner y x + inner y y

                          Expand inner (x + y) (x + y)

                          theorem InnerProductSpace.Core.inner_sub_sub_self {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) :
                          inner (x - y) (x - y) = inner x x - inner x y - inner y x + inner y y
                          theorem InnerProductSpace.Core.inner_smul_ofReal_left {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) {t : } :
                          inner (t x) y = inner x y * t
                          theorem InnerProductSpace.Core.inner_smul_ofReal_right {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) {t : } :
                          inner x (t y) = inner x y * t
                          theorem InnerProductSpace.Core.re_inner_smul_ofReal_smul_self {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x : F) {t : } :
                          RCLike.re (inner (t x) (t x)) = InnerProductSpace.Core.normSq x * t * t
                          theorem InnerProductSpace.Core.cauchy_schwarz_aux' {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) (t : ) :

                          An auxiliary equality useful to prove the Cauchy–Schwarz inequality. Here we use the standard argument involving the discriminant of quadratic form.

                          Another auxiliary equality related with the Cauchy–Schwarz inequality: the square of the seminorm of ⟪x, y⟫ • x - ⟪x, x⟫ • y is equal to ‖x‖ ^ 2 * (‖x‖ ^ 2 * ‖y‖ ^ 2 - ‖⟪x, y⟫‖ ^ 2). We use InnerProductSpace.ofCore.normSq x etc (defeq to is_R_or_C.re ⟪x, x⟫) instead of ‖x‖ ^ 2 etc to avoid extra rewrites when applying it to an InnerProductSpace.

                          theorem InnerProductSpace.Core.inner_mul_inner_self_le {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) :
                          inner x y * inner y x RCLike.re (inner x x) * RCLike.re (inner y y)

                          Cauchy–Schwarz inequality. We need this for the PreInnerProductSpace.Core structure to prove the triangle inequality below when showing the core is a normed group and to take the quotient.

                          def InnerProductSpace.Core.toNorm {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] :

                          (Semi)norm constructed from an PreInnerProductSpace.Core structure, defined to be the square root of the scalar product.

                          Equations
                          • InnerProductSpace.Core.toNorm = { norm := fun (x : F) => (RCLike.re (inner x x)) }
                          Instances For
                            theorem InnerProductSpace.Core.norm_eq_sqrt_inner {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x : F) :
                            x = (RCLike.re (inner x x))
                            theorem InnerProductSpace.Core.inner_self_eq_norm_mul_norm {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x : F) :
                            RCLike.re (inner x x) = x * x
                            theorem InnerProductSpace.Core.norm_inner_le_norm {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] (x y : F) :

                            Cauchy–Schwarz inequality with norm

                            Seminormed group structure constructed from an PreInnerProductSpace.Core structure

                            Equations
                            • InnerProductSpace.Core.toSeminormedAddCommGroup = { toFun := fun (x : F) => (RCLike.re (inner x x)), map_zero' := , add_le' := , neg' := }.toSeminormedAddCommGroup
                            Instances For
                              def InnerProductSpace.Core.toSeminormedSpace {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [c : PreInnerProductSpace.Core 𝕜 F] :

                              Normed space (which is actually a seminorm) structure constructed from an PreInnerProductSpace.Core structure

                              Equations
                              Instances For
                                def InnerProductSpace.Core.toInner' {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [cd : InnerProductSpace.Core 𝕜 F] :
                                Inner 𝕜 F

                                Inner product defined by the InnerProductSpace.Core structure. We can't reuse InnerProductSpace.Core.toInner because it takes InnerProductSpace.Core as an explicit argument.

                                Equations
                                • InnerProductSpace.Core.toInner' = cd.toInner
                                Instances For
                                  theorem InnerProductSpace.Core.inner_self_eq_zero {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [cd : InnerProductSpace.Core 𝕜 F] {x : F} :
                                  inner x x = 0 x = 0
                                  theorem InnerProductSpace.Core.normSq_eq_zero {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [cd : InnerProductSpace.Core 𝕜 F] {x : F} :
                                  theorem InnerProductSpace.Core.inner_self_ne_zero {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [cd : InnerProductSpace.Core 𝕜 F] {x : F} :
                                  inner x x 0 x 0

                                  Normed group structure constructed from an InnerProductSpace.Core structure

                                  Equations
                                  • InnerProductSpace.Core.toNormedAddCommGroup = { toFun := fun (x : F) => (RCLike.re (inner x x)), map_zero' := , add_le' := , neg' := , eq_zero_of_map_eq_zero' := }.toNormedAddCommGroup
                                  Instances For
                                    def InnerProductSpace.Core.toNormedSpace {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] [cd : InnerProductSpace.Core 𝕜 F] :

                                    Normed space structure constructed from an InnerProductSpace.Core structure

                                    Equations
                                    Instances For
                                      def InnerProductSpace.ofCore {𝕜 : Type u_1} {F : Type u_3} [RCLike 𝕜] [AddCommGroup F] [Module 𝕜 F] (cd : InnerProductSpace.Core 𝕜 F) :

                                      Given an InnerProductSpace.Core structure on a space, one can use it to turn the space into an inner product space. The NormedAddCommGroup structure is expected to already be defined with InnerProductSpace.ofCore.toNormedAddCommGroup.

                                      Equations
                                      Instances For

                                        Properties of inner product spaces #

                                        @[simp]
                                        theorem inner_conj_symm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                        (starRingEnd 𝕜) (inner y x) = inner x y
                                        theorem real_inner_comm {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (x y : F) :
                                        inner y x = inner x y
                                        theorem inner_eq_zero_symm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x y : E} :
                                        inner x y = 0 inner y x = 0
                                        @[simp]
                                        theorem inner_self_im {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                        RCLike.im (inner x x) = 0
                                        theorem inner_add_left {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y z : E) :
                                        inner (x + y) z = inner x z + inner y z
                                        theorem inner_add_right {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y z : E) :
                                        inner x (y + z) = inner x y + inner x z
                                        theorem inner_re_symm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                        RCLike.re (inner x y) = RCLike.re (inner y x)
                                        theorem inner_im_symm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                        RCLike.im (inner x y) = -RCLike.im (inner y x)
                                        theorem inner_smul_left_eq_star_smul {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {𝕝 : Type u_4} [CommSemiring 𝕝] [StarRing 𝕝] [Algebra 𝕝 𝕜] [Module 𝕝 E] [IsScalarTower 𝕝 𝕜 E] [StarModule 𝕝 𝕜] (x y : E) (r : 𝕝) :
                                        inner (r x) y = (starRingEnd 𝕝) r inner x y

                                        See inner_smul_left for the common special when 𝕜 = 𝕝.

                                        theorem inner_smul_left_eq_smul {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {𝕝 : Type u_4} [CommSemiring 𝕝] [StarRing 𝕝] [Algebra 𝕝 𝕜] [Module 𝕝 E] [IsScalarTower 𝕝 𝕜 E] [StarModule 𝕝 𝕜] [TrivialStar 𝕝] (x y : E) (r : 𝕝) :
                                        inner (r x) y = r inner x y

                                        Special case of inner_smul_left_eq_star_smul when the acting ring has a trivial star (eg , , ℚ≥0, , ).

                                        theorem inner_smul_right_eq_smul {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {𝕝 : Type u_4} [CommSemiring 𝕝] [StarRing 𝕝] [Algebra 𝕝 𝕜] [Module 𝕝 E] [IsScalarTower 𝕝 𝕜 E] [StarModule 𝕝 𝕜] (x y : E) (r : 𝕝) :
                                        inner x (r y) = r inner x y

                                        See inner_smul_right for the common special when 𝕜 = 𝕝.

                                        theorem inner_smul_left {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) (r : 𝕜) :
                                        inner (r x) y = (starRingEnd 𝕜) r * inner x y

                                        See inner_smul_left_eq_star_smul for the case of a general algebra action.

                                        theorem real_inner_smul_left {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (x y : F) (r : ) :
                                        inner (r x) y = r * inner x y
                                        theorem inner_smul_real_left {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) (r : ) :
                                        inner (r x) y = r inner x y
                                        theorem inner_smul_right {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) (r : 𝕜) :
                                        inner x (r y) = r * inner x y

                                        See inner_smul_right_eq_smul for the case of a general algebra action.

                                        theorem real_inner_smul_right {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (x y : F) (r : ) :
                                        inner x (r y) = r * inner x y
                                        theorem inner_smul_real_right {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) (r : ) :
                                        inner x (r y) = r inner x y
                                        def sesqFormOfInner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] :
                                        E →ₗ[𝕜] E →ₗ⋆[𝕜] 𝕜

                                        The inner product as a sesquilinear form.

                                        Note that in the case 𝕜 = ℝ this is a bilinear form.

                                        Equations
                                        Instances For
                                          @[simp]
                                          theorem sesqFormOfInner_apply_apply {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (m y : E) :
                                          (sesqFormOfInner m) y = inner y m

                                          The real inner product as a bilinear form.

                                          Note that unlike sesqFormOfInner, this does not reverse the order of the arguments.

                                          Equations
                                          • bilinFormOfRealInner = sesqFormOfInner.flip
                                          Instances For
                                            @[simp]
                                            theorem bilinFormOfRealInner_apply_apply {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (m m✝ : F) :
                                            (bilinFormOfRealInner m) m✝ = inner m m✝
                                            theorem sum_inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} (s : Finset ι) (f : ιE) (x : E) :
                                            inner (∑ is, f i) x = is, inner (f i) x

                                            An inner product with a sum on the left.

                                            theorem inner_sum {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} (s : Finset ι) (f : ιE) (x : E) :
                                            inner x (∑ is, f i) = is, inner x (f i)

                                            An inner product with a sum on the right.

                                            theorem Finsupp.sum_inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} (l : ι →₀ 𝕜) (v : ιE) (x : E) :
                                            inner (l.sum fun (i : ι) (a : 𝕜) => a v i) x = l.sum fun (i : ι) (a : 𝕜) => (starRingEnd 𝕜) a inner (v i) x

                                            An inner product with a sum on the left, Finsupp version.

                                            theorem Finsupp.inner_sum {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} (l : ι →₀ 𝕜) (v : ιE) (x : E) :
                                            inner x (l.sum fun (i : ι) (a : 𝕜) => a v i) = l.sum fun (i : ι) (a : 𝕜) => a inner x (v i)

                                            An inner product with a sum on the right, Finsupp version.

                                            theorem DFinsupp.sum_inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} [DecidableEq ι] {α : ιType u_5} [(i : ι) → AddZeroClass (α i)] [(i : ι) → (x : α i) → Decidable (x 0)] (f : (i : ι) → α iE) (l : Π₀ (i : ι), α i) (x : E) :
                                            inner (l.sum f) x = l.sum fun (i : ι) (a : α i) => inner (f i a) x
                                            theorem DFinsupp.inner_sum {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} [DecidableEq ι] {α : ιType u_5} [(i : ι) → AddZeroClass (α i)] [(i : ι) → (x : α i) → Decidable (x 0)] (f : (i : ι) → α iE) (l : Π₀ (i : ι), α i) (x : E) :
                                            inner x (l.sum f) = l.sum fun (i : ι) (a : α i) => inner x (f i a)
                                            @[simp]
                                            theorem inner_zero_left {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                            inner 0 x = 0
                                            theorem inner_re_zero_left {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                            RCLike.re (inner 0 x) = 0
                                            @[simp]
                                            theorem inner_zero_right {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                            inner x 0 = 0
                                            theorem inner_re_zero_right {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                            RCLike.re (inner x 0) = 0
                                            theorem inner_self_nonneg {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x : E} :
                                            0 RCLike.re (inner x x)
                                            @[simp]
                                            theorem inner_self_ofReal_re {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                            (RCLike.re (inner x x)) = inner x x
                                            theorem inner_self_eq_norm_sq_to_K {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                            inner x x = x ^ 2
                                            theorem inner_self_re_eq_norm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                            RCLike.re (inner x x) = inner x x
                                            theorem inner_self_ofReal_norm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                            inner x x = inner x x
                                            theorem norm_inner_symm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                            @[simp]
                                            theorem inner_neg_left {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                            inner (-x) y = -inner x y
                                            @[simp]
                                            theorem inner_neg_right {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                            inner x (-y) = -inner x y
                                            theorem inner_neg_neg {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                            inner (-x) (-y) = inner x y
                                            theorem inner_self_conj {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                            (starRingEnd 𝕜) (inner x x) = inner x x
                                            theorem inner_sub_left {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y z : E) :
                                            inner (x - y) z = inner x z - inner y z
                                            theorem inner_sub_right {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y z : E) :
                                            inner x (y - z) = inner x y - inner x z
                                            theorem inner_mul_symm_re_eq_norm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                            RCLike.re (inner x y * inner y x) = inner x y * inner y x
                                            theorem inner_add_add_self {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                            inner (x + y) (x + y) = inner x x + inner x y + inner y x + inner y y

                                            Expand ⟪x + y, x + y⟫

                                            theorem real_inner_add_add_self {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (x y : F) :
                                            inner (x + y) (x + y) = inner x x + 2 * inner x y + inner y y

                                            Expand ⟪x + y, x + y⟫_ℝ

                                            theorem inner_sub_sub_self {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                            inner (x - y) (x - y) = inner x x - inner x y - inner y x + inner y y
                                            theorem real_inner_sub_sub_self {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (x y : F) :
                                            inner (x - y) (x - y) = inner x x - 2 * inner x y + inner y y

                                            Expand ⟪x - y, x - y⟫_ℝ

                                            theorem parallelogram_law {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x y : E} :
                                            inner (x + y) (x + y) + inner (x - y) (x - y) = 2 * (inner x x + inner y y)

                                            Parallelogram law

                                            theorem inner_mul_inner_self_le {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                            inner x y * inner y x RCLike.re (inner x x) * RCLike.re (inner y y)

                                            Cauchy–Schwarz inequality.

                                            Cauchy–Schwarz inequality for real inner products.

                                            @[simp]
                                            theorem inner_self_eq_zero {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x : E} :
                                            inner x x = 0 x = 0
                                            theorem inner_self_ne_zero {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x : E} :
                                            inner x x 0 x 0
                                            theorem ext_inner_left (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x y : E} (h : ∀ (v : E), inner v x = inner v y) :
                                            x = y
                                            theorem ext_inner_right (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x y : E} (h : ∀ (v : E), inner x v = inner y v) :
                                            x = y
                                            @[simp]
                                            theorem inner_self_nonpos {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x : E} :
                                            RCLike.re (inner x x) 0 x = 0
                                            theorem linearIndependent_of_ne_zero_of_inner_eq_zero {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hz : ∀ (i : ι), v i 0) (ho : Pairwise fun (i j : ι) => inner (v i) (v j) = 0) :

                                            A family of vectors is linearly independent if they are nonzero and orthogonal.

                                            def Orthonormal (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} (v : ιE) :

                                            An orthonormal set of vectors in an InnerProductSpace

                                            Equations
                                            Instances For
                                              theorem orthonormal_iff_ite {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} [DecidableEq ι] {v : ιE} :
                                              Orthonormal 𝕜 v ∀ (i j : ι), inner (v i) (v j) = if i = j then 1 else 0

                                              if ... then ... else characterization of an indexed set of vectors being orthonormal. (Inner product equals Kronecker delta.)

                                              theorem orthonormal_subtype_iff_ite {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] [DecidableEq E] {s : Set E} :
                                              Orthonormal 𝕜 Subtype.val vs, ws, inner v w = if v = w then 1 else 0

                                              if ... then ... else characterization of a set of vectors being orthonormal. (Inner product equals Kronecker delta.)

                                              theorem Orthonormal.inner_right_finsupp {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) (l : ι →₀ 𝕜) (i : ι) :
                                              inner (v i) ((Finsupp.linearCombination 𝕜 v) l) = l i

                                              The inner product of a linear combination of a set of orthonormal vectors with one of those vectors picks out the coefficient of that vector.

                                              theorem Orthonormal.inner_right_sum {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) (l : ι𝕜) {s : Finset ι} {i : ι} (hi : i s) :
                                              inner (v i) (∑ is, l i v i) = l i

                                              The inner product of a linear combination of a set of orthonormal vectors with one of those vectors picks out the coefficient of that vector.

                                              theorem Orthonormal.inner_right_fintype {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} [Fintype ι] {v : ιE} (hv : Orthonormal 𝕜 v) (l : ι𝕜) (i : ι) :
                                              inner (v i) (∑ i : ι, l i v i) = l i

                                              The inner product of a linear combination of a set of orthonormal vectors with one of those vectors picks out the coefficient of that vector.

                                              theorem Orthonormal.inner_left_finsupp {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) (l : ι →₀ 𝕜) (i : ι) :
                                              inner ((Finsupp.linearCombination 𝕜 v) l) (v i) = (starRingEnd 𝕜) (l i)

                                              The inner product of a linear combination of a set of orthonormal vectors with one of those vectors picks out the coefficient of that vector.

                                              theorem Orthonormal.inner_left_sum {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) (l : ι𝕜) {s : Finset ι} {i : ι} (hi : i s) :
                                              inner (∑ is, l i v i) (v i) = (starRingEnd 𝕜) (l i)

                                              The inner product of a linear combination of a set of orthonormal vectors with one of those vectors picks out the coefficient of that vector.

                                              theorem Orthonormal.inner_left_fintype {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} [Fintype ι] {v : ιE} (hv : Orthonormal 𝕜 v) (l : ι𝕜) (i : ι) :
                                              inner (∑ i : ι, l i v i) (v i) = (starRingEnd 𝕜) (l i)

                                              The inner product of a linear combination of a set of orthonormal vectors with one of those vectors picks out the coefficient of that vector.

                                              theorem Orthonormal.inner_finsupp_eq_sum_left {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) (l₁ l₂ : ι →₀ 𝕜) :
                                              inner ((Finsupp.linearCombination 𝕜 v) l₁) ((Finsupp.linearCombination 𝕜 v) l₂) = l₁.sum fun (i : ι) (y : 𝕜) => (starRingEnd 𝕜) y * l₂ i

                                              The inner product of two linear combinations of a set of orthonormal vectors, expressed as a sum over the first Finsupp.

                                              theorem Orthonormal.inner_finsupp_eq_sum_right {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) (l₁ l₂ : ι →₀ 𝕜) :
                                              inner ((Finsupp.linearCombination 𝕜 v) l₁) ((Finsupp.linearCombination 𝕜 v) l₂) = l₂.sum fun (i : ι) (y : 𝕜) => (starRingEnd 𝕜) (l₁ i) * y

                                              The inner product of two linear combinations of a set of orthonormal vectors, expressed as a sum over the second Finsupp.

                                              theorem Orthonormal.inner_sum {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) (l₁ l₂ : ι𝕜) (s : Finset ι) :
                                              inner (∑ is, l₁ i v i) (∑ is, l₂ i v i) = is, (starRingEnd 𝕜) (l₁ i) * l₂ i

                                              The inner product of two linear combinations of a set of orthonormal vectors, expressed as a sum.

                                              theorem Orthonormal.inner_left_right_finset {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {s : Finset ι} {v : ιE} (hv : Orthonormal 𝕜 v) {a : ιι𝕜} :
                                              is, js, a i j inner (v j) (v i) = ks, a k k

                                              The double sum of weighted inner products of pairs of vectors from an orthonormal sequence is the sum of the weights.

                                              theorem Orthonormal.linearIndependent {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) :

                                              An orthonormal set is linearly independent.

                                              theorem Orthonormal.comp {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {ι' : Type u_5} {v : ιE} (hv : Orthonormal 𝕜 v) (f : ι'ι) (hf : Function.Injective f) :
                                              Orthonormal 𝕜 (v f)

                                              A subfamily of an orthonormal family (i.e., a composition with an injective map) is an orthonormal family.

                                              theorem orthonormal_subtype_range {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Function.Injective v) :
                                              Orthonormal 𝕜 Subtype.val Orthonormal 𝕜 v

                                              An injective family v : ι → E is orthonormal if and only if Subtype.val : (range v) → E is orthonormal.

                                              theorem Orthonormal.toSubtypeRange {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) :
                                              Orthonormal 𝕜 Subtype.val

                                              If v : ι → E is an orthonormal family, then Subtype.val : (range v) → E is an orthonormal family.

                                              theorem Orthonormal.inner_finsupp_eq_zero {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) {s : Set ι} {i : ι} (hi : is) {l : ι →₀ 𝕜} (hl : l Finsupp.supported 𝕜 𝕜 s) :
                                              inner ((Finsupp.linearCombination 𝕜 v) l) (v i) = 0

                                              A linear combination of some subset of an orthonormal set is orthogonal to other members of the set.

                                              theorem Orthonormal.orthonormal_of_forall_eq_or_eq_neg {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v w : ιE} (hv : Orthonormal 𝕜 v) (hw : ∀ (i : ι), w i = v i w i = -v i) :

                                              Given an orthonormal family, a second family of vectors is orthonormal if every vector equals the corresponding vector in the original family or its negation.

                                              theorem orthonormal_empty (𝕜 : Type u_1) (E : Type u_2) [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] :
                                              Orthonormal 𝕜 fun (x : ) => x
                                              theorem orthonormal_iUnion_of_directed {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {η : Type u_5} {s : ηSet E} (hs : Directed (fun (x1 x2 : Set E) => x1 x2) s) (h : ∀ (i : η), Orthonormal 𝕜 fun (x : (s i)) => x) :
                                              Orthonormal 𝕜 fun (x : (⋃ (i : η), s i)) => x
                                              theorem orthonormal_sUnion_of_directed {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {s : Set (Set E)} (hs : DirectedOn (fun (x1 x2 : Set E) => x1 x2) s) (h : as, Orthonormal 𝕜 fun (x : a) => x) :
                                              Orthonormal 𝕜 fun (x : (⋃₀ s)) => x
                                              theorem exists_maximal_orthonormal {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {s : Set E} (hs : Orthonormal 𝕜 Subtype.val) :
                                              ws, Orthonormal 𝕜 Subtype.val uw, Orthonormal 𝕜 Subtype.valu = w

                                              Given an orthonormal set v of vectors in E, there exists a maximal orthonormal set containing it.

                                              def basisOfOrthonormalOfCardEqFinrank {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} [Fintype ι] [Nonempty ι] {v : ιE} (hv : Orthonormal 𝕜 v) (card_eq : Fintype.card ι = Module.finrank 𝕜 E) :
                                              Basis ι 𝕜 E

                                              A family of orthonormal vectors with the correct cardinality forms a basis.

                                              Equations
                                              Instances For
                                                @[simp]
                                                theorem coe_basisOfOrthonormalOfCardEqFinrank {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} [Fintype ι] [Nonempty ι] {v : ιE} (hv : Orthonormal 𝕜 v) (card_eq : Fintype.card ι = Module.finrank 𝕜 E) :
                                                theorem Orthonormal.ne_zero {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) (i : ι) :
                                                v i 0
                                                theorem norm_eq_sqrt_inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                                x = (RCLike.re (inner x x))
                                                theorem inner_self_eq_norm_mul_norm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                                RCLike.re (inner x x) = x * x
                                                theorem inner_self_eq_norm_sq {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                                RCLike.re (inner x x) = x ^ 2
                                                theorem norm_add_sq {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                x + y ^ 2 = x ^ 2 + 2 * RCLike.re (inner x y) + y ^ 2

                                                Expand the square

                                                theorem norm_add_pow_two {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                x + y ^ 2 = x ^ 2 + 2 * RCLike.re (inner x y) + y ^ 2

                                                Alias of norm_add_sq.


                                                Expand the square

                                                theorem norm_add_sq_real {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (x y : F) :
                                                x + y ^ 2 = x ^ 2 + 2 * inner x y + y ^ 2

                                                Expand the square

                                                theorem norm_add_pow_two_real {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (x y : F) :
                                                x + y ^ 2 = x ^ 2 + 2 * inner x y + y ^ 2

                                                Alias of norm_add_sq_real.


                                                Expand the square

                                                theorem norm_add_mul_self {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                x + y * x + y = x * x + 2 * RCLike.re (inner x y) + y * y

                                                Expand the square

                                                Expand the square

                                                theorem norm_sub_sq {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                x - y ^ 2 = x ^ 2 - 2 * RCLike.re (inner x y) + y ^ 2

                                                Expand the square

                                                theorem norm_sub_pow_two {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                x - y ^ 2 = x ^ 2 - 2 * RCLike.re (inner x y) + y ^ 2

                                                Alias of norm_sub_sq.


                                                Expand the square

                                                theorem norm_sub_sq_real {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (x y : F) :
                                                x - y ^ 2 = x ^ 2 - 2 * inner x y + y ^ 2

                                                Expand the square

                                                theorem norm_sub_pow_two_real {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (x y : F) :
                                                x - y ^ 2 = x ^ 2 - 2 * inner x y + y ^ 2

                                                Alias of norm_sub_sq_real.


                                                Expand the square

                                                theorem norm_sub_mul_self {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                x - y * x - y = x * x - 2 * RCLike.re (inner x y) + y * y

                                                Expand the square

                                                Expand the square

                                                theorem norm_inner_le_norm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :

                                                Cauchy–Schwarz inequality with norm

                                                theorem nnnorm_inner_le_nnnorm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                theorem re_inner_le_norm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                RCLike.re (inner x y) x * y

                                                Cauchy–Schwarz inequality with norm

                                                Cauchy–Schwarz inequality with norm

                                                theorem inner_eq_zero_of_left {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x : E} (y : E) (h : x = 0) :
                                                inner x y = 0
                                                theorem inner_eq_zero_of_right {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) {y : E} (h : y = 0) :
                                                inner x y = 0
                                                theorem parallelogram_law_with_norm (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :

                                                Polarization identity: The real part of the inner product, in terms of the norm.

                                                Polarization identity: The real part of the inner product, in terms of the norm.

                                                theorem re_inner_eq_norm_add_mul_self_sub_norm_sub_mul_self_div_four {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                RCLike.re (inner x y) = (x + y * x + y - x - y * x - y) / 4

                                                Polarization identity: The real part of the inner product, in terms of the norm.

                                                theorem im_inner_eq_norm_sub_i_smul_mul_self_sub_norm_add_i_smul_mul_self_div_four {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                RCLike.im (inner x y) = (x - RCLike.I y * x - RCLike.I y - x + RCLike.I y * x + RCLike.I y) / 4

                                                Polarization identity: The imaginary part of the inner product, in terms of the norm.

                                                theorem inner_eq_sum_norm_sq_div_four {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                inner x y = (x + y ^ 2 - x - y ^ 2 + (x - RCLike.I y ^ 2 - x + RCLike.I y ^ 2) * RCLike.I) / 4

                                                Polarization identity: The inner product, in terms of the norm.

                                                theorem inner_map_polarization {V : Type u_4} [SeminormedAddCommGroup V] [InnerProductSpace V] (T : V →ₗ[] V) (x y : V) :
                                                inner (T y) x = (inner (T (x + y)) (x + y) - inner (T (x - y)) (x - y) + Complex.I * inner (T (x + Complex.I y)) (x + Complex.I y) - Complex.I * inner (T (x - Complex.I y)) (x - Complex.I y)) / 4

                                                A complex polarization identity, with a linear map

                                                theorem inner_map_polarization' {V : Type u_4} [SeminormedAddCommGroup V] [InnerProductSpace V] (T : V →ₗ[] V) (x y : V) :
                                                inner (T x) y = (inner (T (x + y)) (x + y) - inner (T (x - y)) (x - y) - Complex.I * inner (T (x + Complex.I y)) (x + Complex.I y) + Complex.I * inner (T (x - Complex.I y)) (x - Complex.I y)) / 4
                                                theorem inner_map_self_eq_zero {V : Type u_4} [NormedAddCommGroup V] [InnerProductSpace V] (T : V →ₗ[] V) :
                                                (∀ (x : V), inner (T x) x = 0) T = 0

                                                A linear map T is zero, if and only if the identity ⟪T x, x⟫_ℂ = 0 holds for all x.

                                                theorem ext_inner_map {V : Type u_4} [NormedAddCommGroup V] [InnerProductSpace V] (S T : V →ₗ[] V) :
                                                (∀ (x : V), inner (S x) x = inner (T x) x) S = T

                                                Two linear maps S and T are equal, if and only if the identity ⟪S x, x⟫_ℂ = ⟪T x, x⟫_ℂ holds for all x.

                                                @[simp]
                                                theorem LinearIsometry.inner_map_map {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E →ₗᵢ[𝕜] E') (x y : E) :
                                                inner (f x) (f y) = inner x y

                                                A linear isometry preserves the inner product.

                                                @[simp]
                                                theorem LinearIsometryEquiv.inner_map_map {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E ≃ₗᵢ[𝕜] E') (x y : E) :
                                                inner (f x) (f y) = inner x y

                                                A linear isometric equivalence preserves the inner product.

                                                theorem LinearIsometryEquiv.inner_map_eq_flip {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E ≃ₗᵢ[𝕜] E') (x : E) (y : E') :
                                                inner (f x) y = inner x (f.symm y)

                                                The adjoint of a linear isometric equivalence is its inverse.

                                                def LinearMap.isometryOfInner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E →ₗ[𝕜] E') (h : ∀ (x y : E), inner (f x) (f y) = inner x y) :
                                                E →ₗᵢ[𝕜] E'

                                                A linear map that preserves the inner product is a linear isometry.

                                                Equations
                                                • f.isometryOfInner h = { toLinearMap := f, norm_map' := }
                                                Instances For
                                                  @[simp]
                                                  theorem LinearMap.coe_isometryOfInner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E →ₗ[𝕜] E') (h : ∀ (x y : E), inner (f x) (f y) = inner x y) :
                                                  (f.isometryOfInner h) = f
                                                  @[simp]
                                                  theorem LinearMap.isometryOfInner_toLinearMap {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E →ₗ[𝕜] E') (h : ∀ (x y : E), inner (f x) (f y) = inner x y) :
                                                  (f.isometryOfInner h).toLinearMap = f
                                                  def LinearEquiv.isometryOfInner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E ≃ₗ[𝕜] E') (h : ∀ (x y : E), inner (f x) (f y) = inner x y) :
                                                  E ≃ₗᵢ[𝕜] E'

                                                  A linear equivalence that preserves the inner product is a linear isometric equivalence.

                                                  Equations
                                                  • f.isometryOfInner h = { toLinearEquiv := f, norm_map' := }
                                                  Instances For
                                                    @[simp]
                                                    theorem LinearEquiv.coe_isometryOfInner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E ≃ₗ[𝕜] E') (h : ∀ (x y : E), inner (f x) (f y) = inner x y) :
                                                    (f.isometryOfInner h) = f
                                                    @[simp]
                                                    theorem LinearEquiv.isometryOfInner_toLinearEquiv {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E ≃ₗ[𝕜] E') (h : ∀ (x y : E), inner (f x) (f y) = inner x y) :
                                                    (f.isometryOfInner h).toLinearEquiv = f
                                                    theorem LinearMap.norm_map_iff_inner_map_map {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {F : Type u_9} [FunLike F E E'] [LinearMapClass F 𝕜 E E'] (f : F) :
                                                    (∀ (x : E), f x = x) ∀ (x y : E), inner (f x) (f y) = inner x y

                                                    A linear map is an isometry if and it preserves the inner product.

                                                    theorem LinearIsometry.orthonormal_comp_iff {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {v : ιE} (f : E →ₗᵢ[𝕜] E') :
                                                    Orthonormal 𝕜 (f v) Orthonormal 𝕜 v

                                                    A linear isometry preserves the property of being orthonormal.

                                                    theorem Orthonormal.comp_linearIsometry {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {v : ιE} (hv : Orthonormal 𝕜 v) (f : E →ₗᵢ[𝕜] E') :
                                                    Orthonormal 𝕜 (f v)

                                                    A linear isometry preserves the property of being orthonormal.

                                                    theorem Orthonormal.comp_linearIsometryEquiv {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {v : ιE} (hv : Orthonormal 𝕜 v) (f : E ≃ₗᵢ[𝕜] E') :
                                                    Orthonormal 𝕜 (f v)

                                                    A linear isometric equivalence preserves the property of being orthonormal.

                                                    theorem Orthonormal.mapLinearIsometryEquiv {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) (f : E ≃ₗᵢ[𝕜] E') :
                                                    Orthonormal 𝕜 (v.map f.toLinearEquiv)

                                                    A linear isometric equivalence, applied with Basis.map, preserves the property of being orthonormal.

                                                    def LinearMap.isometryOfOrthonormal {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E →ₗ[𝕜] E') {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) (hf : Orthonormal 𝕜 (f v)) :
                                                    E →ₗᵢ[𝕜] E'

                                                    A linear map that sends an orthonormal basis to orthonormal vectors is a linear isometry.

                                                    Equations
                                                    • f.isometryOfOrthonormal hv hf = f.isometryOfInner
                                                    Instances For
                                                      @[simp]
                                                      theorem LinearMap.coe_isometryOfOrthonormal {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E →ₗ[𝕜] E') {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) (hf : Orthonormal 𝕜 (f v)) :
                                                      (f.isometryOfOrthonormal hv hf) = f
                                                      @[simp]
                                                      theorem LinearMap.isometryOfOrthonormal_toLinearMap {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E →ₗ[𝕜] E') {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) (hf : Orthonormal 𝕜 (f v)) :
                                                      (f.isometryOfOrthonormal hv hf).toLinearMap = f
                                                      def LinearEquiv.isometryOfOrthonormal {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E ≃ₗ[𝕜] E') {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) (hf : Orthonormal 𝕜 (f v)) :
                                                      E ≃ₗᵢ[𝕜] E'

                                                      A linear equivalence that sends an orthonormal basis to orthonormal vectors is a linear isometric equivalence.

                                                      Equations
                                                      • f.isometryOfOrthonormal hv hf = f.isometryOfInner
                                                      Instances For
                                                        @[simp]
                                                        theorem LinearEquiv.coe_isometryOfOrthonormal {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E ≃ₗ[𝕜] E') {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) (hf : Orthonormal 𝕜 (f v)) :
                                                        (f.isometryOfOrthonormal hv hf) = f
                                                        @[simp]
                                                        theorem LinearEquiv.isometryOfOrthonormal_toLinearEquiv {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E ≃ₗ[𝕜] E') {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) (hf : Orthonormal 𝕜 (f v)) :
                                                        (f.isometryOfOrthonormal hv hf).toLinearEquiv = f
                                                        def Orthonormal.equiv {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {ι' : Type u_5} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) {v' : Basis ι' 𝕜 E'} (hv' : Orthonormal 𝕜 v') (e : ι ι') :
                                                        E ≃ₗᵢ[𝕜] E'

                                                        A linear isometric equivalence that sends an orthonormal basis to a given orthonormal basis.

                                                        Equations
                                                        • hv.equiv hv' e = (v.equiv v' e).isometryOfOrthonormal hv
                                                        Instances For
                                                          @[simp]
                                                          theorem Orthonormal.equiv_toLinearEquiv {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {ι' : Type u_5} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) {v' : Basis ι' 𝕜 E'} (hv' : Orthonormal 𝕜 v') (e : ι ι') :
                                                          (hv.equiv hv' e).toLinearEquiv = v.equiv v' e
                                                          @[simp]
                                                          theorem Orthonormal.equiv_apply {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {ι' : Type u_9} {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) {v' : Basis ι' 𝕜 E'} (hv' : Orthonormal 𝕜 v') (e : ι ι') (i : ι) :
                                                          (hv.equiv hv' e) (v i) = v' (e i)
                                                          @[simp]
                                                          theorem Orthonormal.equiv_trans {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {ι' : Type u_5} {ι'' : Type u_6} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {E'' : Type u_8} [SeminormedAddCommGroup E''] [InnerProductSpace 𝕜 E''] {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) {v' : Basis ι' 𝕜 E'} (hv' : Orthonormal 𝕜 v') (e : ι ι') {v'' : Basis ι'' 𝕜 E''} (hv'' : Orthonormal 𝕜 v'') (e' : ι' ι'') :
                                                          (hv.equiv hv' e).trans (hv'.equiv hv'' e') = hv.equiv hv'' (e.trans e')
                                                          theorem Orthonormal.map_equiv {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {ι' : Type u_5} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) {v' : Basis ι' 𝕜 E'} (hv' : Orthonormal 𝕜 v') (e : ι ι') :
                                                          v.map (hv.equiv hv' e).toLinearEquiv = v'.reindex e.symm

                                                          Polarization identity: The real inner product, in terms of the norm.

                                                          Polarization identity: The real inner product, in terms of the norm.

                                                          Pythagorean theorem, if-and-only-if vector inner product form.

                                                          Pythagorean theorem, if-and-if vector inner product form using square roots.

                                                          theorem norm_add_sq_eq_norm_sq_add_norm_sq_of_inner_eq_zero {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) (h : inner x y = 0) :

                                                          Pythagorean theorem, vector inner product form.

                                                          Pythagorean theorem, vector inner product form.

                                                          Pythagorean theorem, subtracting vectors, if-and-only-if vector inner product form.

                                                          Pythagorean theorem, subtracting vectors, if-and-if vector inner product form using square roots.

                                                          Pythagorean theorem, subtracting vectors, vector inner product form.

                                                          The sum and difference of two vectors are orthogonal if and only if they have the same norm.

                                                          theorem norm_sub_eq_norm_add {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {v w : E} (h : inner v w = 0) :
                                                          w - v = w + v

                                                          Given two orthogonal vectors, their sum and difference have equal norms.

                                                          The real inner product of two vectors, divided by the product of their norms, has absolute value at most 1.

                                                          theorem real_inner_smul_self_left {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (x : F) (r : ) :
                                                          inner (r x) x = r * (x * x)

                                                          The inner product of a vector with a multiple of itself.

                                                          theorem real_inner_smul_self_right {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (x : F) (r : ) :
                                                          inner x (r x) = r * (x * x)

                                                          The inner product of a vector with a multiple of itself.

                                                          def innerₛₗ (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] :
                                                          E →ₗ⋆[𝕜] E →ₗ[𝕜] 𝕜

                                                          The inner product as a sesquilinear map.

                                                          Equations
                                                          Instances For
                                                            @[simp]
                                                            theorem innerₛₗ_apply_coe (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (v : E) :
                                                            ((innerₛₗ 𝕜) v) = fun (w : E) => inner v w
                                                            @[simp]
                                                            theorem innerₛₗ_apply (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (v w : E) :
                                                            ((innerₛₗ 𝕜) v) w = inner v w

                                                            The inner product as a bilinear map in the real case.

                                                            Equations
                                                            Instances For
                                                              @[simp]
                                                              theorem innerₗ_apply {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] (v w : F) :
                                                              ((innerₗ F) v) w = inner v w
                                                              def innerSL (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] :
                                                              E →L⋆[𝕜] E →L[𝕜] 𝕜

                                                              The inner product as a continuous sesquilinear map. Note that toDualMap (resp. toDual) in InnerProductSpace.Dual is a version of this given as a linear isometry (resp. linear isometric equivalence).

                                                              Equations
                                                              Instances For
                                                                @[simp]
                                                                theorem innerSL_apply_coe (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (v : E) :
                                                                ((innerSL 𝕜) v) = fun (w : E) => inner v w
                                                                @[simp]
                                                                theorem innerSL_apply (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (v w : E) :
                                                                ((innerSL 𝕜) v) w = inner v w
                                                                def innerSLFlip (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] :
                                                                E →L[𝕜] E →L⋆[𝕜] 𝕜

                                                                The inner product as a continuous sesquilinear map, with the two arguments flipped.

                                                                Equations
                                                                Instances For
                                                                  @[simp]
                                                                  theorem innerSLFlip_apply (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                                  ((innerSLFlip 𝕜) x) y = inner y x
                                                                  noncomputable def ContinuousLinearMap.toSesqForm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_4} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] :
                                                                  (E →L[𝕜] E') →L[𝕜] E' →L⋆[𝕜] E →L[𝕜] 𝕜

                                                                  Given f : E →L[𝕜] E', construct the continuous sesquilinear form fun x y ↦ ⟪x, A y⟫, given as a continuous linear map.

                                                                  Instances For
                                                                    @[simp]
                                                                    theorem ContinuousLinearMap.toSesqForm_apply_coe {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_4} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] (f : E →L[𝕜] E') (x : E') :
                                                                    (ContinuousLinearMap.toSesqForm f) x = ((innerSL 𝕜) x).comp f
                                                                    theorem ContinuousLinearMap.toSesqForm_apply_norm_le {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {E' : Type u_4} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {f : E →L[𝕜] E'} {v : E'} :
                                                                    (ContinuousLinearMap.toSesqForm f) v f * v
                                                                    @[simp]
                                                                    theorem Orthonormal.equiv_refl {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) :
                                                                    hv.equiv hv (Equiv.refl ι) = LinearIsometryEquiv.refl 𝕜 E
                                                                    @[simp]
                                                                    theorem Orthonormal.equiv_symm {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {ι' : Type u_5} {E' : Type u_7} [SeminormedAddCommGroup E'] [InnerProductSpace 𝕜 E'] {v : Basis ι 𝕜 E} (hv : Orthonormal 𝕜 v) {v' : Basis ι' 𝕜 E'} (hv' : Orthonormal 𝕜 v') (e : ι ι') :
                                                                    (hv.equiv hv' e).symm = hv'.equiv hv e.symm
                                                                    @[simp]
                                                                    theorem innerSL_apply_norm (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :

                                                                    innerSL is an isometry. Note that the associated LinearIsometry is defined in InnerProductSpace.Dual as toDualMap.

                                                                    theorem norm_innerSL_le (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] :
                                                                    theorem isBoundedBilinearMap_inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] [NormedSpace E] [IsScalarTower 𝕜 E] :
                                                                    IsBoundedBilinearMap fun (p : E × E) => inner p.1 p.2

                                                                    When an inner product space E over 𝕜 is considered as a real normed space, its inner product satisfies IsBoundedBilinearMap.

                                                                    In order to state these results, we need a NormedSpace ℝ E instance. We will later establish such an instance by restriction-of-scalars, InnerProductSpace.rclikeToReal 𝕜 E, but this instance may be not definitionally equal to some other “natural” instance. So, we assume [NormedSpace ℝ E].

                                                                    theorem inner_sum_smul_sum_smul_of_sum_eq_zero {F : Type u_3} [SeminormedAddCommGroup F] [InnerProductSpace F] {ι₁ : Type u_4} {s₁ : Finset ι₁} {w₁ : ι₁} (v₁ : ι₁F) (h₁ : is₁, w₁ i = 0) {ι₂ : Type u_5} {s₂ : Finset ι₂} {w₂ : ι₂} (v₂ : ι₂F) (h₂ : is₂, w₂ i = 0) :
                                                                    inner (∑ i₁s₁, w₁ i₁ v₁ i₁) (∑ i₂s₂, w₂ i₂ v₂ i₂) = (-i₁s₁, i₂s₂, w₁ i₁ * w₂ i₂ * (v₁ i₁ - v₂ i₂ * v₁ i₁ - v₂ i₂)) / 2

                                                                    The inner product of two weighted sums, where the weights in each sum add to 0, in terms of the norms of pairwise differences.

                                                                    theorem dist_div_norm_sq_smul {F : Type u_3} [NormedAddCommGroup F] [InnerProductSpace F] {x y : F} (hx : x 0) (hy : y 0) (R : ) :
                                                                    dist ((R / x) ^ 2 x) ((R / y) ^ 2 y) = R ^ 2 / (x * y) * dist x y

                                                                    Formula for the distance between the images of two nonzero points under an inversion with center zero. See also EuclideanGeometry.dist_inversion_inversion for inversions around a general point.

                                                                    theorem norm_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_ne_zero_mul {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x : E} {r : 𝕜} (hx : x 0) (hr : r 0) :
                                                                    inner x (r x) / (x * r x) = 1

                                                                    The inner product of a nonzero vector with a nonzero multiple of itself, divided by the product of their norms, has absolute value

                                                                    theorem abs_real_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_ne_zero_mul {F : Type u_3} [NormedAddCommGroup F] [InnerProductSpace F] {x : F} {r : } (hx : x 0) (hr : r 0) :
                                                                    |inner x (r x)| / (x * r x) = 1

                                                                    The inner product of a nonzero vector with a nonzero multiple of itself, divided by the product of their norms, has absolute value

                                                                    theorem real_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_pos_mul {F : Type u_3} [NormedAddCommGroup F] [InnerProductSpace F] {x : F} {r : } (hx : x 0) (hr : 0 < r) :
                                                                    inner x (r x) / (x * r x) = 1

                                                                    The inner product of a nonzero vector with a positive multiple of itself, divided by the product of their norms, has value 1.

                                                                    theorem real_inner_div_norm_mul_norm_eq_neg_one_of_ne_zero_of_neg_mul {F : Type u_3} [NormedAddCommGroup F] [InnerProductSpace F] {x : F} {r : } (hx : x 0) (hr : r < 0) :
                                                                    inner x (r x) / (x * r x) = -1

                                                                    The inner product of a nonzero vector with a negative multiple of itself, divided by the product of their norms, has value -1.

                                                                    theorem norm_inner_eq_norm_tfae {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                                    [inner x y = x * y, x = 0 y = (inner x y / inner x x) x, x = 0 ∃ (r : 𝕜), y = r x, x = 0 y Submodule.span 𝕜 {x}].TFAE
                                                                    theorem norm_inner_eq_norm_iff {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x y : E} (hx₀ : x 0) (hy₀ : y 0) :
                                                                    inner x y = x * y ∃ (r : 𝕜), r 0 y = r x

                                                                    If the inner product of two vectors is equal to the product of their norms, then the two vectors are multiples of each other. One form of the equality case for Cauchy-Schwarz. Compare inner_eq_norm_mul_iff, which takes the stronger hypothesis ⟪x, y⟫ = ‖x‖ * ‖y‖.

                                                                    theorem norm_inner_div_norm_mul_norm_eq_one_iff {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                                    inner x y / (x * y) = 1 x 0 ∃ (r : 𝕜), r 0 y = r x

                                                                    The inner product of two vectors, divided by the product of their norms, has absolute value 1 if and only if they are nonzero and one is a multiple of the other. One form of equality case for Cauchy-Schwarz.

                                                                    theorem abs_real_inner_div_norm_mul_norm_eq_one_iff {F : Type u_3} [NormedAddCommGroup F] [InnerProductSpace F] (x y : F) :
                                                                    |inner x y / (x * y)| = 1 x 0 ∃ (r : ), r 0 y = r x

                                                                    The inner product of two vectors, divided by the product of their norms, has absolute value 1 if and only if they are nonzero and one is a multiple of the other. One form of equality case for Cauchy-Schwarz.

                                                                    theorem inner_eq_norm_mul_iff_div {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x y : E} (h₀ : x 0) :
                                                                    inner x y = x * y (y / x) x = y
                                                                    theorem inner_eq_norm_mul_iff {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x y : E} :
                                                                    inner x y = x * y y x = x y

                                                                    If the inner product of two vectors is equal to the product of their norms (i.e., ⟪x, y⟫ = ‖x‖ * ‖y‖), then the two vectors are nonnegative real multiples of each other. One form of the equality case for Cauchy-Schwarz. Compare norm_inner_eq_norm_iff, which takes the weaker hypothesis abs ⟪x, y⟫ = ‖x‖ * ‖y‖.

                                                                    If the inner product of two vectors is equal to the product of their norms (i.e., ⟪x, y⟫ = ‖x‖ * ‖y‖), then the two vectors are nonnegative real multiples of each other. One form of the equality case for Cauchy-Schwarz. Compare norm_inner_eq_norm_iff, which takes the weaker hypothesis abs ⟪x, y⟫ = ‖x‖ * ‖y‖.

                                                                    theorem real_inner_div_norm_mul_norm_eq_one_iff {F : Type u_3} [NormedAddCommGroup F] [InnerProductSpace F] (x y : F) :
                                                                    inner x y / (x * y) = 1 x 0 ∃ (r : ), 0 < r y = r x

                                                                    The inner product of two vectors, divided by the product of their norms, has value 1 if and only if they are nonzero and one is a positive multiple of the other.

                                                                    theorem real_inner_div_norm_mul_norm_eq_neg_one_iff {F : Type u_3} [NormedAddCommGroup F] [InnerProductSpace F] (x y : F) :
                                                                    inner x y / (x * y) = -1 x 0 r < 0, y = r x

                                                                    The inner product of two vectors, divided by the product of their norms, has value -1 if and only if they are nonzero and one is a negative multiple of the other.

                                                                    theorem inner_eq_one_iff_of_norm_one {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x y : E} (hx : x = 1) (hy : y = 1) :
                                                                    inner x y = 1 x = y

                                                                    If the inner product of two unit vectors is 1, then the two vectors are equal. One form of the equality case for Cauchy-Schwarz.

                                                                    theorem inner_lt_one_iff_real_of_norm_one {F : Type u_3} [NormedAddCommGroup F] [InnerProductSpace F] {x y : F} (hx : x = 1) (hy : y = 1) :
                                                                    inner x y < 1 x y

                                                                    If the inner product of two unit vectors is strictly less than 1, then the two vectors are distinct. One form of the equality case for Cauchy-Schwarz.

                                                                    theorem eq_of_norm_le_re_inner_eq_norm_sq {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x y : E} (hle : x y) (h : RCLike.re (inner x y) = y ^ 2) :
                                                                    x = y

                                                                    The sphere of radius r = ‖y‖ is tangent to the plane ⟪x, y⟫ = ‖y‖ ^ 2 at x = y.

                                                                    theorem Orthonormal.sum_inner_products_le {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} (x : E) {v : ιE} {s : Finset ι} (hv : Orthonormal 𝕜 v) :
                                                                    is, inner (v i) x ^ 2 x ^ 2

                                                                    Bessel's inequality for finite sums.

                                                                    theorem Orthonormal.tsum_inner_products_le {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} (x : E) {v : ιE} (hv : Orthonormal 𝕜 v) :
                                                                    ∑' (i : ι), inner (v i) x ^ 2 x ^ 2

                                                                    Bessel's inequality.

                                                                    theorem Orthonormal.inner_products_summable {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} (x : E) {v : ιE} (hv : Orthonormal 𝕜 v) :
                                                                    Summable fun (i : ι) => inner (v i) x ^ 2

                                                                    The sum defined in Bessel's inequality is summable.

                                                                    instance RCLike.innerProductSpace {𝕜 : Type u_1} [RCLike 𝕜] :

                                                                    A field 𝕜 satisfying RCLike is itself a 𝕜-inner product space.

                                                                    Equations
                                                                    @[simp]
                                                                    theorem RCLike.inner_apply {𝕜 : Type u_1} [RCLike 𝕜] (x y : 𝕜) :
                                                                    inner x y = (starRingEnd 𝕜) x * y

                                                                    Inner product space structure on subspaces #

                                                                    instance Submodule.innerProductSpace {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (W : Submodule 𝕜 E) :

                                                                    Induced inner product on a submodule.

                                                                    Equations
                                                                    @[simp]
                                                                    theorem Submodule.coe_inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (W : Submodule 𝕜 E) (x y : W) :
                                                                    inner x y = inner x y

                                                                    The inner product on submodules is the same as on the ambient space.

                                                                    theorem Orthonormal.codRestrict {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) (s : Submodule 𝕜 E) (hvs : ∀ (i : ι), v i s) :
                                                                    Orthonormal 𝕜 (Set.codRestrict v (↑s) hvs)
                                                                    theorem orthonormal_span {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) :
                                                                    Orthonormal 𝕜 fun (i : ι) => v i,

                                                                    Families of mutually-orthogonal subspaces of an inner product space #

                                                                    def OrthogonalFamily (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} (G : ιType u_5) [(i : ι) → SeminormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace 𝕜 (G i)] (V : (i : ι) → G i →ₗᵢ[𝕜] E) :

                                                                    An indexed family of mutually-orthogonal subspaces of an inner product space E.

                                                                    The simple way to express this concept would be as a condition on V : ι → Submodule 𝕜 E. We instead implement it as a condition on a family of inner product spaces each equipped with an isometric embedding into E, thus making it a property of morphisms rather than subobjects. The connection to the subobject spelling is shown in orthogonalFamily_iff_pairwise.

                                                                    This definition is less lightweight, but allows for better definitional properties when the inner product space structure on each of the submodules is important -- for example, when considering their Hilbert sum (PiLp V 2). For example, given an orthonormal set of vectors v : ι → E, we have an associated orthogonal family of one-dimensional subspaces of E, which it is convenient to be able to discuss using ι → 𝕜 rather than Π i : ι, span 𝕜 (v i).

                                                                    Equations
                                                                    Instances For
                                                                      theorem Orthonormal.orthogonalFamily {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {v : ιE} (hv : Orthonormal 𝕜 v) :
                                                                      OrthogonalFamily 𝕜 (fun (_i : ι) => 𝕜) fun (i : ι) => LinearIsometry.toSpanSingleton 𝕜 E
                                                                      theorem OrthogonalFamily.eq_ite {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {G : ιType u_5} [(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace 𝕜 (G i)] {V : (i : ι) → G i →ₗᵢ[𝕜] E} (hV : OrthogonalFamily 𝕜 G V) [DecidableEq ι] {i j : ι} (v : G i) (w : G j) :
                                                                      inner ((V i) v) ((V j) w) = if i = j then inner ((V i) v) ((V j) w) else 0
                                                                      theorem OrthogonalFamily.inner_right_dfinsupp {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {G : ιType u_5} [(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace 𝕜 (G i)] {V : (i : ι) → G i →ₗᵢ[𝕜] E} (hV : OrthogonalFamily 𝕜 G V) [(i : ι) → (x : G i) → Decidable (x 0)] [DecidableEq ι] (l : DirectSum ι fun (i : ι) => G i) (i : ι) (v : G i) :
                                                                      inner ((V i) v) (DFinsupp.sum l fun (j : ι) => (V j)) = inner v (l i)
                                                                      theorem OrthogonalFamily.inner_right_fintype {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {G : ιType u_5} [(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace 𝕜 (G i)] {V : (i : ι) → G i →ₗᵢ[𝕜] E} (hV : OrthogonalFamily 𝕜 G V) [Fintype ι] (l : (i : ι) → G i) (i : ι) (v : G i) :
                                                                      inner ((V i) v) (∑ j : ι, (V j) (l j)) = inner v (l i)
                                                                      theorem OrthogonalFamily.inner_sum {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {G : ιType u_5} [(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace 𝕜 (G i)] {V : (i : ι) → G i →ₗᵢ[𝕜] E} (hV : OrthogonalFamily 𝕜 G V) (l₁ l₂ : (i : ι) → G i) (s : Finset ι) :
                                                                      inner (∑ is, (V i) (l₁ i)) (∑ js, (V j) (l₂ j)) = is, inner (l₁ i) (l₂ i)
                                                                      theorem OrthogonalFamily.norm_sum {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {G : ιType u_5} [(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace 𝕜 (G i)] {V : (i : ι) → G i →ₗᵢ[𝕜] E} (hV : OrthogonalFamily 𝕜 G V) (l : (i : ι) → G i) (s : Finset ι) :
                                                                      is, (V i) (l i) ^ 2 = is, l i ^ 2
                                                                      theorem OrthogonalFamily.comp {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {G : ιType u_5} [(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace 𝕜 (G i)] {V : (i : ι) → G i →ₗᵢ[𝕜] E} (hV : OrthogonalFamily 𝕜 G V) {γ : Type u_6} {f : γι} (hf : Function.Injective f) :
                                                                      OrthogonalFamily 𝕜 (fun (g : γ) => G (f g)) fun (g : γ) => V (f g)

                                                                      The composition of an orthogonal family of subspaces with an injective function is also an orthogonal family.

                                                                      theorem OrthogonalFamily.orthonormal_sigma_orthonormal {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {G : ιType u_5} [(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace 𝕜 (G i)] {V : (i : ι) → G i →ₗᵢ[𝕜] E} (hV : OrthogonalFamily 𝕜 G V) {α : ιType u_6} {v_family : (i : ι) → α iG i} (hv_family : ∀ (i : ι), Orthonormal 𝕜 (v_family i)) :
                                                                      Orthonormal 𝕜 fun (a : (i : ι) × α i) => (V a.fst) (v_family a.fst a.snd)
                                                                      theorem OrthogonalFamily.norm_sq_diff_sum {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {G : ιType u_5} [(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace 𝕜 (G i)] {V : (i : ι) → G i →ₗᵢ[𝕜] E} (hV : OrthogonalFamily 𝕜 G V) [DecidableEq ι] (f : (i : ι) → G i) (s₁ s₂ : Finset ι) :
                                                                      is₁, (V i) (f i) - is₂, (V i) (f i) ^ 2 = is₁ \ s₂, f i ^ 2 + is₂ \ s₁, f i ^ 2
                                                                      theorem OrthogonalFamily.summable_iff_norm_sq_summable {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {G : ιType u_5} [(i : ι) → NormedAddCommGroup (G i)] [(i : ι) → InnerProductSpace 𝕜 (G i)] {V : (i : ι) → G i →ₗᵢ[𝕜] E} (hV : OrthogonalFamily 𝕜 G V) [CompleteSpace E] (f : (i : ι) → G i) :
                                                                      (Summable fun (i : ι) => (V i) (f i)) Summable fun (i : ι) => f i ^ 2

                                                                      A family f of mutually-orthogonal elements of E is summable, if and only if (fun i ↦ ‖f i‖ ^ 2) is summable.

                                                                      theorem OrthogonalFamily.independent {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} {V : ιSubmodule 𝕜 E} (hV : OrthogonalFamily 𝕜 (fun (i : ι) => (V i)) fun (i : ι) => (V i).subtypeₗᵢ) :

                                                                      An orthogonal family forms an independent family of subspaces; that is, any collection of elements each from a different subspace in the family is linearly independent. In particular, the pairwise intersections of elements of the family are 0.

                                                                      theorem DirectSum.IsInternal.collectedBasis_orthonormal {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {ι : Type u_4} [DecidableEq ι] {V : ιSubmodule 𝕜 E} (hV : OrthogonalFamily 𝕜 (fun (i : ι) => (V i)) fun (i : ι) => (V i).subtypeₗᵢ) (hV_sum : DirectSum.IsInternal fun (i : ι) => V i) {α : ιType u_6} {v_family : (i : ι) → Basis (α i) 𝕜 (V i)} (hv_family : ∀ (i : ι), Orthonormal 𝕜 (v_family i)) :
                                                                      Orthonormal 𝕜 (hV_sum.collectedBasis v_family)
                                                                      def Inner.rclikeToReal (𝕜 : Type u_1) (E : Type u_2) [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] :

                                                                      A general inner product implies a real inner product. This is not registered as an instance since it creates problems with the case 𝕜 = ℝ.

                                                                      Equations
                                                                      Instances For

                                                                        A general inner product space structure implies a real inner product structure. This is not registered as an instance since it creates problems with the case 𝕜 = ℝ, but in can be used in a proof to obtain a real inner product space structure from a given 𝕜-inner product space structure.

                                                                        Equations
                                                                        Instances For
                                                                          theorem real_inner_eq_re_inner (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x y : E) :
                                                                          inner x y = RCLike.re (inner x y)
                                                                          theorem real_inner_I_smul_self (𝕜 : Type u_1) {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (x : E) :
                                                                          inner x (RCLike.I x) = 0

                                                                          A complex inner product implies a real inner product. This cannot be an instance since it creates a diamond with PiLp.innerProductSpace because re (sum i, inner (x i) (y i)) and sum i, re (inner (x i) (y i)) are not defeq.

                                                                          Equations
                                                                          Instances For
                                                                            @[simp]
                                                                            theorem Complex.inner (w z : ) :
                                                                            inner w z = ((starRingEnd ) w * z).re
                                                                            theorem inner_map_complex {G : Type u_4} [SeminormedAddCommGroup G] [InnerProductSpace G] (f : G ≃ₗᵢ[] ) (x y : G) :
                                                                            inner x y = ((starRingEnd ) (f x) * f y).re

                                                                            The inner product on an inner product space of dimension 2 can be evaluated in terms of a complex-number representation of the space.

                                                                            Continuity of the inner product #

                                                                            theorem continuous_inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] :
                                                                            Continuous fun (p : E × E) => inner p.1 p.2
                                                                            theorem Filter.Tendsto.inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {α : Type u_4} {f g : αE} {l : Filter α} {x y : E} (hf : Filter.Tendsto f l (nhds x)) (hg : Filter.Tendsto g l (nhds y)) :
                                                                            Filter.Tendsto (fun (t : α) => inner (f t) (g t)) l (nhds (inner x y))
                                                                            theorem ContinuousWithinAt.inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {α : Type u_4} [TopologicalSpace α] {f g : αE} {x : α} {s : Set α} (hf : ContinuousWithinAt f s x) (hg : ContinuousWithinAt g s x) :
                                                                            ContinuousWithinAt (fun (t : α) => inner (f t) (g t)) s x
                                                                            theorem ContinuousAt.inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {α : Type u_4} [TopologicalSpace α] {f g : αE} {x : α} (hf : ContinuousAt f x) (hg : ContinuousAt g x) :
                                                                            ContinuousAt (fun (t : α) => inner (f t) (g t)) x
                                                                            theorem ContinuousOn.inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {α : Type u_4} [TopologicalSpace α] {f g : αE} {s : Set α} (hf : ContinuousOn f s) (hg : ContinuousOn g s) :
                                                                            ContinuousOn (fun (t : α) => inner (f t) (g t)) s
                                                                            theorem Continuous.inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {α : Type u_4} [TopologicalSpace α] {f g : αE} (hf : Continuous f) (hg : Continuous g) :
                                                                            Continuous fun (t : α) => inner (f t) (g t)
                                                                            def ContinuousLinearMap.reApplyInnerSelf {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (T : E →L[𝕜] E) (x : E) :

                                                                            Extract a real bilinear form from an operator T, by taking the pairing fun x ↦ re ⟪T x, x⟫.

                                                                            Equations
                                                                            • T.reApplyInnerSelf x = RCLike.re (inner (T x) x)
                                                                            Instances For
                                                                              theorem ContinuousLinearMap.reApplyInnerSelf_apply {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (T : E →L[𝕜] E) (x : E) :
                                                                              T.reApplyInnerSelf x = RCLike.re (inner (T x) x)
                                                                              theorem ContinuousLinearMap.reApplyInnerSelf_continuous {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (T : E →L[𝕜] E) :
                                                                              Continuous T.reApplyInnerSelf
                                                                              theorem ContinuousLinearMap.reApplyInnerSelf_smul {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (T : E →L[𝕜] E) (x : E) {c : 𝕜} :
                                                                              T.reApplyInnerSelf (c x) = c ^ 2 * T.reApplyInnerSelf x
                                                                              theorem Inseparable.inner_eq_inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {x₁ x₂ y₁ y₂ : E} (hx : Inseparable x₁ x₂) (hy : Inseparable y₁ y₂) :
                                                                              inner x₁ y₁ = inner x₂ y₂
                                                                              Equations
                                                                              Equations
                                                                              instance UniformSpace.Completion.toInner {𝕜' : Type u_4} {E' : Type u_5} [TopologicalSpace 𝕜'] [UniformSpace E'] [Inner 𝕜' E'] :
                                                                              Equations
                                                                              @[simp]
                                                                              theorem UniformSpace.Completion.inner_coe {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] (a b : E) :
                                                                              inner (E a) (E b) = inner a b
                                                                              theorem UniformSpace.Completion.Continuous.inner {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] {α : Type u_4} [TopologicalSpace α] {f g : αUniformSpace.Completion E} (hf : Continuous f) (hg : Continuous g) :
                                                                              Continuous fun (x : α) => inner (f x) (g x)
                                                                              Equations