mathlib documentation

analysis.normed_space.inner_product

Inner Product Space #

This file defines inner product spaces and proves its basic properties.

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 is_R_or_C typeclass.

Main results #

Notation #

We globally denote the real and complex inner products by โŸชยท, ยทโŸซ_โ„ and โŸชยท, ยทโŸซ_โ„‚ respectively. We also provide two notation namespaces: real_inner_product_space, complex_inner_product_space, which respectively introduce the plain notation โŸชยท, ยทโŸซ for the the real and complex inner product.

The orthogonal complement of a submodule K is denoted by Kแ—ฎ.

Implementation notes #

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

TODO #

Tags #

inner product space, norm

References #

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

@[class]
structure has_inner (๐•œ : Type u_4) (E : Type u_5) :
Type (max u_4 u_5)
  • inner : E โ†’ E โ†’ ๐•œ

Syntactic typeclass for types endowed with an inner product

Instances
@[class]
structure inner_product_space (๐•œ : Type u_4) (E : Type u_5) [is_R_or_C ๐•œ] :
Type (max u_4 u_5)

An inner product space is a vector space with an additional operation called inner product. The norm could be derived from the inner product, instead we require the existence of a norm and the fact that โˆฅxโˆฅ^2 = re โŸชx, xโŸซ to be able to put instances on ๐•‚ or product spaces.

To construct a norm from an inner product, see inner_product_space.of_core.

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 inner_product_space.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 inner_product_space. 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!

@[nolint, class]
structure inner_product_space.core (๐•œ : Type u_4) (F : Type u_5) [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] :
Type (max u_4 u_5)

A structure requiring that a scalar product is positive definite and symmetric, from which one can construct an inner_product_space instance in inner_product_space.of_core.

def inner_product_space.of_core.to_has_inner {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] :
has_inner ๐•œ F

Inner product defined by the inner_product_space.core structure.

Equations
def inner_product_space.of_core.norm_sq {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] (x : F) :

The norm squared function for inner_product_space.core structure.

