# Sesquilinear maps #

This files provides properties about sesquilinear maps and forms. The maps considered are of the form M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M, where I₁ : R₁ →+* R and I₂ : R₂ →+* R are ring homomorphisms and M₁ is a module over R₁, M₂ is a module over R₂ and M is a module over R. Sesquilinear forms are the special case that M₁ = M₂, M = R₁ = R₂ = R, and I₁ = RingHom.id R. Taking additionally I₂ = RingHom.id R, then one obtains bilinear forms.

These forms are a special case of the bilinear maps defined in BilinearMap.lean and all basic lemmas about construction and elementary calculations are found there.

## Main declarations #

• IsOrtho: states that two vectors are orthogonal with respect to a sesquilinear map
• IsSymm, IsAlt: states that a sesquilinear form is symmetric and alternating, respectively
• orthogonalBilin: provides the orthogonal complement with respect to sesquilinear form

## Tags #

Sesquilinear form, Sesquilinear map,

### Orthogonal vectors #

def LinearMap.IsOrtho {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] [] [Module R M] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M) (x : M₁) (y : M₂) :

The proposition that two elements of a sesquilinear map space are orthogonal

Equations
• B.IsOrtho x y = ((B x) y = 0)
Instances For
theorem LinearMap.isOrtho_def {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] [] [Module R M] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M} {x : M₁} {y : M₂} :
B.IsOrtho x y (B x) y = 0
theorem LinearMap.isOrtho_zero_left {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] [] [Module R M] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M) (x : M₂) :
B.IsOrtho 0 x
theorem LinearMap.isOrtho_zero_right {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] [] [Module R M] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M) (x : M₁) :
B.IsOrtho x 0
theorem LinearMap.isOrtho_flip {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [] [Module R₁ M₁] [] [Module R M] {I₁ : R₁ →+* R} {I₁' : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₁'] M} {x : M₁} {y : M₁} :
B.IsOrtho x y B.flip.IsOrtho y x
def LinearMap.IsOrthoᵢ {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} {n : Type u_19} [] [] [] [Module R₁ M₁] [] [Module R M] {I₁ : R₁ →+* R} {I₁' : R₁ →+* R} (B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₁'] M) (v : nM₁) :

A set of vectors v is orthogonal with respect to some bilinear map B if and only if for all i ≠ j, B (v i) (v j) = 0. For orthogonality between two elements, use BilinForm.isOrtho

Equations
Instances For
theorem LinearMap.isOrthoᵢ_def {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} {n : Type u_19} [] [] [] [Module R₁ M₁] [] [Module R M] {I₁ : R₁ →+* R} {I₁' : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₁'] M} {v : nM₁} :
B.IsOrthoᵢ v ∀ (i j : n), i j(B (v i)) (v j) = 0
theorem LinearMap.isOrthoᵢ_flip {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} {n : Type u_19} [] [] [] [Module R₁ M₁] [] [Module R M] {I₁ : R₁ →+* R} {I₁' : R₁ →+* R} (B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₁'] M) {v : nM₁} :
B.IsOrthoᵢ v B.flip.IsOrthoᵢ v
theorem LinearMap.ortho_smul_left {K : Type u_13} {K₁ : Type u_14} {K₂ : Type u_15} {V : Type u_16} {V₁ : Type u_17} {V₂ : Type u_18} [] [] [Module K V] [Field K₁] [] [Module K₁ V₁] [Field K₂] [] [Module K₂ V₂] {I₁ : K₁ →+* K} {I₂ : K₂ →+* K} {B : V₁ →ₛₗ[I₁] V₂ →ₛₗ[I₂] V} {x : V₁} {y : V₂} {a : K₁} (ha : a 0) :
B.IsOrtho x y B.IsOrtho (a x) y
theorem LinearMap.ortho_smul_right {K : Type u_13} {K₁ : Type u_14} {K₂ : Type u_15} {V : Type u_16} {V₁ : Type u_17} {V₂ : Type u_18} [] [] [Module K V] [Field K₁] [] [Module K₁ V₁] [Field K₂] [] [Module K₂ V₂] {I₁ : K₁ →+* K} {I₂ : K₂ →+* K} {B : V₁ →ₛₗ[I₁] V₂ →ₛₗ[I₂] V} {x : V₁} {y : V₂} {a : K₂} {ha : a 0} :
B.IsOrtho x y B.IsOrtho x (a y)
theorem LinearMap.linearIndependent_of_isOrthoᵢ {K : Type u_13} {K₁ : Type u_14} {V : Type u_16} {V₁ : Type u_17} {n : Type u_19} [] [] [Module K V] [Field K₁] [] [Module K₁ V₁] {I₁ : K₁ →+* K} {I₁' : K₁ →+* K} {B : V₁ →ₛₗ[I₁] V₁ →ₛₗ[I₁'] V} {v : nV₁} (hv₁ : B.IsOrthoᵢ v) (hv₂ : ∀ (i : n), ¬B.IsOrtho (v i) (v i)) :

