mathlib documentation

linear_algebra.orientation

Orientations of modules #

This file defines orientations of modules.

Main definitions #

Implementation notes #

orientation is defined for an arbitrary index type, but the main intended use case is when that index type is a fintype and there exists a basis of the same cardinality.

References #

@[reducible]
def orientation (R : Type u_1) [ordered_comm_semiring R] (M : Type u_2) [add_comm_monoid M] [module R M] (ι : Type u_4) [decidable_eq ι] :
Type (max u_2 u_1 u_4)

An orientation of a module, intended to be used when ι is a fintype with the same cardinality as a basis.

@[class]
structure module.oriented (R : Type u_1) [ordered_comm_semiring R] (M : Type u_2) [add_comm_monoid M] [module R M] (ι : Type u_4) [decidable_eq ι] :
Type (max u_1 u_2 u_4)

A type class fixing an orientation of a module.

Instances for module.oriented
  • module.oriented.has_sizeof_inst
def orientation.map {R : Type u_1} [ordered_comm_semiring R] {M : Type u_2} [add_comm_monoid M] [module R M] {N : Type u_3} [add_comm_monoid N] [module R N] (ι : Type u_4) [decidable_eq ι] (e : M ≃ₗ[R] N) :

An equivalence between modules implies an equivalence between orientations.

Equations
@[simp]
theorem orientation.map_apply {R : Type u_1} [ordered_comm_semiring R] {M : Type u_2} [add_comm_monoid M] [module R M] {N : Type u_3} [add_comm_monoid N] [module R N] (ι : Type u_4) [decidable_eq ι] (e : M ≃ₗ[R] N) (v : alternating_map R M R ι) (hv : v 0) :
@[simp]
theorem orientation.map_refl {R : Type u_1} [ordered_comm_semiring R] {M : Type u_2} [add_comm_monoid M] [module R M] (ι : Type u_4) [decidable_eq ι] :
@[simp]
theorem orientation.map_symm {R : Type u_1} [ordered_comm_semiring R] {M : Type u_2} [add_comm_monoid M] [module R M] {N : Type u_3} [add_comm_monoid N] [module R N] (ι : Type u_4) [decidable_eq ι] (e : M ≃ₗ[R] N) :
@[protected]
noncomputable def basis.orientation {R : Type u_1} [ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_4} [fintype ι] [decidable_eq ι] [nontrivial R] (e : basis ι R M) :

The orientation given by a basis.

Equations
theorem basis.orientation_map {R : Type u_1} [ordered_comm_ring R] {M : Type u_2} {N : Type u_3} [add_comm_group M] [add_comm_group N] [module R M] [module R N] {ι : Type u_4} [fintype ι] [decidable_eq ι] [nontrivial R] (e : basis ι R M) (f : M ≃ₗ[R] N) :
theorem basis.map_orientation_eq_det_inv_smul {R : Type u_1} [ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_4} [fintype ι] [decidable_eq ι] (e : basis ι R M) (x : orientation R M ι) (f : M ≃ₗ[R] M) :

The value of orientation.map when the index type has the cardinality of a basis, in terms of f.det.

theorem basis.orientation_units_smul {R : Type u_1} [ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_4} [fintype ι] [decidable_eq ι] [nontrivial R] (e : basis ι R M) (w : ι → Rˣ) :

The orientation given by a basis derived using units_smul, in terms of the product of those units.

theorem basis.orientation_eq_iff_det_pos {R : Type u_1} [linear_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] (e₁ e₂ : basis ι R M) :
e₁.orientation = e₂.orientation 0 < (e₁.det) e₂

The orientations given by two bases are equal if and only if the determinant of one basis with respect to the other is positive.

theorem basis.orientation_eq_or_eq_neg {R : Type u_1} [linear_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] (e : basis ι R M) (x : orientation R M ι) :

Given a basis, any orientation equals the orientation given by that basis or its negation.

theorem basis.orientation_ne_iff_eq_neg {R : Type u_1} [linear_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] (e : basis ι R M) (x : orientation R M ι) :

Given a basis, an orientation equals the negation of that given by that basis if and only if it does not equal that given by that basis.

