# mathlibdocumentation

linear_algebra.sesquilinear_form

# Sesquilinear form #

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

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

## Main declarations #

• is_ortho: states that two vectors are orthogonal with respect to a sesquilinear form
• is_symm, is_alt: states that a sesquilinear form is symmetric and alternating, respectively
• orthogonal_bilin: provides the orthogonal complement with respect to sesquilinear form

## Tags #

Sesquilinear form,

### Orthogonal vectors #

def linear_map.is_ortho {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R) (x : M₁) (y : M₂) :
Prop

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

Equations
theorem linear_map.is_ortho_def {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R} {x : M₁} {y : M₂} :
B.is_ortho x y (B x) y = 0
theorem linear_map.is_ortho_zero_left {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R) (x : M₂) :
B.is_ortho 0 x
theorem linear_map.is_ortho_zero_right {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R) (x : M₁) :
B.is_ortho x 0
theorem linear_map.is_ortho_flip {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₁' : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₁'] R} {x y : M₁} :
def linear_map.is_Ortho {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} {n : Type u_14} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₁' : R₁ →+* R} (B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₁'] R) (v : n → M₁) :
Prop

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

Equations
theorem linear_map.is_Ortho_def {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} {n : Type u_14} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₁' : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₁'] R} {v : n → M₁} :
B.is_Ortho v ∀ (i j : n), i j(B (v i)) (v j) = 0
theorem linear_map.is_Ortho_flip {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} {n : Type u_14} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₁' : R₁ →+* R} (B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₁'] R) {v : n → M₁} :
theorem linear_map.ortho_smul_left {K : Type u_8} {K₁ : Type u_9} {K₂ : Type u_10} {V₁ : Type u_12} {V₂ : Type u_13} [field K] [field K₁] [add_comm_group V₁] [module K₁ V₁] [field K₂] [add_comm_group V₂] [module K₂ V₂] {I₁ : K₁ →+* K} {I₂ : K₂ →+* K} {B : V₁ →ₛₗ[I₁] V₂ →ₛₗ[I₂] K} {x : V₁} {y : V₂} {a : K₁} (ha : a 0) :
B.is_ortho x y B.is_ortho (a x) y
theorem linear_map.ortho_smul_right {K : Type u_8} {K₁ : Type u_9} {K₂ : Type u_10} {V₁ : Type u_12} {V₂ : Type u_13} [field K] [field K₁] [add_comm_group V₁] [module K₁ V₁] [field K₂] [add_comm_group V₂] [module K₂ V₂] {I₁ : K₁ →+* K} {I₂ : K₂ →+* K} {B : V₁ →ₛₗ[I₁] V₂ →ₛₗ[I₂] K} {x : V₁} {y : V₂} {a : K₂} {ha : a 0} :
B.is_ortho x y B.is_ortho x (a y)
theorem linear_map.linear_independent_of_is_Ortho {K : Type u_8} {K₁ : Type u_9} {V₁ : Type u_12} {n : Type u_14} [field K] [field K₁] [add_comm_group V₁] [module K₁ V₁] {I₁ I₁' : K₁ →+* K} {B : V₁ →ₛₗ[I₁] V₁ →ₛₗ[I₁'] K} {v : n → V₁} (hv₁ : B.is_Ortho v) (hv₂ : ∀ (i : n), ¬B.is_ortho (v i) (v i)) :

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

### Reflexive bilinear forms #

def linear_map.is_refl {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} (B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R) :
Prop

The proposition that a sesquilinear form is reflexive

Equations
theorem linear_map.is_refl.eq_zero {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} (H : B.is_refl) {x y : M₁} :
(B x) y = 0(B y) x = 0
theorem linear_map.is_refl.ortho_comm {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} (H : B.is_refl) {x y : M₁} :
B.is_ortho x y B.is_ortho y x
theorem linear_map.is_refl.dom_restrict_refl {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} (H : B.is_refl) (p : M₁) :
@[simp]
theorem linear_map.is_refl.flip_is_refl_iff {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} :
theorem linear_map.is_refl.ker_flip_eq_bot {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} (H : B.is_refl) (h : = ) :
theorem linear_map.is_refl.ker_eq_bot_iff_ker_flip_eq_bot {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} (H : B.is_refl) :