A set of orthogonal vectors v with respect to some sesquilinear map B is linearly independent if for all i, B (v i) (v i) ≠ 0.

### Reflexive bilinear maps #

def LinearMap.IsRefl {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} (B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M) :

The proposition that a sesquilinear map is reflexive

Equations
• B.IsRefl = ∀ (x y : M₁), (B x) y = 0(B y) x = 0
Instances For
theorem LinearMap.IsRefl.eq_zero {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} (H : B.IsRefl) {x : M₁} {y : M₁} :
(B x) y = 0(B y) x = 0
theorem LinearMap.IsRefl.ortho_comm {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} (H : B.IsRefl) {x : M₁} {y : M₁} :
B.IsOrtho x y B.IsOrtho y x
theorem LinearMap.IsRefl.domRestrict {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} (H : B.IsRefl) (p : Submodule R₁ M₁) :
(B.domRestrict₁₂ p p).IsRefl
@[simp]
theorem LinearMap.IsRefl.flip_isRefl_iff {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} :
B.flip.IsRefl B.IsRefl
theorem LinearMap.IsRefl.ker_flip_eq_bot {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} (H : B.IsRefl) (h : ) :
theorem LinearMap.IsRefl.ker_eq_bot_iff_ker_flip_eq_bot {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} (H : B.IsRefl) :

### Symmetric bilinear forms #

def LinearMap.IsSymm {R : Type u_1} {M : Type u_5} [] [] [Module R M] {I : R →+* R} (B : M →ₛₗ[I] M →ₗ[R] R) :

The proposition that a sesquilinear form is symmetric

Equations
• B.IsSymm = ∀ (x y : M), I ((B x) y) = (B y) x
Instances For
theorem LinearMap.IsSymm.eq {R : Type u_1} {M : Type u_5} [] [] [Module R M] {I : R →+* R} {B : M →ₛₗ[I] M →ₗ[R] R} (H : B.IsSymm) (x : M) (y : M) :
I ((B x) y) = (B y) x
theorem LinearMap.IsSymm.isRefl {R : Type u_1} {M : Type u_5} [] [] [Module R M] {I : R →+* R} {B : M →ₛₗ[I] M →ₗ[R] R} (H : B.IsSymm) :
B.IsRefl
theorem LinearMap.IsSymm.ortho_comm {R : Type u_1} {M : Type u_5} [] [] [Module R M] {I : R →+* R} {B : M →ₛₗ[I] M →ₗ[R] R} (H : B.IsSymm) {x : M} {y : M} :
B.IsOrtho x y B.IsOrtho y x
theorem LinearMap.IsSymm.domRestrict {R : Type u_1} {M : Type u_5} [] [] [Module R M] {I : R →+* R} {B : M →ₛₗ[I] M →ₗ[R] R} (H : B.IsSymm) (p : ) :
(B.domRestrict₁₂ p p).IsSymm
@[simp]
theorem LinearMap.isSymm_zero {R : Type u_1} {M : Type u_5} [] [] [Module R M] {I : R →+* R} :
theorem LinearMap.isSymm_iff_eq_flip {R : Type u_1} {M : Type u_5} [] [] [Module R M] {B : } :

### Alternating bilinear maps #

def LinearMap.IsAlt {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} (B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M) :

The proposition that a sesquilinear map is alternating