theorem basis.orientation_comp_linear_equiv_eq_iff_det_pos {R : Type u_1} [linear_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] (e : basis ι R M) (f : M ≃ₗ[R] M) :

Composing a basis with a linear equiv gives the same orientation if and only if the determinant is positive.

theorem basis.orientation_comp_linear_equiv_eq_neg_iff_det_neg {R : Type u_1} [linear_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] (e : basis ι R M) (f : M ≃ₗ[R] M) :

Composing a basis with a linear equiv gives the negation of that orientation if and only if the determinant is negative.

@[simp]
theorem basis.orientation_neg_single {R : Type u_1} [linear_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] [nontrivial R] (e : basis ι R M) (i : ι) :

Negating a single basis vector (represented using units_smul) negates the corresponding orientation.

noncomputable def basis.adjust_to_orientation {R : Type u_1} [linear_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] [nontrivial R] [nonempty ι] (e : basis ι R M) (x : orientation R M ι) :
basis ι R M

Given a basis and an orientation, return a basis giving that orientation: either the original basis, or one constructed by negating a single (arbitrary) basis vector.

Equations
@[simp]
theorem basis.orientation_adjust_to_orientation {R : Type u_1} [linear_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] [nontrivial R] [nonempty ι] (e : basis ι R M) (x : orientation R M ι) :

adjust_to_orientation gives a basis with the required orientation.

theorem basis.adjust_to_orientation_apply_eq_or_eq_neg {R : Type u_1} [linear_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] [nontrivial R] [nonempty ι] (e : basis ι R M) (x : orientation R M ι) (i : ι) :

Every basis vector from adjust_to_orientation is either that from the original basis or its negation.

theorem orientation.eq_or_eq_neg {R : Type u_1} [linear_ordered_field R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] [finite_dimensional R M] (x₁ x₂ : orientation R M ι) (h : fintype.card ι = finite_dimensional.finrank R M) :
x₁ = x₂ x₁ = -x₂

If the index type has cardinality equal to the finite dimension, any two orientations are equal or negations.

theorem orientation.ne_iff_eq_neg {R : Type u_1} [linear_ordered_field R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] [finite_dimensional R M] (x₁ x₂ : orientation R M ι) (h : fintype.card ι = finite_dimensional.finrank R M) :
x₁ x₂ x₁ = -x₂

If the index type has cardinality equal to the finite dimension, an orientation equals the negation of another orientation if and only if they are not equal.

theorem orientation.map_eq_det_inv_smul {R : Type u_1} [linear_ordered_field R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] [finite_dimensional R M] (x : orientation R M ι) (f : M ≃ₗ[R] M) (h : fintype.card ι = finite_dimensional.finrank R M) :

The value of orientation.map when the index type has cardinality equal to the finite dimension, in terms of f.det.

theorem orientation.map_eq_iff_det_pos {R : Type u_1} [linear_ordered_field R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] [finite_dimensional R M] (x : orientation R M ι) (f : M ≃ₗ[R] M) (h : fintype.card ι = finite_dimensional.finrank R M) :

If the index type has cardinality equal to the finite dimension, composing an alternating map with the same linear equiv on each argument gives the same orientation if and only if the determinant is positive.

theorem orientation.map_eq_neg_iff_det_neg {R : Type u_1} [linear_ordered_field R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] [finite_dimensional R M] (x : orientation R M ι) (f : M ≃ₗ[R] M) (h : fintype.card ι = finite_dimensional.finrank R M) :

If the index type has cardinality equal to the finite dimension, composing an alternating map with the same linear equiv on each argument gives the negation of that orientation if and only if the determinant is negative.

noncomputable def orientation.some_basis {R : Type u_1} [linear_ordered_field R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] [finite_dimensional R M] [nonempty ι] (x : orientation R M ι) (h : fintype.card ι = finite_dimensional.finrank R M) :
basis ι R M

If the index type has cardinality equal to the finite dimension, a basis with the given orientation.

Equations
@[simp]
theorem orientation.some_basis_orientation {R : Type u_1} [linear_ordered_field R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} [decidable_eq ι] [fintype ι] [finite_dimensional R M] [nonempty ι] (x : orientation R M ι) (h : fintype.card ι = finite_dimensional.finrank R M) :

some_basis gives a basis with the required orientation.