Equations
theorem inner_product_space.of_core.inner_conj_sym {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] (x y : F) :
theorem inner_product_space.of_core.inner_self_nonneg {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x : F} :
theorem inner_product_space.of_core.inner_self_nonneg_im {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x : F} :
theorem inner_product_space.of_core.inner_self_im_zero {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x : F} :
theorem inner_product_space.of_core.inner_add_left {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y z : F} :
inner (x + y) z = inner x z + inner y z
theorem inner_product_space.of_core.inner_add_right {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y z : F} :
inner x (y + z) = inner x y + inner x z
theorem inner_product_space.of_core.inner_norm_sq_eq_inner_self {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] (x : F) :
theorem inner_product_space.of_core.inner_re_symm {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y : F} :
theorem inner_product_space.of_core.inner_im_symm {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y : F} :
theorem inner_product_space.of_core.inner_smul_left {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y : F} {r : ๐•œ} :
theorem inner_product_space.of_core.inner_smul_right {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y : F} {r : ๐•œ} :
inner x (r โ€ข y) = r * inner x y
theorem inner_product_space.of_core.inner_zero_left {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x : F} :
inner 0 x = 0
theorem inner_product_space.of_core.inner_zero_right {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x : F} :
inner x 0 = 0
theorem inner_product_space.of_core.inner_self_eq_zero {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x : F} :
inner x x = 0 โ†” x = 0
theorem inner_product_space.of_core.inner_self_re_to_K {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x : F} :
theorem inner_product_space.of_core.inner_abs_conj_sym {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y : F} :
theorem inner_product_space.of_core.inner_neg_left {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y : F} :
inner (-x) y = -inner x y
theorem inner_product_space.of_core.inner_neg_right {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y : F} :
inner x (-y) = -inner x y
theorem inner_product_space.of_core.inner_sub_left {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y z : F} :
inner (x - y) z = inner x z - inner y z
theorem inner_product_space.of_core.inner_sub_right {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y z : F} :
inner x (y - z) = inner x y - inner x z
theorem inner_product_space.of_core.inner_mul_conj_re_abs {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y : F} :
theorem inner_product_space.of_core.inner_add_add_self {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.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 inner_product_space.of_core.inner_sub_sub_self {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x y : F} :
inner (x - y) (x - y) = inner x x - inner x y - inner y x + inner y y
theorem inner_product_space.of_core.inner_mul_inner_self_le {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] (x y : F) :

Cauchyโ€“Schwarz inequality. This proof follows "Proof 2" on Wikipedia. We need this for the core structure to prove the triangle inequality below when showing the core is a normed group.

def inner_product_space.of_core.to_has_norm {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] :

Norm constructed from a inner_product_space.core structure, defined to be the square root of the scalar product.

Equations
theorem inner_product_space.of_core.norm_eq_sqrt_inner {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] (x : F) :
theorem inner_product_space.of_core.inner_self_eq_norm_square {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] (x : F) :
theorem inner_product_space.of_core.sqrt_norm_sq_eq_norm {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] {x : F} :
theorem inner_product_space.of_core.abs_inner_le_norm {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] (x y : F) :

Cauchyโ€“Schwarz inequality with norm

def inner_product_space.of_core.to_normed_group {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] :

Normed group structure constructed from an inner_product_space.core structure

Equations
def inner_product_space.of_core.to_normed_space {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] [c : inner_product_space.core ๐•œ F] :
normed_space ๐•œ F

Normed space structure constructed from a inner_product_space.core structure

Equations
def inner_product_space.of_core {๐•œ : Type u_1} {F : Type u_3} [is_R_or_C ๐•œ] [add_comm_group F] [semimodule ๐•œ F] (c : inner_product_space.core ๐•œ F) :

Given a inner_product_space.core structure on a space, one can use it to turn the space into an inner product space, constructing the norm out of the inner product

Equations

Properties of inner product spaces #

@[simp]
theorem inner_conj_sym {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (x y : E) :
theorem real_inner_comm {F : Type u_3} [inner_product_space โ„ F] (x y : F) :
inner y x = inner x y
theorem inner_eq_zero_sym {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :
inner x y = 0 โ†” inner y x = 0
@[simp]
theorem inner_self_nonneg_im {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
theorem inner_self_im_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
theorem inner_add_left {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :
theorem inner_im_symm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :
theorem inner_smul_left {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} {r : ๐•œ} :
theorem real_inner_smul_left {F : Type u_3} [inner_product_space โ„ 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} {r : โ„} :
theorem inner_smul_right {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} {r : ๐•œ} :
inner x (r โ€ข y) = r * inner x y
theorem real_inner_smul_right {F : Type u_3} [inner_product_space โ„ 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} {r : โ„} :
def sesq_form_of_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] :
sesq_form ๐•œ E (is_R_or_C.conj_to_ring_equiv ๐•œ)

The inner product as a sesquilinear form.

Equations
@[simp]
theorem sesq_form_of_inner_sesq {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (x y : E) :
@[simp]
theorem bilin_form_of_real_inner_bilin {F : Type u_3} [inner_product_space โ„ F] (แพฐ แพฐ_1 : F) :
โ‡‘bilin_form_of_real_inner แพฐ แพฐ_1 = inner แพฐ แพฐ_1
theorem sum_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_3} (s : finset ฮน) (f : ฮน โ†’ E) (x : E) :
inner (โˆ‘ (i : ฮน) in s, f i) x = โˆ‘ (i : ฮน) in s, inner (f i) x

An inner product with a sum on the left.

theorem inner_sum {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_3} (s : finset ฮน) (f : ฮน โ†’ E) (x : E) :
inner x (โˆ‘ (i : ฮน) in s, f i) = โˆ‘ (i : ฮน) in s, inner x (f i)

An inner product with a sum on the right.

theorem finsupp.sum_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_3} (l : ฮน โ†’โ‚€ ๐•œ) (v : ฮน โ†’ E) (x : E) :
inner (l.sum (ฮป (i : ฮน) (a : ๐•œ), a โ€ข v i)) x = l.sum (ฮป (i : ฮน) (a : ๐•œ), โ‡‘is_R_or_C.conj 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_3} (l : ฮน โ†’โ‚€ ๐•œ) (v : ฮน โ†’ E) (x : E) :
inner x (l.sum (ฮป (i : ฮน) (a : ๐•œ), a โ€ข v i)) = l.sum (ฮป (i : ฮน) (a : ๐•œ), a โ€ข inner x (v i))

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

@[simp]
theorem inner_zero_left {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
inner 0 x = 0
theorem inner_re_zero_left {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
@[simp]
theorem inner_zero_right {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
inner x 0 = 0
theorem inner_re_zero_right {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
theorem inner_self_nonneg {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
theorem real_inner_self_nonneg {F : Type u_3} [inner_product_space โ„ F] {x : F} :
@[simp]
theorem inner_self_eq_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
inner x x = 0 โ†” x = 0
@[simp]
theorem inner_self_nonpos {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
theorem real_inner_self_nonpos {F : Type u_3} [inner_product_space โ„ F] {x : F} :
@[simp]
theorem inner_self_re_to_K {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
theorem inner_self_eq_norm_sq_to_K {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (x : E) :
theorem inner_self_re_abs {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
theorem inner_self_abs_to_K {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
theorem real_inner_self_abs {F : Type u_3} [inner_product_space โ„ F] {x : F} :
abs (inner x x) = inner x x
theorem inner_abs_conj_sym {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :
@[simp]
theorem inner_neg_left {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :
inner (-x) y = -inner x y
@[simp]
theorem inner_neg_right {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :
inner x (-y) = -inner x y
theorem inner_neg_neg {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :
inner (-x) (-y) = inner x y
@[simp]
theorem inner_self_conj {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} :
theorem inner_sub_left {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y z : E} :
inner x (y - z) = inner x y - inner x z
theorem inner_mul_conj_re_abs {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :
theorem inner_add_add_self {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ 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} [inner_product_space โ„ 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ 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} [inner_product_space โ„ 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (x y : E) :

Cauchyโ€“Schwarz inequality. This proof follows "Proof 2" on Wikipedia.

theorem real_inner_mul_inner_self_le {F : Type u_3} [inner_product_space โ„ F] (x y : F) :
(inner x y) * inner x y โ‰ค (inner x x) * inner y y

Cauchyโ€“Schwarz inequality for real inner products.

theorem linear_independent_of_ne_zero_of_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_3} {v : ฮน โ†’ E} (hz : โˆ€ (i : ฮน), v i โ‰  0) (ho : โˆ€ (i j : ฮน), i โ‰  j โ†’ inner (v i) (v j) = 0) :
linear_independent ๐•œ v

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

def orthonormal (๐•œ : Type u_1) {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_4} (v : ฮน โ†’ E) :
Prop

An orthonormal set of vectors in an inner_product_space

Equations
theorem orthonormal_iff_ite {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_4} {v : ฮน โ†’ E} :
orthonormal ๐•œ v โ†” โˆ€ (i j : ฮน), inner (v i) (v j) = ite (i = j) 1 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {s : set E} :
orthonormal ๐•œ coe โ†” โˆ€ (v : E), v โˆˆ s โ†’ โˆ€ (w : E), w โˆˆ s โ†’ inner v w = ite (v = w) 1 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_4} {v : ฮน โ†’ E} (hv : orthonormal ๐•œ v) (l : ฮน โ†’โ‚€ ๐•œ) (i : ฮน) :
inner (v i) (โ‡‘(finsupp.total ฮน E ๐•œ 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_fintype {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ 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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_4} {v : ฮน โ†’ E} (hv : orthonormal ๐•œ v) (l : ฮน โ†’โ‚€ ๐•œ) (i : ฮน) :
inner (โ‡‘(finsupp.total ฮน E ๐•œ v) l) (v i) = โ‡‘is_R_or_C.conj (โ‡‘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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_4} [fintype ฮน] {v : ฮน โ†’ E} (hv : orthonormal ๐•œ v) (l : ฮน โ†’ ๐•œ) (i : ฮน) :
inner (โˆ‘ (i : ฮน), l i โ€ข v i) (v i) = โ‡‘is_R_or_C.conj (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.linear_independent {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_4} {v : ฮน โ†’ E} (hv : orthonormal ๐•œ v) :
linear_independent ๐•œ v

An orthonormal set is linearly independent.

theorem orthonormal.comp {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_4} {ฮน' : Type u_3} {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.inner_finsupp_eq_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_4} {v : ฮน โ†’ E} (hv : orthonormal ๐•œ v) {s : set ฮน} {i : ฮน} (hi : i โˆ‰ s) {l : ฮน โ†’โ‚€ ๐•œ} (hl : l โˆˆ finsupp.supported ๐•œ ๐•œ s) :
inner (โ‡‘(finsupp.total ฮน E ๐•œ 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_empty (๐•œ : Type u_1) (E : Type u_2) [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] :
orthonormal ๐•œ (ฮป (x : โ†ฅโˆ…), โ†‘x)
theorem orthonormal_Union_of_directed {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮท : Type u_3} {s : ฮท โ†’ set E} (hs : directed has_subset.subset s) (h : โˆ€ (i : ฮท), orthonormal ๐•œ (ฮป (x : โ†ฅ(s i)), โ†‘x)) :
orthonormal ๐•œ (ฮป (x : โ†ฅโ‹ƒ (i : ฮท), s i), โ†‘x)
theorem orthonormal_sUnion_of_directed {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {s : set (set E)} (hs : directed_on has_subset.subset s) (h : โˆ€ (a : set E), a โˆˆ s โ†’ orthonormal ๐•œ (ฮป (x : โ†ฅa), โ†‘x)) :
orthonormal ๐•œ (ฮป (x : โ†ฅโ‹ƒโ‚€s), โ†‘x)
theorem exists_maximal_orthonormal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {s : set E} (hs : orthonormal ๐•œ coe) :
โˆƒ (w : set E) (H : w โŠ‡ s), orthonormal ๐•œ coe โˆง โˆ€ (u : set E), u โŠ‡ w โ†’ orthonormal ๐•œ coe โ†’ u = w

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

theorem orthonormal.ne_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_4} {v : ฮน โ†’ E} (hv : orthonormal ๐•œ v) (i : ฮน) :
v i โ‰  0
theorem is_basis_of_orthonormal_of_card_eq_findim {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_4} [fintype ฮน] [nonempty ฮน] {v : ฮน โ†’ E} (hv : orthonormal ๐•œ v) (card_eq : fintype.card ฮน = finite_dimensional.findim ๐•œ E) :
is_basis ๐•œ v
theorem norm_eq_sqrt_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (x : E) :
theorem inner_self_eq_norm_square {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (x : E) :
theorem norm_add_pow_two {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :

Expand the square

theorem norm_add_pow_two_real {F : Type u_3} [inner_product_space โ„ F] {x y : F} :

Expand the square

theorem norm_add_mul_self {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :

Expand the square

theorem norm_sub_pow_two {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :

Expand the square

theorem norm_sub_pow_two_real {F : Type u_3} [inner_product_space โ„ F] {x y : F} :

Expand the square

theorem norm_sub_mul_self {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x y : E} :

Expand the square

theorem abs_inner_le_norm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (x y : E) :

Cauchyโ€“Schwarz inequality with norm

Cauchyโ€“Schwarz inequality with norm

Cauchyโ€“Schwarz inequality with norm

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} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (x y : E) :

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

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

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

@[simp]
theorem linear_isometry.inner_map_map {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {E' : Type u_4} [inner_product_space ๐•œ E'] (f : E โ†’โ‚—แตข[๐•œ] E') (x y : E) :
inner (โ‡‘f x) (โ‡‘f y) = inner x y

A linear isometry preserves the inner product.

@[simp]
theorem linear_isometry_equiv.inner_map_map {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {E' : Type u_4} [inner_product_space ๐•œ E'] (f : E โ‰ƒโ‚—แตข[๐•œ] E') (x y : E) :
inner (โ‡‘f x) (โ‡‘f y) = inner x y

A linear isometric equivalence preserves the inner product.

def linear_map.isometry_of_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {E' : Type u_4} [inner_product_space ๐•œ E'] (f : E โ†’โ‚—[๐•œ] E') (h : โˆ€ (x y : E), inner (โ‡‘f x) (โ‡‘f y) = inner x y) :

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

Equations
@[simp]
theorem linear_map.coe_isometry_of_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {E' : Type u_4} [inner_product_space ๐•œ E'] (f : E โ†’โ‚—[๐•œ] E') (h : โˆ€ (x y : E), inner (โ‡‘f x) (โ‡‘f y) = inner x y) :
@[simp]
theorem linear_map.isometry_of_inner_to_linear_map {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {E' : Type u_4} [inner_product_space ๐•œ E'] (f : E โ†’โ‚—[๐•œ] E') (h : โˆ€ (x y : E), inner (โ‡‘f x) (โ‡‘f y) = inner x y) :
def linear_equiv.isometry_of_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {E' : Type u_4} [inner_product_space ๐•œ E'] (f : E โ‰ƒโ‚—[๐•œ] E') (h : โˆ€ (x y : E), inner (โ‡‘f x) (โ‡‘f y) = inner x y) :

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

Equations
@[simp]
theorem linear_equiv.coe_isometry_of_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {E' : Type u_4} [inner_product_space ๐•œ E'] (f : E โ‰ƒโ‚—[๐•œ] E') (h : โˆ€ (x y : E), inner (โ‡‘f x) (โ‡‘f y) = inner x y) :
@[simp]
theorem linear_equiv.isometry_of_inner_to_linear_equiv {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {E' : Type u_4} [inner_product_space ๐•œ E'] (f : E โ‰ƒโ‚—[๐•œ] E') (h : โˆ€ (x y : E), inner (โ‡‘f x) (โ‡‘f y) = inner x y) :

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

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

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, vector inner product form.

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

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

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

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

theorem abs_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_ne_zero_mul {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {x : E} {r : ๐•œ} (hx : x โ‰  0) (hr : r โ‰  0) :

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

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

The inner product of a nonzero vector with a positive multiple of itself, divided by the product of their norms, has value 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 abs_inner_div_norm_mul_norm_eq_one_iff {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (x y : E) :

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.

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_inner_eq_norm_iff {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (x y : E) (hx0 : x โ‰  0) (hy0 : y โ‰  0) :

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โˆฅ.

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.

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.

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 abs_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 abs_inner_eq_norm_iff, which takes the weaker hypothesis abs โŸชx, yโŸซ = โˆฅxโˆฅ * โˆฅyโˆฅ.

theorem inner_eq_norm_mul_iff_of_norm_one {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ 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} [inner_product_space โ„ F] {x y : F} (hx : โˆฅxโˆฅ = 1) (hy : โˆฅyโˆฅ = 1) :

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 inner_sum_smul_sum_smul_of_sum_eq_zero {F : Type u_3} [inner_product_space โ„ F] {ฮนโ‚ : Type u_1} {sโ‚ : finset ฮนโ‚} {wโ‚ : ฮนโ‚ โ†’ โ„} (vโ‚ : ฮนโ‚ โ†’ F) (hโ‚ : โˆ‘ (i : ฮนโ‚) in sโ‚, wโ‚ i = 0) {ฮนโ‚‚ : Type u_2} {sโ‚‚ : finset ฮนโ‚‚} {wโ‚‚ : ฮนโ‚‚ โ†’ โ„} (vโ‚‚ : ฮนโ‚‚ โ†’ F) (hโ‚‚ : โˆ‘ (i : ฮนโ‚‚) in sโ‚‚, wโ‚‚ i = 0) :
inner (โˆ‘ (iโ‚ : ฮนโ‚) in sโ‚, wโ‚ iโ‚ โ€ข vโ‚ iโ‚) (โˆ‘ (iโ‚‚ : ฮนโ‚‚) in sโ‚‚, wโ‚‚ iโ‚‚ โ€ข vโ‚‚ iโ‚‚) = (-โˆ‘ (iโ‚ : ฮนโ‚) in sโ‚, โˆ‘ (iโ‚‚ : ฮนโ‚‚) in 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.

def inner_right {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (v : E) :
E โ†’L[๐•œ] ๐•œ

The inner product with a fixed left element, as a continuous linear map. This can be upgraded to a continuous map which is jointly conjugate-linear in the left argument and linear in the right argument, once (TODO) conjugate-linear maps have been defined.

Equations
@[simp]
theorem inner_right_coe {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (v : E) :
โ‡‘(inner_right v) = ฮป (w : E), inner v w
@[simp]
theorem inner_right_apply {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (v w : E) :

Inner product space structure on product spaces #

@[instance]
def pi_Lp.inner_product_space {๐•œ : Type u_1} [is_R_or_C ๐•œ] {ฮน : Type u_2} [fintype ฮน] (f : ฮน โ†’ Type u_3) [ฮ  (i : ฮน), inner_product_space ๐•œ (f i)] :
Equations
@[simp]
theorem pi_Lp.inner_apply {๐•œ : Type u_1} [is_R_or_C ๐•œ] {ฮน : Type u_2} [fintype ฮน] {f : ฮน โ†’ Type u_3} [ฮ  (i : ฮน), inner_product_space ๐•œ (f i)] (x y : pi_Lp 2 one_le_two f) :
inner x y = โˆ‘ (i : ฮน), inner (x i) (y i)
@[instance]
def is_R_or_C.inner_product_space {๐•œ : Type u_1} [is_R_or_C ๐•œ] :
inner_product_space ๐•œ ๐•œ

A field ๐•œ satisfying is_R_or_C is itself a ๐•œ-inner product space.

Equations
@[simp]
theorem is_R_or_C.inner_apply {๐•œ : Type u_1} [is_R_or_C ๐•œ] (x y : ๐•œ) :
@[nolint]
def euclidean_space (๐•œ : Type u_1) [is_R_or_C ๐•œ] (n : Type u_2) [fintype n] :
Type (max u_2 u_1)

The standard real/complex Euclidean space, functions on a finite type. For an n-dimensional space use euclidean_space ๐•œ (fin n).

Equations

Inner product space structure on subspaces #

@[instance]
def submodule.inner_product_space {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (W : submodule ๐•œ E) :

Induced inner product on a submodule.

Equations
@[simp]
theorem submodule.coe_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (W : submodule ๐•œ E) (x y : โ†ฅW) :

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

def has_inner.is_R_or_C_to_real (๐•œ : Type u_1) (E : Type u_2) [is_R_or_C ๐•œ] [inner_product_space ๐•œ 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
def inner_product_space.is_R_or_C_to_real (๐•œ : Type u_1) (E : Type u_2) [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] :

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
theorem real_inner_eq_re_inner (๐•œ : Type u_1) {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (x y : E) :
@[instance]

A complex inner product implies a real inner product

Equations

Derivative of the inner product #

In this section we prove that the inner product and square of the norm in an inner space are infinitely โ„-smooth. In order to state these results, we need a normed_space โ„ E instance. Though we can deduce this structure from inner_product_space ๐•œ E, this instance may be not definitionally equal to some other โ€œnaturalโ€ instance. So, we assume [normed_space โ„ E] and [is_scalar_tower โ„ ๐•œ E]. In both interesting cases ๐•œ = โ„ and ๐•œ = โ„‚ we have these instances.

theorem is_bounded_bilinear_map_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] :
def fderiv_inner_clm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] (p : E ร— E) :
E ร— E โ†’L[โ„] ๐•œ

Derivative of the inner product.

Equations
@[simp]
theorem fderiv_inner_clm_apply {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] (p x : E ร— E) :
theorem times_cont_diff_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {n : with_top โ„•} :
times_cont_diff โ„ n (ฮป (p : E ร— E), inner p.fst p.snd)
theorem times_cont_diff_at_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {p : E ร— E} {n : with_top โ„•} :
times_cont_diff_at โ„ n (ฮป (p : E ร— E), inner p.fst p.snd) p
theorem differentiable_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] :
differentiable โ„ (ฮป (p : E ร— E), inner p.fst p.snd)
theorem times_cont_diff_within_at.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {s : set G} {x : G} {n : with_top โ„•} (hf : times_cont_diff_within_at โ„ n f s x) (hg : times_cont_diff_within_at โ„ n g s x) :
times_cont_diff_within_at โ„ n (ฮป (x : G), inner (f x) (g x)) s x
theorem times_cont_diff_at.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {x : G} {n : with_top โ„•} (hf : times_cont_diff_at โ„ n f x) (hg : times_cont_diff_at โ„ n g x) :
times_cont_diff_at โ„ n (ฮป (x : G), inner (f x) (g x)) x
theorem times_cont_diff_on.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {s : set G} {n : with_top โ„•} (hf : times_cont_diff_on โ„ n f s) (hg : times_cont_diff_on โ„ n g s) :
times_cont_diff_on โ„ n (ฮป (x : G), inner (f x) (g x)) s
theorem times_cont_diff.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {n : with_top โ„•} (hf : times_cont_diff โ„ n f) (hg : times_cont_diff โ„ n g) :
times_cont_diff โ„ n (ฮป (x : G), inner (f x) (g x))
theorem has_fderiv_within_at.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {f' g' : G โ†’L[โ„] E} {s : set G} {x : G} (hf : has_fderiv_within_at f f' s x) (hg : has_fderiv_within_at g g' s x) :
has_fderiv_within_at (ฮป (t : G), inner (f t) (g t)) ((fderiv_inner_clm (f x, g x)).comp (f'.prod g')) s x
theorem has_fderiv_at.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {f' g' : G โ†’L[โ„] E} {x : G} (hf : has_fderiv_at f f' x) (hg : has_fderiv_at g g' x) :
has_fderiv_at (ฮป (t : G), inner (f t) (g t)) ((fderiv_inner_clm (f x, g x)).comp (f'.prod g')) x
theorem has_deriv_within_at.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {f g : โ„ โ†’ E} {f' g' : E} {s : set โ„} {x : โ„} (hf : has_deriv_within_at f f' s x) (hg : has_deriv_within_at g g' s x) :
has_deriv_within_at (ฮป (t : โ„), inner (f t) (g t)) (inner (f x) g' + inner f' (g x)) s x
theorem has_deriv_at.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {f g : โ„ โ†’ E} {f' g' : E} {x : โ„} :
has_deriv_at f f' x โ†’ has_deriv_at g g' x โ†’ has_deriv_at (ฮป (t : โ„), inner (f t) (g t)) (inner (f x) g' + inner f' (g x)) x
theorem differentiable_within_at.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {s : set G} {x : G} (hf : differentiable_within_at โ„ f s x) (hg : differentiable_within_at โ„ g s x) :
differentiable_within_at โ„ (ฮป (x : G), inner (f x) (g x)) s x
theorem differentiable_at.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {x : G} (hf : differentiable_at โ„ f x) (hg : differentiable_at โ„ g x) :
differentiable_at โ„ (ฮป (x : G), inner (f x) (g x)) x
theorem differentiable_on.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {s : set G} (hf : differentiable_on โ„ f s) (hg : differentiable_on โ„ g s) :
differentiable_on โ„ (ฮป (x : G), inner (f x) (g x)) s
theorem differentiable.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} (hf : differentiable โ„ f) (hg : differentiable โ„ g) :
differentiable โ„ (ฮป (x : G), inner (f x) (g x))
theorem fderiv_inner_apply {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {x : G} (hf : differentiable_at โ„ f x) (hg : differentiable_at โ„ g x) (y : G) :
โ‡‘(fderiv โ„ (ฮป (t : G), inner (f t) (g t)) x) y = inner (f x) (โ‡‘(fderiv โ„ g x) y) + inner (โ‡‘(fderiv โ„ f x) y) (g x)
theorem deriv_inner_apply {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {f g : โ„ โ†’ E} {x : โ„} (hf : differentiable_at โ„ f x) (hg : differentiable_at โ„ g x) :
deriv (ฮป (t : โ„), inner (f t) (g t)) x = inner (f x) (deriv g x) + inner (deriv f x) (g x)
theorem times_cont_diff_norm_square {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {n : with_top โ„•} :
times_cont_diff โ„ n (ฮป (x : E), โˆฅxโˆฅ ^ 2)
theorem times_cont_diff.norm_square {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {n : with_top โ„•} (hf : times_cont_diff โ„ n f) :
times_cont_diff โ„ n (ฮป (x : G), โˆฅf xโˆฅ ^ 2)
theorem times_cont_diff_within_at.norm_square {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {s : set G} {x : G} {n : with_top โ„•} (hf : times_cont_diff_within_at โ„ n f s x) :
theorem times_cont_diff_at.norm_square {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {x : G} {n : with_top โ„•} (hf : times_cont_diff_at โ„ n f x) :
times_cont_diff_at โ„ n (ฮป (y : G), โˆฅf yโˆฅ ^ 2) x
theorem times_cont_diff_at_norm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {n : with_top โ„•} {x : E} (hx : x โ‰  0) :
theorem times_cont_diff_at.norm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {x : G} {n : with_top โ„•} (hf : times_cont_diff_at โ„ n f x) (h0 : f x โ‰  0) :
theorem times_cont_diff_at.dist {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {x : G} {n : with_top โ„•} (hf : times_cont_diff_at โ„ n f x) (hg : times_cont_diff_at โ„ n g x) (hne : f x โ‰  g x) :
times_cont_diff_at โ„ n (ฮป (y : G), dist (f y) (g y)) x
theorem times_cont_diff_within_at.norm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {s : set G} {x : G} {n : with_top โ„•} (hf : times_cont_diff_within_at โ„ n f s x) (h0 : f x โ‰  0) :
theorem times_cont_diff_within_at.dist {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {s : set G} {x : G} {n : with_top โ„•} (hf : times_cont_diff_within_at โ„ n f s x) (hg : times_cont_diff_within_at โ„ n g s x) (hne : f x โ‰  g x) :
times_cont_diff_within_at โ„ n (ฮป (y : G), dist (f y) (g y)) s x
theorem times_cont_diff_on.norm_square {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {s : set G} {n : with_top โ„•} (hf : times_cont_diff_on โ„ n f s) :
times_cont_diff_on โ„ n (ฮป (y : G), โˆฅf yโˆฅ ^ 2) s
theorem times_cont_diff_on.norm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {s : set G} {n : with_top โ„•} (hf : times_cont_diff_on โ„ n f s) (h0 : โˆ€ (x : G), x โˆˆ s โ†’ f x โ‰  0) :
theorem times_cont_diff_on.dist {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {s : set G} {n : with_top โ„•} (hf : times_cont_diff_on โ„ n f s) (hg : times_cont_diff_on โ„ n g s) (hne : โˆ€ (x : G), x โˆˆ s โ†’ f x โ‰  g x) :
times_cont_diff_on โ„ n (ฮป (y : G), dist (f y) (g y)) s
theorem times_cont_diff.norm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {n : with_top โ„•} (hf : times_cont_diff โ„ n f) (h0 : โˆ€ (x : G), f x โ‰  0) :
theorem times_cont_diff.dist {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {n : with_top โ„•} (hf : times_cont_diff โ„ n f) (hg : times_cont_diff โ„ n g) (hne : โˆ€ (x : G), f x โ‰  g x) :
times_cont_diff โ„ n (ฮป (y : G), dist (f y) (g y))
theorem differentiable_at.norm_square {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {x : G} (hf : differentiable_at โ„ f x) :
differentiable_at โ„ (ฮป (y : G), โˆฅf yโˆฅ ^ 2) x
theorem differentiable_at.norm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {x : G} (hf : differentiable_at โ„ f x) (h0 : f x โ‰  0) :
theorem differentiable_at.dist {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {x : G} (hf : differentiable_at โ„ f x) (hg : differentiable_at โ„ g x) (hne : f x โ‰  g x) :
differentiable_at โ„ (ฮป (y : G), dist (f y) (g y)) x
theorem differentiable.norm_square {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} (hf : differentiable โ„ f) :
differentiable โ„ (ฮป (y : G), โˆฅf yโˆฅ ^ 2)
theorem differentiable.norm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} (hf : differentiable โ„ f) (h0 : โˆ€ (x : G), f x โ‰  0) :
theorem differentiable.dist {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} (hf : differentiable โ„ f) (hg : differentiable โ„ g) (hne : โˆ€ (x : G), f x โ‰  g x) :
differentiable โ„ (ฮป (y : G), dist (f y) (g y))
theorem differentiable_within_at.norm_square {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {s : set G} {x : G} (hf : differentiable_within_at โ„ f s x) :
theorem differentiable_within_at.norm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {s : set G} {x : G} (hf : differentiable_within_at โ„ f s x) (h0 : f x โ‰  0) :
theorem differentiable_within_at.dist {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {s : set G} {x : G} (hf : differentiable_within_at โ„ f s x) (hg : differentiable_within_at โ„ g s x) (hne : f x โ‰  g x) :
differentiable_within_at โ„ (ฮป (y : G), dist (f y) (g y)) s x
theorem differentiable_on.norm_square {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {s : set G} (hf : differentiable_on โ„ f s) :
differentiable_on โ„ (ฮป (y : G), โˆฅf yโˆฅ ^ 2) s
theorem differentiable_on.norm {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f : G โ†’ E} {s : set G} (hf : differentiable_on โ„ f s) (h0 : โˆ€ (x : G), x โˆˆ s โ†’ f x โ‰  0) :
theorem differentiable_on.dist {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] [normed_space โ„ E] [is_scalar_tower โ„ ๐•œ E] {G : Type u_4} [normed_group G] [normed_space โ„ G] {f g : G โ†’ E} {s : set G} (hf : differentiable_on โ„ f s) (hg : differentiable_on โ„ g s) (hne : โˆ€ (x : G), x โˆˆ s โ†’ f x โ‰  g x) :
differentiable_on โ„ (ฮป (y : G), dist (f y) (g y)) s

Continuity and measurability of the inner product #

Since the inner product is โ„-smooth, it is continuous. We do not need a [normed_space โ„ E] structure to state this fact and its corollaries, so we introduce them in the proof instead.

theorem continuous_inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] :
continuous (ฮป (p : E ร— E), inner p.fst p.snd)
theorem filter.tendsto.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮฑ : Type u_4} {f g : ฮฑ โ†’ E} {l : filter ฮฑ} {x y : E} (hf : filter.tendsto f l (๐“ x)) (hg : filter.tendsto g l (๐“ y)) :
filter.tendsto (ฮป (t : ฮฑ), inner (f t) (g t)) l (๐“ (inner x y))
theorem measurable.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮฑ : Type u_4} [measurable_space ฮฑ] [measurable_space E] [opens_measurable_space E] [topological_space.second_countable_topology E] [measurable_space ๐•œ] [borel_space ๐•œ] {f g : ฮฑ โ†’ E} (hf : measurable f) (hg : measurable g) :
measurable (ฮป (t : ฮฑ), inner (f t) (g t))
theorem continuous_within_at.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮฑ : Type u_4} [topological_space ฮฑ] {f g : ฮฑ โ†’ E} {x : ฮฑ} {s : set ฮฑ} (hf : continuous_within_at f s x) (hg : continuous_within_at g s x) :
continuous_within_at (ฮป (t : ฮฑ), inner (f t) (g t)) s x
theorem continuous_at.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮฑ : Type u_4} [topological_space ฮฑ] {f g : ฮฑ โ†’ E} {x : ฮฑ} (hf : continuous_at f x) (hg : continuous_at g x) :
continuous_at (ฮป (t : ฮฑ), inner (f t) (g t)) x
theorem continuous_on.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮฑ : Type u_4} [topological_space ฮฑ] {f g : ฮฑ โ†’ E} {s : set ฮฑ} (hf : continuous_on f s) (hg : continuous_on g s) :
continuous_on (ฮป (t : ฮฑ), inner (f t) (g t)) s
theorem continuous.inner {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮฑ : Type u_4} [topological_space ฮฑ] {f g : ฮฑ โ†’ E} (hf : continuous f) (hg : continuous g) :
continuous (ฮป (t : ฮฑ), inner (f t) (g t))
@[instance]
def euclidean_space.finite_dimensional {๐•œ : Type u_1} [is_R_or_C ๐•œ] {ฮน : Type u_4} [fintype ฮน] :
finite_dimensional ๐•œ (euclidean_space ๐•œ ฮน)
@[instance]
def euclidean_space.inner_product_space {๐•œ : Type u_1} [is_R_or_C ๐•œ] {ฮน : Type u_4} [fintype ฮน] :
inner_product_space ๐•œ (euclidean_space ๐•œ ฮน)
Equations
@[simp]
theorem findim_euclidean_space {๐•œ : Type u_1} [is_R_or_C ๐•œ] {ฮน : Type u_4} [fintype ฮน] :
finite_dimensional.findim ๐•œ (euclidean_space ๐•œ ฮน) = fintype.card ฮน
theorem findim_euclidean_space_fin {๐•œ : Type u_1} [is_R_or_C ๐•œ] {n : โ„•} :
finite_dimensional.findim ๐•œ (euclidean_space ๐•œ (fin n)) = n
def is_basis.isometry_euclidean_of_orthonormal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_4} [fintype ฮน] {v : ฮน โ†’ E} (h : is_basis ๐•œ v) (hv : orthonormal ๐•œ v) :
E โ‰ƒโ‚—แตข[๐•œ] euclidean_space ๐•œ ฮน

An orthonormal basis on a fintype ฮน for an inner product space induces an isometry with euclidean_space ๐•œ ฮน.

Equations

Orthogonal projection in inner product spaces #

theorem exists_norm_eq_infi_of_complete_convex {F : Type u_3} [inner_product_space โ„ F] {K : set F} (ne : K.nonempty) (hโ‚ : is_complete K) (hโ‚‚ : convex K) (u : F) :
โˆƒ (v : F) (H : v โˆˆ K), โˆฅu - vโˆฅ = โจ… (w : โ†ฅK), โˆฅu - โ†‘wโˆฅ

Existence of minimizers Let u be a point in a real inner product space, and let K be a nonempty complete convex subset. Then there exists a (unique) v in K that minimizes the distance โˆฅu - vโˆฅ to u.

theorem norm_eq_infi_iff_real_inner_le_zero {F : Type u_3} [inner_product_space โ„ F] {K : set F} (h : convex K) {u v : F} (hv : v โˆˆ K) :
(โˆฅu - vโˆฅ = โจ… (w : โ†ฅK), โˆฅu - โ†‘wโˆฅ) โ†” โˆ€ (w : F), w โˆˆ K โ†’ inner (u - v) (w - v) โ‰ค 0

Characterization of minimizers for the projection on a convex set in a real inner product space.

theorem exists_norm_eq_infi_of_complete_subspace {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) (h : is_complete โ†‘K) (u : E) :
โˆƒ (v : E) (H : v โˆˆ K), โˆฅu - vโˆฅ = โจ… (w : โ†ฅโ†‘K), โˆฅu - โ†‘wโˆฅ

Existence of projections on complete subspaces. Let u be a point in an inner product space, and let K be a nonempty complete subspace. Then there exists a (unique) v in K that minimizes the distance โˆฅu - vโˆฅ to u. This point v is usually called the orthogonal projection of u onto K.

theorem norm_eq_infi_iff_real_inner_eq_zero {F : Type u_3} [inner_product_space โ„ F] (K : submodule โ„ F) {u v : F} (hv : v โˆˆ K) :
(โˆฅu - vโˆฅ = โจ… (w : โ†ฅโ†‘K), โˆฅu - โ†‘wโˆฅ) โ†” โˆ€ (w : F), w โˆˆ K โ†’ inner (u - v) w = 0

Characterization of minimizers in the projection on a subspace, in the real case. Let u be a point in a real inner product space, and let K be a nonempty subspace. Then point v minimizes the distance โˆฅu - vโˆฅ over points in K if and only if for all w โˆˆ K, โŸชu - v, wโŸซ = 0 (i.e., u - v is orthogonal to the subspace K). This is superceded by norm_eq_infi_iff_inner_eq_zero that gives the same conclusion over any is_R_or_C field.

theorem norm_eq_infi_iff_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) {u v : E} (hv : v โˆˆ K) :
(โˆฅu - vโˆฅ = โจ… (w : โ†ฅโ†‘K), โˆฅu - โ†‘wโˆฅ) โ†” โˆ€ (w : E), w โˆˆ K โ†’ inner (u - v) w = 0

Characterization of minimizers in the projection on a subspace. Let u be a point in an inner product space, and let K be a nonempty subspace. Then point v minimizes the distance โˆฅu - vโˆฅ over points in K if and only if for all w โˆˆ K, โŸชu - v, wโŸซ = 0 (i.e., u - v is orthogonal to the subspace K)

def orthogonal_projection_fn {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) [complete_space โ†ฅK] (v : E) :
E

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

Equations
theorem orthogonal_projection_fn_mem {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] (v : E) :

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

theorem orthogonal_projection_fn_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] (v w : E) (H : w โˆˆ K) :

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

theorem eq_orthogonal_projection_fn_of_mem_of_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] {u v : E} (hvm : v โˆˆ K) (hvo : โˆ€ (w : E), w โˆˆ K โ†’ inner (u - v) w = 0) :

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

def orthogonal_projection {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) [complete_space โ†ฅK] :
E โ†’L[๐•œ] โ†ฅK

The orthogonal projection onto a complete subspace.

Equations
@[simp]
theorem orthogonal_projection_fn_eq {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] (v : E) :
@[simp]
theorem orthogonal_projection_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] (v w : E) (H : w โˆˆ K) :

The characterization of the orthogonal projection.

theorem eq_orthogonal_projection_of_mem_of_inner_eq_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] {u v : E} (hvm : v โˆˆ K) (hvo : โˆ€ (w : E), w โˆˆ K โ†’ inner (u - v) w = 0) :

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

theorem eq_orthogonal_projection_of_eq_submodule {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] {K' : submodule ๐•œ E} [complete_space โ†ฅK'] (h : K = K') (u : E) :

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

@[simp]
theorem orthogonal_projection_mem_subspace_eq_self {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] (v : โ†ฅK) :

The orthogonal projection sends elements of K to themselves.

@[simp]
theorem orthogonal_projection_bot {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] :

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

theorem orthogonal_projection_norm_le {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) [complete_space โ†ฅK] :

The orthogonal projection has norm โ‰ค 1.

theorem smul_orthogonal_projection_singleton (๐•œ : Type u_1) {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {v : E} (w : E) :
theorem orthogonal_projection_singleton (๐•œ : Type u_1) {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {v : E} (w : E) :

Formula for orthogonal projection onto a single vector.

theorem orthogonal_projection_unit_singleton (๐•œ : Type u_1) {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {v : E} (hv : โˆฅvโˆฅ = 1) (w : E) :

Formula for orthogonal projection onto a single unit vector.

def submodule.orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) :
submodule ๐•œ E

The subspace of vectors orthogonal to a given subspace.

Equations
theorem submodule.mem_orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) (v : E) :
v โˆˆ Kแ—ฎ โ†” โˆ€ (u : E), u โˆˆ K โ†’ inner u v = 0

When a vector is in Kแ—ฎ.

theorem submodule.mem_orthogonal' {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) (v : E) :
v โˆˆ Kแ—ฎ โ†” โˆ€ (u : E), u โˆˆ K โ†’ inner v u = 0

When a vector is in Kแ—ฎ, with the inner product the other way round.

theorem submodule.inner_right_of_mem_orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} {u v : E} (hu : u โˆˆ K) (hv : v โˆˆ Kแ—ฎ) :
inner u v = 0

A vector in K is orthogonal to one in Kแ—ฎ.

theorem submodule.inner_left_of_mem_orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} {u v : E} (hu : u โˆˆ K) (hv : v โˆˆ Kแ—ฎ) :
inner v u = 0

A vector in Kแ—ฎ is orthogonal to one in K.

theorem inner_right_of_mem_orthogonal_singleton {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (u : E) {v : E} (hv : v โˆˆ (submodule.span ๐•œ {u})แ—ฎ) :
inner u v = 0

A vector in (๐•œ โˆ™ u)แ—ฎ is orthogonal to u.

theorem inner_left_of_mem_orthogonal_singleton {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (u : E) {v : E} (hv : v โˆˆ (submodule.span ๐•œ {u})แ—ฎ) :
inner v u = 0

A vector in (๐•œ โˆ™ u)แ—ฎ is orthogonal to u.

theorem submodule.inf_orthogonal_eq_bot {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) :

K and Kแ—ฎ have trivial intersection.

theorem submodule.orthogonal_disjoint {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) :

K and Kแ—ฎ have trivial intersection.

theorem orthogonal_eq_inter {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) :
Kแ—ฎ = โจ… (v : โ†ฅK), (inner_right โ†‘v).ker

Kแ—ฎ can be characterized as the intersection of the kernels of the operations of inner product with each of the elements of K.

theorem submodule.is_closed_orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) :

The orthogonal complement of any submodule K is closed.

@[instance]
def submodule.orthogonal.complete_space {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) [complete_space E] :

In a complete space, the orthogonal complement of any submodule K is complete.

theorem submodule.orthogonal_gc (๐•œ : Type u_1) (E : Type u_2) [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] :

submodule.orthogonal gives a galois_connection between submodule ๐•œ E and its order_dual.

theorem submodule.orthogonal_le {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {Kโ‚ Kโ‚‚ : submodule ๐•œ E} (h : Kโ‚ โ‰ค Kโ‚‚) :
Kโ‚‚แ—ฎ โ‰ค Kโ‚แ—ฎ

submodule.orthogonal reverses the โ‰ค ordering of two subspaces.

theorem submodule.orthogonal_orthogonal_monotone {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {Kโ‚ Kโ‚‚ : submodule ๐•œ E} (h : Kโ‚ โ‰ค Kโ‚‚) :

submodule.orthogonal.orthogonal preserves the โ‰ค ordering of two subspaces.

theorem submodule.le_orthogonal_orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) :

K is contained in Kแ—ฎแ—ฎ.

theorem submodule.inf_orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (Kโ‚ Kโ‚‚ : submodule ๐•œ E) :
Kโ‚แ—ฎ โŠ“ Kโ‚‚แ—ฎ = (Kโ‚ โŠ” Kโ‚‚)แ—ฎ

The inf of two orthogonal subspaces equals the subspace orthogonal to the sup.

theorem submodule.infi_orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {ฮน : Type u_3} (K : ฮน โ†’ submodule ๐•œ E) :
(โจ… (i : ฮน), (K i)แ—ฎ) = (supr K)แ—ฎ

The inf of an indexed family of orthogonal subspaces equals the subspace orthogonal to the sup.

theorem submodule.Inf_orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (s : set (submodule ๐•œ E)) :
(โจ… (K : submodule ๐•œ E) (H : K โˆˆ s), Kแ—ฎ) = (Sup s)แ—ฎ

The inf of a set of orthogonal subspaces equals the subspace orthogonal to the sup.

theorem submodule.sup_orthogonal_inf_of_is_complete {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {Kโ‚ Kโ‚‚ : submodule ๐•œ E} (h : Kโ‚ โ‰ค Kโ‚‚) (hc : is_complete โ†‘Kโ‚) :
Kโ‚ โŠ” Kโ‚แ—ฎ โŠ“ Kโ‚‚ = Kโ‚‚

If Kโ‚ is complete and contained in Kโ‚‚, Kโ‚ and Kโ‚แ—ฎ โŠ“ Kโ‚‚ span Kโ‚‚.

theorem submodule.sup_orthogonal_of_is_complete {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} (h : is_complete โ†‘K) :

If K is complete, K and Kแ—ฎ span the whole space.

theorem submodule.sup_orthogonal_of_complete_space {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] :

If K is complete, K and Kแ—ฎ span the whole space. Version using complete_space.

theorem submodule.exists_sum_mem_mem_orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) [complete_space โ†ฅK] (v : E) :
โˆƒ (y : E) (H : y โˆˆ K) (z : E) (H : z โˆˆ Kแ—ฎ), v = y + z

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

@[simp]
theorem submodule.orthogonal_orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) [complete_space โ†ฅK] :

If K is complete, then the orthogonal complement of its orthogonal complement is itself.

theorem submodule.orthogonal_orthogonal_eq_closure {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] (K : submodule ๐•œ E) [complete_space E] :
theorem submodule.is_compl_orthogonal_of_is_complete {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} (h : is_complete โ†‘K) :

If K is complete, K and Kแ—ฎ are complements of each other.

@[simp]
theorem submodule.top_orthogonal_eq_bot {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] :
@[simp]
theorem submodule.bot_orthogonal_eq_top {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] :
@[simp]
theorem submodule.orthogonal_eq_bot_iff {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} (hK : is_complete โ†‘K) :
@[simp]
theorem submodule.orthogonal_eq_top_iff {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} :
theorem eq_orthogonal_projection_of_mem_orthogonal {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] {u v : E} (hv : v โˆˆ K) (hvo : u - v โˆˆ Kแ—ฎ) :

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

theorem eq_orthogonal_projection_of_mem_orthogonal' {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] {u v z : E} (hv : v โˆˆ K) (hz : z โˆˆ Kแ—ฎ) (hu : u = v + z) :

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

theorem orthogonal_projection_mem_subspace_orthogonal_complement_eq_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space โ†ฅK] {v : E} (hv : v โˆˆ Kแ—ฎ) :

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

theorem orthogonal_projection_mem_subspace_orthogonal_precomplement_eq_zero {๐•œ : Type u_1} {E : Type u_2} [is_R_or_C ๐•œ] [inner_product_space ๐•œ E] {K : submodule ๐•œ E} [complete_space E] {v : E} (hv : v โˆˆ K) :

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