Equations
• B.IsAlt = ∀ (x : M₁), (B x) x = 0
Instances For
theorem LinearMap.IsAlt.self_eq_zero {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} (H : B.IsAlt) (x : M₁) :
(B x) x = 0
theorem LinearMap.IsAlt.neg {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} (H : B.IsAlt) (x : M₁) (y : M₁) :
-(B x) y = (B y) x
theorem LinearMap.IsAlt.isRefl {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} (H : B.IsAlt) :
B.IsRefl
theorem LinearMap.IsAlt.ortho_comm {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [] [Module R₁ M₁] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} (H : B.IsAlt) {x : M₁} {y : M₁} :
B.IsOrtho x y B.IsOrtho y x
theorem LinearMap.isAlt_iff_eq_neg_flip {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [] [] [] [Module R₁ M₁] {I : R₁ →+* R} [] [] {B : M₁ →ₛₗ[I] M₁ →ₛₗ[I] R} :
B.IsAlt B = -B.flip

### The orthogonal complement #

def Submodule.orthogonalBilin {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [CommRing R₁] [] [Module R₁ M₁] [] [Module R M] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} (N : Submodule R₁ M₁) (B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M) :
Submodule R₁ M₁

The orthogonal complement of a submodule N with respect to some bilinear map is the set of elements x which are orthogonal to all elements of N; i.e., for all y in N, B x y = 0.

Note that for general (neither symmetric nor antisymmetric) bilinear maps this definition has a chirality; in addition to this "left" orthogonal complement one could define a "right" orthogonal complement for which, for all y in N, B y x = 0. This variant definition is not currently provided in mathlib.

Equations
• N.orthogonalBilin B = { carrier := {m : M₁ | nN, B.IsOrtho n m}, add_mem' := , zero_mem' := , smul_mem' := }
Instances For
@[simp]
theorem Submodule.mem_orthogonalBilin_iff {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [CommRing R₁] [] [Module R₁ M₁] [] [Module R M] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} {N : Submodule R₁ M₁} {m : M₁} :
m N.orthogonalBilin B nN, B.IsOrtho n m
theorem Submodule.orthogonalBilin_le {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [CommRing R₁] [] [Module R₁ M₁] [] [Module R M] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} {N : Submodule R₁ M₁} {L : Submodule R₁ M₁} (h : N L) :
L.orthogonalBilin B N.orthogonalBilin B
theorem Submodule.le_orthogonalBilin_orthogonalBilin {R : Type u_1} {R₁ : Type u_2} {M : Type u_5} {M₁ : Type u_6} [] [CommRing R₁] [] [Module R₁ M₁] [] [Module R M] {I₁ : R₁ →+* R} {I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] M} {N : Submodule R₁ M₁} (b : B.IsRefl) :
N (N.orthogonalBilin B).orthogonalBilin B
theorem LinearMap.span_singleton_inf_orthogonal_eq_bot {K : Type u_13} {K₁ : Type u_14} {V₁ : Type u_17} {V₂ : Type u_18} [] [Field K₁] [] [Module K₁ V₁] [] [Module K V₂] {J₁ : K₁ →+* K} {J₁' : K₁ →+* K} (B : V₁ →ₛₗ[J₁] V₁ →ₛₗ[J₁'] V₂) (x : V₁) (hx : ¬B.IsOrtho x x) :
Submodule.span K₁ {x} (Submodule.span K₁ {x}).orthogonalBilin B =
theorem LinearMap.orthogonal_span_singleton_eq_to_lin_ker {K : Type u_13} {V : Type u_16} {V₂ : Type u_18} [] [] [Module K V] [] [Module K V₂] {J : K →+* K} {B : V →ₗ[K] V →ₛₗ[J] V₂} (x : V) :
(Submodule.span K {x}).orthogonalBilin B = LinearMap.ker (B x)
theorem LinearMap.span_singleton_sup_orthogonal_eq_top {K : Type u_13} {V : Type u_16} [] [] [Module K V] {B : V →ₗ[K] V →ₗ[K] K} {x : V} (hx : ¬B.IsOrtho x x) :
Submodule.span K {x} (Submodule.span K {x}).orthogonalBilin B =
theorem LinearMap.isCompl_span_singleton_orthogonal {K : Type u_13} {V : Type u_16} [] [] [Module K V] {B : V →ₗ[K] V →ₗ[K] K} {x : V} (hx : ¬B.IsOrtho x x) :
IsCompl (Submodule.span K {x}) ((Submodule.span K {x}).orthogonalBilin B)

Given a bilinear form B and some x such that B x x ≠ 0, the span of the singleton of x is complement to its orthogonal complement.