### Symmetric bilinear forms #

def linear_map.is_symm {R : Type u_1} {M : Type u_5} [ M] {I : R →+* R} (B : M →ₛₗ[I] M →ₗ[R] R) :
Prop

The proposition that a sesquilinear form is symmetric

Equations
@[protected]
theorem linear_map.is_symm.eq {R : Type u_1} {M : Type u_5} [ M] {I : R →+* R} {B : M →ₛₗ[I] M →ₗ[R] R} (H : B.is_symm) (x y : M) :
I ((B x) y) = (B y) x
theorem linear_map.is_symm.is_refl {R : Type u_1} {M : Type u_5} [ M] {I : R →+* R} {B : M →ₛₗ[I] M →ₗ[R] R} (H : B.is_symm) :
theorem linear_map.is_symm.ortho_comm {R : Type u_1} {M : Type u_5} [ M] {I : R →+* R} {B : M →ₛₗ[I] M →ₗ[R] R} (H : B.is_symm) {x y : M} :
B.is_ortho x y B.is_ortho y x
theorem linear_map.is_symm.dom_restrict_symm {R : Type u_1} {M : Type u_5} [ M] {I : R →+* R} {B : M →ₛₗ[I] M →ₗ[R] R} (H : B.is_symm) (p : M) :
theorem linear_map.is_symm_iff_eq_flip {R : Type u_1} {M : Type u_5} [ M] {B : M →ₗ[R] M →ₗ[R] R} :

### Alternating bilinear forms #

def linear_map.is_alt {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_ring R] [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} (B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R) :
Prop

The proposition that a sesquilinear form is alternating

Equations
theorem linear_map.is_alt.self_eq_zero {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_ring R] [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} (H : B.is_alt) (x : M₁) :
(B x) x = 0
theorem linear_map.is_alt.neg {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_ring R] [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} (H : B.is_alt) (x y : M₁) :
-(B x) y = (B y) x
theorem linear_map.is_alt.is_refl {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_ring R] [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} (H : B.is_alt) :
theorem linear_map.is_alt.ortho_comm {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_ring R] [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} (H : B.is_alt) {x y : M₁} :
B.is_ortho x y B.is_ortho y x
theorem linear_map.is_alt_iff_eq_neg_flip {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_ring R] [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] {I : R₁ →+* R} [char_zero R] {B : M₁ →ₛₗ[I] M₁ →ₛₗ[I] R} :

### The orthogonal complement #

def submodule.orthogonal_bilin {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_ring R] [comm_ring R₁] [add_comm_group M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} (N : M₁) (B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R) :
M₁