def LinearMap.IsAdjointPair {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {M₃ : Type u_8} [] [] [Module R M] [] [Module R M₁] [] [Module R M₃] {I : R →+* R} (B : M →ₗ[R] M →ₛₗ[I] M₃) (B' : M₁ →ₗ[R] M₁ →ₛₗ[I] M₃) (f : M →ₗ[R] M₁) (g : M₁ →ₗ[R] M) :

Given a pair of modules equipped with bilinear maps, this is the condition for a pair of maps between them to be mutually adjoint.

Equations
• B.IsAdjointPair B' f g = ∀ (x : M) (y : M₁), (B' (f x)) y = (B x) (g y)
Instances For
theorem LinearMap.isAdjointPair_iff_comp_eq_compl₂ {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {M₃ : Type u_8} [] [] [Module R M] [] [Module R M₁] [] [Module R M₃] {I : R →+* R} {B : M →ₗ[R] M →ₛₗ[I] M₃} {B' : M₁ →ₗ[R] M₁ →ₛₗ[I] M₃} {f : M →ₗ[R] M₁} {g : M₁ →ₗ[R] M} :
B.IsAdjointPair B' f g B' ∘ₗ f = B.compl₂ g
theorem LinearMap.isAdjointPair_zero {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {M₃ : Type u_8} [] [] [Module R M] [] [Module R M₁] [] [Module R M₃] {I : R →+* R} {B : M →ₗ[R] M →ₛₗ[I] M₃} {B' : M₁ →ₗ[R] M₁ →ₛₗ[I] M₃} :
theorem LinearMap.isAdjointPair_id {R : Type u_1} {M : Type u_5} {M₃ : Type u_8} [] [] [Module R M] [] [Module R M₃] {I : R →+* R} {B : M →ₗ[R] M →ₛₗ[I] M₃} :
theorem LinearMap.IsAdjointPair.add {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {M₃ : Type u_8} [] [] [Module R M] [] [Module R M₁] [] [Module R M₃] {I : R →+* R} {B : M →ₗ[R] M →ₛₗ[I] M₃} {B' : M₁ →ₗ[R] M₁ →ₛₗ[I] M₃} {f : M →ₗ[R] M₁} {f' : M →ₗ[R] M₁} {g : M₁ →ₗ[R] M} {g' : M₁ →ₗ[R] M} (h : B.IsAdjointPair B' f g) (h' : B.IsAdjointPair B' f' g') :
B.IsAdjointPair B' (f + f') (g + g')
theorem LinearMap.IsAdjointPair.comp {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} {M₃ : Type u_8} [] [] [Module R M] [] [Module R M₁] [] [Module R M₂] [] [Module R M₃] {I : R →+* R} {B : M →ₗ[R] M →ₛₗ[I] M₃} {B' : M₁ →ₗ[R] M₁ →ₛₗ[I] M₃} {B'' : M₂ →ₗ[R] M₂ →ₛₗ[I] M₃} {f : M →ₗ[R] M₁} {g : M₁ →ₗ[R] M} {f' : M₁ →ₗ[R] M₂} {g' : M₂ →ₗ[R] M₁} (h : B.IsAdjointPair B' f g) (h' : B'.IsAdjointPair B'' f' g') :
B.IsAdjointPair B'' (f' ∘ₗ f) (g ∘ₗ g')
theorem LinearMap.IsAdjointPair.mul {R : Type u_1} {M : Type u_5} {M₃ : Type u_8} [] [] [Module R M] [] [Module R M₃] {I : R →+* R} {B : M →ₗ[R] M →ₛₗ[I] M₃} {f : } {g : } {f' : } {g' : } (h : B.IsAdjointPair B f g) (h' : B.IsAdjointPair B f' g') :
B.IsAdjointPair B (f * f') (g' * g)
theorem LinearMap.IsAdjointPair.sub {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [Module R M₁] [] [Module R M₂] {B : M →ₗ[R] M →ₗ[R] M₂} {B' : M₁ →ₗ[R] M₁ →ₗ[R] M₂} {f : M →ₗ[R] M₁} {f' : M →ₗ[R] M₁} {g : M₁ →ₗ[R] M} {g' : M₁ →ₗ[R] M} (h : B.IsAdjointPair B' f g) (h' : B.IsAdjointPair B' f' g') :
B.IsAdjointPair B' (f - f') (g - g')
theorem LinearMap.IsAdjointPair.smul {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [Module R M₁] [] [Module R M₂] {B : M →ₗ[R] M →ₗ[R] M₂} {B' : M₁ →ₗ[R] M₁ →ₗ[R] M₂} {f : M →ₗ[R] M₁} {g : M₁ →ₗ[R] M} (c : R) (h : B.IsAdjointPair B' f g) :
B.IsAdjointPair B' (c f) (c g)

def LinearMap.IsPairSelfAdjoint {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [Module R M₁] {I : R →+* R} (B : M →ₗ[R] M →ₛₗ[I] M₁) (F : M →ₗ[R] M →ₛₗ[I] M₁) (f : ) :

The condition for an endomorphism to be "self-adjoint" with respect to a pair of bilinear maps on the underlying module. In the case that these two maps are identical, this is the usual concept of self adjointness. In the case that one of the maps is the negation of the other, this is the usual concept of skew adjointness.

Equations
Instances For
def LinearMap.IsSelfAdjoint {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [Module R M₁] {I : R →+* R} (B : M →ₗ[R] M →ₛₗ[I] M₁) (f : ) :

An endomorphism of a module is self-adjoint with respect to a bilinear map if it serves as an adjoint for itself.

Equations
Instances For
def LinearMap.isPairSelfAdjointSubmodule {R : Type u_1} {M : Type u_5} {M₂ : Type u_7} [] [] [Module R M] [] [Module R M₂] (B : M →ₗ[R] M →ₗ[R] M₂) (F : M →ₗ[R] M →ₗ[R] M₂) :

The set of pair-self-adjoint endomorphisms are a submodule of the type of all endomorphisms.

Equations
• B.isPairSelfAdjointSubmodule F = { carrier := {f : | B.IsPairSelfAdjoint F f}, add_mem' := , zero_mem' := , smul_mem' := }
Instances For
def LinearMap.IsSkewAdjoint {R : Type u_1} {M : Type u_5} {M₂ : Type u_7} [] [] [Module R M] [] [Module R M₂] (B : M →ₗ[R] M →ₗ[R] M₂) (f : ) :

An endomorphism of a module is skew-adjoint with respect to a bilinear map if its negation serves as an adjoint.

Equations
Instances For
def LinearMap.selfAdjointSubmodule {R : Type u_1} {M : Type u_5} {M₂ : Type u_7} [] [] [Module R M] [] [Module R M₂] (B : M →ₗ[R] M →ₗ[R] M₂) :

The set of self-adjoint endomorphisms of a module with bilinear map is a submodule. (In fact it is a Jordan subalgebra.)

Equations
Instances For
def LinearMap.skewAdjointSubmodule {R : Type u_1} {M : Type u_5} {M₂ : Type u_7} [] [] [Module R M] [] [Module R M₂] (B : M →ₗ[R] M →ₗ[R] M₂) :

The set of skew-adjoint endomorphisms of a module with bilinear map is a submodule. (In fact it is a Lie subalgebra.)

Equations
Instances For
@[simp]
theorem LinearMap.mem_isPairSelfAdjointSubmodule {R : Type u_1} {M : Type u_5} {M₂ : Type u_7} [] [] [Module R M] [] [Module R M₂] {B : M →ₗ[R] M →ₗ[R] M₂} {F : M →ₗ[R] M →ₗ[R] M₂} (f : ) :
theorem LinearMap.isPairSelfAdjoint_equiv {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [Module R M₁] [] [Module R M₂] {B : M →ₗ[R] M →ₗ[R] M₂} {F : M →ₗ[R] M →ₗ[R] M₂} (e : M₁ ≃ₗ[R] M) (f : ) :
theorem LinearMap.isSkewAdjoint_iff_neg_self_adjoint {R : Type u_1} {M : Type u_5} {M₂ : Type u_7} [] [] [Module R M] [] [Module R M₂] {B : M →ₗ[R] M →ₗ[R] M₂} (f : ) :
@[simp]
theorem LinearMap.mem_selfAdjointSubmodule {R : Type u_1} {M : Type u_5} {M₂ : Type u_7} [] [] [Module R M] [] [Module R M₂] {B : M →ₗ[R] M →ₗ[R] M₂} (f : ) :
@[simp]
theorem LinearMap.mem_skewAdjointSubmodule {R : Type u_1} {M : Type u_5} {M₂ : Type u_7} [] [] [Module R M] [] [Module R M₂] {B : M →ₗ[R] M →ₗ[R] M₂} (f : ) :

### Nondegenerate bilinear maps #

def LinearMap.SeparatingLeft {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M) :

A bilinear map is called left-separating if the only element that is left-orthogonal to every other element is 0; i.e., for every nonzero x in M₁, there exists y in M₂ with B x y ≠ 0.

Equations
• B.SeparatingLeft = ∀ (x : M₁), (∀ (y : M₂), (B x) y = 0)x = 0
Instances For
theorem LinearMap.not_separatingLeft_zero {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} (M₁ : Type u_6) (M₂ : Type u_7) [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] (I₁ : R₁ →+* R) (I₂ : R₂ →+* R) [] :

In a non-trivial module, zero is not non-degenerate.

theorem LinearMap.SeparatingLeft.ne_zero {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} [] {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M} (h : B.SeparatingLeft) :
B 0
theorem LinearMap.SeparatingLeft.congr {R : Type u_1} {M : Type u_5} {Mₗ₁ : Type u_9} {Mₗ₁' : Type u_10} {Mₗ₂ : Type u_11} {Mₗ₂' : Type u_12} [] [] [Module R M] [] [] [AddCommMonoid Mₗ₁'] [AddCommMonoid Mₗ₂'] [Module R Mₗ₁] [Module R Mₗ₂] [Module R Mₗ₁'] [Module R Mₗ₂'] {B : Mₗ₁ →ₗ[R] Mₗ₂ →ₗ[R] M} (e₁ : Mₗ₁ ≃ₗ[R] Mₗ₁') (e₂ : Mₗ₂ ≃ₗ[R] Mₗ₂') (h : B.SeparatingLeft) :
((e₁.arrowCongr (e₂.arrowCongr ())) B).SeparatingLeft
@[simp]
theorem LinearMap.separatingLeft_congr_iff {R : Type u_1} {M : Type u_5} {Mₗ₁ : Type u_9} {Mₗ₁' : Type u_10} {Mₗ₂ : Type u_11} {Mₗ₂' : Type u_12} [] [] [Module R M] [] [] [AddCommMonoid Mₗ₁'] [AddCommMonoid Mₗ₂'] [Module R Mₗ₁] [Module R Mₗ₂] [Module R Mₗ₁'] [Module R Mₗ₂'] {B : Mₗ₁ →ₗ[R] Mₗ₂ →ₗ[R] M} (e₁ : Mₗ₁ ≃ₗ[R] Mₗ₁') (e₂ : Mₗ₂ ≃ₗ[R] Mₗ₂') :
((e₁.arrowCongr (e₂.arrowCongr ())) B).SeparatingLeft B.SeparatingLeft
def LinearMap.SeparatingRight {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M) :

A bilinear map is called right-separating if the only element that is right-orthogonal to every other element is 0; i.e., for every nonzero y in M₂, there exists x in M₁ with B x y ≠ 0.

Equations
• B.SeparatingRight = ∀ (y : M₂), (∀ (x : M₁), (B x) y = 0)y = 0
Instances For
def LinearMap.Nondegenerate {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M) :

A bilinear map is called non-degenerate if it is left-separating and right-separating.

Equations
• B.Nondegenerate = (B.SeparatingLeft B.SeparatingRight)
Instances For
@[simp]
theorem LinearMap.flip_separatingRight {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M} :
B.flip.SeparatingRight B.SeparatingLeft
@[simp]
theorem LinearMap.flip_separatingLeft {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M} :
B.flip.SeparatingLeft B.SeparatingRight
@[simp]
theorem LinearMap.flip_nondegenerate {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M} :
B.flip.Nondegenerate B.Nondegenerate
theorem LinearMap.separatingLeft_iff_linear_nontrivial {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M} :
B.SeparatingLeft ∀ (x : M₁), B x = 0x = 0
theorem LinearMap.separatingRight_iff_linear_flip_nontrivial {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M} :
B.SeparatingRight ∀ (y : M₂), B.flip y = 0y = 0
theorem LinearMap.separatingLeft_iff_ker_eq_bot {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M} :
B.SeparatingLeft

A bilinear map is left-separating if and only if it has a trivial kernel.

theorem LinearMap.separatingRight_iff_flip_ker_eq_bot {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [] [] [Module R M] [] [] [Module R₁ M₁] [] [] [Module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] M} :
B.SeparatingRight LinearMap.ker B.flip =

A bilinear map is right-separating if and only if its flip has a trivial kernel.

theorem LinearMap.IsRefl.nondegenerate_of_separatingLeft {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [Module R M₁] {B : M →ₗ[R] M →ₗ[R] M₁} (hB : B.IsRefl) (hB' : B.SeparatingLeft) :
B.Nondegenerate
theorem LinearMap.IsRefl.nondegenerate_of_separatingRight {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [Module R M₁] {B : M →ₗ[R] M →ₗ[R] M₁} (hB : B.IsRefl) (hB' : B.SeparatingRight) :
B.Nondegenerate
theorem LinearMap.nondegenerate_restrict_of_disjoint_orthogonal {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [] [] [Module R M] [] [Module R M₁] {B : M →ₗ[R] M →ₗ[R] M₁} (hB : B.IsRefl) {W : } (hW : Disjoint W (W.orthogonalBilin B)) :
(B.domRestrict₁₂ W W).Nondegenerate

The restriction of a reflexive bilinear map B onto a submodule W is nondegenerate if W has trivial intersection with its orthogonal complement, that is Disjoint W (W.orthogonalBilin B).

theorem LinearMap.IsOrthoᵢ.not_isOrtho_basis_self_of_separatingLeft {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {n : Type u_19} [] [] [Module R M] [] [Module R M₁] {I : R →+* R} {I' : R →+* R} [] {B : M →ₛₗ[I] M →ₛₗ[I'] M₁} {v : Basis n R M} (h : B.IsOrthoᵢ v) (hB : B.SeparatingLeft) (i : n) :
¬B.IsOrtho (v i) (v i)

An orthogonal basis with respect to a left-separating bilinear map has no self-orthogonal elements.

theorem LinearMap.IsOrthoᵢ.not_isOrtho_basis_self_of_separatingRight {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {n : Type u_19} [] [] [Module R M] [] [Module R M₁] {I : R →+* R} {I' : R →+* R} [] {B : M →ₛₗ[I] M →ₛₗ[I'] M₁} {v : Basis n R M} (h : B.IsOrthoᵢ v) (hB : B.SeparatingRight) (i : n) :
¬B.IsOrtho (v i) (v i)

An orthogonal basis with respect to a right-separating bilinear map has no self-orthogonal elements.

theorem LinearMap.IsOrthoᵢ.separatingLeft_of_not_isOrtho_basis_self {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {n : Type u_19} [] [] [Module R M] [] [Module R M₁] [] {B : M →ₗ[R] M →ₗ[R] M₁} (v : Basis n R M) (hO : B.IsOrthoᵢ v) (h : ∀ (i : n), ¬B.IsOrtho (v i) (v i)) :
B.SeparatingLeft

Given an orthogonal basis with respect to a bilinear map, the bilinear map is left-separating if the basis has no elements which are self-orthogonal.

theorem LinearMap.IsOrthoᵢ.separatingRight_iff_not_isOrtho_basis_self {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {n : Type u_19} [] [] [Module R M] [] [Module R M₁] [] {B : M →ₗ[R] M →ₗ[R] M₁} (v : Basis n R M) (hO : B.IsOrthoᵢ v) (h : ∀ (i : n), ¬B.IsOrtho (v i) (v i)) :
B.SeparatingRight

Given an orthogonal basis with respect to a bilinear map, the bilinear map is right-separating if the basis has no elements which are self-orthogonal.

theorem LinearMap.IsOrthoᵢ.nondegenerate_of_not_isOrtho_basis_self {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {n : Type u_19} [] [] [Module R M] [] [Module R M₁] [] {B : M →ₗ[R] M →ₗ[R] M₁} (v : Basis n R M) (hO : B.IsOrthoᵢ v) (h : ∀ (i : n), ¬B.IsOrtho (v i) (v i)) :
B.Nondegenerate

Given an orthogonal basis with respect to a bilinear map, the bilinear map is nondegenerate if the basis has no elements which are self-orthogonal.