The orthogonal complement of a submodule N with respect to some bilinear form 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 forms 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
@[simp]
theorem submodule.mem_orthogonal_bilin_iff {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_ring R] [comm_ring R₁] [add_comm_group M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} {N : M₁} {m : M₁} :
m ∀ (n : M₁), n NB.is_ortho n m
theorem submodule.orthogonal_bilin_le {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_ring R] [comm_ring R₁] [add_comm_group M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} {N L : M₁} (h : N L) :
theorem submodule.le_orthogonal_bilin_orthogonal_bilin {R : Type u_1} {R₁ : Type u_2} {M₁ : Type u_6} [comm_ring R] [comm_ring R₁] [add_comm_group M₁] [module R₁ M₁] {I₁ I₂ : R₁ →+* R} {B : M₁ →ₛₗ[I₁] M₁ →ₛₗ[I₂] R} {N : M₁} (b : B.is_refl) :
N B
theorem linear_map.span_singleton_inf_orthogonal_eq_bot {K : Type u_8} {K₁ : Type u_9} {V₁ : Type u_12} [field K] [field K₁] [add_comm_group V₁] [module K₁ V₁] {J₁ J₁' : K₁ →+* K} (B : V₁ →ₛₗ[J₁] V₁ →ₛₗ[J₁'] K) (x : V₁) (hx : ¬B.is_ortho x x) :
theorem linear_map.orthogonal_span_singleton_eq_to_lin_ker {K : Type u_8} {V : Type u_11} [field K] [ V] {J : K →+* K} {B : V →ₗ[K] V →ₛₗ[J] K} (x : V) :
theorem linear_map.span_singleton_sup_orthogonal_eq_top {K : Type u_8} {V : Type u_11} [field K] [ V] {B : V →ₗ[K] V →ₗ[K] K} {x : V} (hx : ¬B.is_ortho x x) :
theorem linear_map.is_compl_span_singleton_orthogonal {K : Type u_8} {V : Type u_11} [field K] [ V] {B : V →ₗ[K] V →ₗ[K] K} {x : V} (hx : ¬B.is_ortho x x) :

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.

### Adjoint pairs #

def linear_map.is_adjoint_pair {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [ M] [add_comm_monoid M₁] [ M₁] (B : M →ₗ[R] M →ₗ[R] R) (B' : M₁ →ₗ[R] M₁ →ₗ[R] R) (f : M →ₗ[R] M₁) (g : M₁ →ₗ[R] M) :
Prop

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

Equations
theorem linear_map.is_adjoint_pair_iff_comp_eq_compl₂ {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [ M] [add_comm_monoid M₁] [ M₁] {B : M →ₗ[R] M →ₗ[R] R} {B' : M₁ →ₗ[R] M₁ →ₗ[R] R} {f : M →ₗ[R] M₁} {g : M₁ →ₗ[R] M} :
B.is_adjoint_pair B' f g B'.comp f = B.compl₂ g
theorem linear_map.is_adjoint_pair_zero {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [ M] [add_comm_monoid M₁] [ M₁] {B : M →ₗ[R] M →ₗ[R] R} {B' : M₁ →ₗ[R] M₁ →ₗ[R] R} :
theorem linear_map.is_adjoint_pair_id {R : Type u_1} {M : Type u_5} [ M] {B : M →ₗ[R] M →ₗ[R] R} :
1 1
theorem linear_map.is_adjoint_pair.add {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [ M] [add_comm_monoid M₁] [ M₁] {B : M →ₗ[R] M →ₗ[R] R} {B' : M₁ →ₗ[R] M₁ →ₗ[R] R} {f f' : M →ₗ[R] M₁} {g g' : M₁ →ₗ[R] M} (h : B.is_adjoint_pair B' f g) (h' : B.is_adjoint_pair B' f' g') :
B.is_adjoint_pair B' (f + f') (g + g')
theorem linear_map.is_adjoint_pair.comp {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} {M₂ : Type u_7} [ M] [add_comm_monoid M₁] [ M₁] [add_comm_monoid M₂] [ M₂] {B : M →ₗ[R] M →ₗ[R] R} {B' : M₁ →ₗ[R] M₁ →ₗ[R] R} {B'' : M₂ →ₗ[R] M₂ →ₗ[R] R} {f : M →ₗ[R] M₁} {g : M₁ →ₗ[R] M} {f' : M₁ →ₗ[R] M₂} {g' : M₂ →ₗ[R] M₁} (h : B.is_adjoint_pair B' f g) (h' : B'.is_adjoint_pair B'' f' g') :
B.is_adjoint_pair B'' (f'.comp f) (g.comp g')
theorem linear_map.is_adjoint_pair.mul {R : Type u_1} {M : Type u_5} [ M] {B : M →ₗ[R] M →ₗ[R] R} {f g f' g' : M} (h : f g) (h' : f' g') :
(f * f') (g' * g)
theorem linear_map.is_adjoint_pair.sub {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [comm_ring R] [ M] [add_comm_group M₁] [ M₁] {B : M →ₗ[R] M →ₗ[R] R} {B' : M₁ →ₗ[R] M₁ →ₗ[R] R} {f f' : M →ₗ[R] M₁} {g g' : M₁ →ₗ[R] M} (h : B.is_adjoint_pair B' f g) (h' : B.is_adjoint_pair B' f' g') :
B.is_adjoint_pair B' (f - f') (g - g')
theorem linear_map.is_adjoint_pair.smul {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [comm_ring R] [ M] [add_comm_group M₁] [ M₁] {B : M →ₗ[R] M →ₗ[R] R} {B' : M₁ →ₗ[R] M₁ →ₗ[R] R} {f : M →ₗ[R] M₁} {g : M₁ →ₗ[R] M} (c : R) (h : B.is_adjoint_pair B' f g) :
B.is_adjoint_pair B' (c f) (c g)

### Self-adjoint pairs #

def linear_map.is_pair_self_adjoint {R : Type u_1} {M : Type u_5} [ M] (B F : M →ₗ[R] M →ₗ[R] R) (f : M) :
Prop

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

Equations
• f = f f
@[protected]
def linear_map.is_self_adjoint {R : Type u_1} {M : Type u_5} [ M] (B : M →ₗ[R] M →ₗ[R] R) (f : M) :
Prop

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

Equations
• = f f
def linear_map.is_pair_self_adjoint_submodule {R : Type u_1} {M : Type u_5} [comm_ring R] [ M] (B F : M →ₗ[R] M →ₗ[R] R) :
M)

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

Equations
def linear_map.is_skew_adjoint {R : Type u_1} {M : Type u_5} [comm_ring R] [ M] (B : M →ₗ[R] M →ₗ[R] R) (f : M) :
Prop

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

Equations
• = f (-f)
def linear_map.self_adjoint_submodule {R : Type u_1} {M : Type u_5} [comm_ring R] [ M] (B : M →ₗ[R] M →ₗ[R] R) :
M)

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

Equations
def linear_map.skew_adjoint_submodule {R : Type u_1} {M : Type u_5} [comm_ring R] [ M] (B : M →ₗ[R] M →ₗ[R] R) :
M)

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

Equations
@[simp]
theorem linear_map.mem_is_pair_self_adjoint_submodule {R : Type u_1} {M : Type u_5} [comm_ring R] [ M] {B F : M →ₗ[R] M →ₗ[R] R} (f : M) :
f
theorem linear_map.is_pair_self_adjoint_equiv {R : Type u_1} {M : Type u_5} {M₁ : Type u_6} [comm_ring R] [ M] [add_comm_group M₁] [ M₁] {B F : M →ₗ[R] M →ₗ[R] R} (e : M₁ ≃ₗ[R] M) (f : M) :
theorem linear_map.is_skew_adjoint_iff_neg_self_adjoint {R : Type u_1} {M : Type u_5} [comm_ring R] [ M] {B : M →ₗ[R] M →ₗ[R] R} (f : M) :
@[simp]
theorem linear_map.mem_self_adjoint_submodule {R : Type u_1} {M : Type u_5} [comm_ring R] [ M] {B : M →ₗ[R] M →ₗ[R] R} (f : M) :
@[simp]
theorem linear_map.mem_skew_adjoint_submodule {R : Type u_1} {M : Type u_5} [comm_ring R] [ M] {B : M →ₗ[R] M →ₗ[R] R} (f : M) :

### Nondegenerate bilinear forms #

def linear_map.separating_left {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R) :
Prop

A bilinear form 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
def linear_map.separating_right {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R) :
Prop

A bilinear form 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
def linear_map.nondegenerate {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} (B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R) :
Prop

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

Equations
@[simp]
theorem linear_map.flip_separating_right {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R} :
@[simp]
theorem linear_map.flip_separating_left {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R} :
@[simp]
theorem linear_map.flip_nondegenerate {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R} :
theorem linear_map.separating_left_iff_linear_nontrivial {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R} :
B.separating_left ∀ (x : M₁), B x = 0x = 0
theorem linear_map.separating_right_iff_linear_flip_nontrivial {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R} :
B.separating_right ∀ (y : M₂), (B.flip) y = 0y = 0
theorem linear_map.separating_left_iff_ker_eq_bot {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R} :

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

theorem linear_map.separating_right_iff_flip_ker_eq_bot {R : Type u_1} {R₁ : Type u_2} {R₂ : Type u_3} {M₁ : Type u_6} {M₂ : Type u_7} [comm_semiring R₁] [add_comm_monoid M₁] [module R₁ M₁] [comm_semiring R₂] [add_comm_monoid M₂] [module R₂ M₂] {I₁ : R₁ →+* R} {I₂ : R₂ →+* R} {B : M₁ →ₛₗ[I₁] M₂ →ₛₗ[I₂] R} :

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

theorem linear_map.is_refl.nondegenerate_of_separating_left {R : Type u_1} {M : Type u_5} [comm_ring R] [ M] {B : M →ₗ[R] M →ₗ[R] R} (hB : B.is_refl) (hB' : B.separating_left) :
theorem linear_map.is_refl.nondegenerate_of_separating_right {R : Type u_1} {M : Type u_5} [comm_ring R] [ M] {B : M →ₗ[R] M →ₗ[R] R} (hB : B.is_refl) (hB' : B.separating_right) :
theorem linear_map.nondegenerate_restrict_of_disjoint_orthogonal {R : Type u_1} {M : Type u_5} [comm_ring R] [ M] {B : M →ₗ[R] M →ₗ[R] R} (hB : B.is_refl) {W : M} (hW : (W.orthogonal_bilin B)) :

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

theorem linear_map.is_Ortho.not_is_ortho_basis_self_of_separating_left {R : Type u_1} {M : Type u_5} {n : Type u_14} [comm_ring R] [ M] {I I' : R →+* R} [nontrivial R] {B : M →ₛₗ[I] M →ₛₗ[I'] R} {v : R M} (h : B.is_Ortho v) (hB : B.separating_left) (i : n) :
¬B.is_ortho (v i) (v i)

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

theorem linear_map.is_Ortho.not_is_ortho_basis_self_of_separating_right {R : Type u_1} {M : Type u_5} {n : Type u_14} [comm_ring R] [ M] {I I' : R →+* R} [nontrivial R] {B : M →ₛₗ[I] M →ₛₗ[I'] R} {v : R M} (h : B.is_Ortho v) (hB : B.separating_right) (i : n) :
¬B.is_ortho (v i) (v i)

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

theorem linear_map.is_Ortho.separating_left_of_not_is_ortho_basis_self {R : Type u_1} {M : Type u_5} {n : Type u_14} [comm_ring R] [ M] {B : M →ₗ[R] M →ₗ[R] R} (v : R M) (hO : B.is_Ortho v) (h : ∀ (i : n), ¬B.is_ortho (v i) (v i)) :

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

theorem linear_map.is_Ortho.separating_right_iff_not_is_ortho_basis_self {R : Type u_1} {M : Type u_5} {n : Type u_14} [comm_ring R] [ M] {B : M →ₗ[R] M →ₗ[R] R} (v : R M) (hO : B.is_Ortho v) (h : ∀ (i : n), ¬B.is_ortho (v i) (v i)) :

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

theorem linear_map.is_Ortho.nondegenerate_of_not_is_ortho_basis_self {R : Type u_1} {M : Type u_5} {n : Type u_14} [comm_ring R] [ M] {B : M →ₗ[R] M →ₗ[R] R} (v : R M) (hO : B.is_Ortho v) (h : ∀ (i : n), ¬B.is_ortho (v i) (v i)) :

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