mathlib3 documentation

linear_algebra.orientation

Orientations of modules #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

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) [strict_ordered_comm_semiring R] (M : Type u_2) [add_comm_monoid M] [module R M] (ι : Type u_4) :
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) [strict_ordered_comm_semiring R] (M : Type u_2) [add_comm_monoid M] [module R M] (ι : Type u_4) :
Type (max u_1 u_2 u_4)

A type class fixing an orientation of a module.

Instances of this typeclass
Instances of other typeclasses for module.oriented
  • module.oriented.has_sizeof_inst
def orientation.map {R : Type u_1} [strict_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) (e : M ≃ₗ[R] N) :

An equivalence between modules implies an equivalence between orientations.

Equations
@[simp]
theorem orientation.map_apply {R : Type u_1} [strict_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) (e : M ≃ₗ[R] N) (v : alternating_map R M R ι) (hv : v 0) :
@[simp]
@[simp]
theorem orientation.map_symm {R : Type u_1} [strict_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) (e : M ≃ₗ[R] N) :
def orientation.reindex (R : Type u_1) [strict_ordered_comm_semiring R] (M : Type u_2) [add_comm_monoid M] [module R M] {ι : Type u_4} {ι' : Type u_5} (e : ι ι') :
orientation R M ι orientation R M ι'

An equivalence between indices implies an equivalence between orientations.

Equations
@[simp]
theorem orientation.reindex_apply (R : Type u_1) [strict_ordered_comm_semiring R] (M : Type u_2) [add_comm_monoid M] [module R M] {ι : Type u_4} {ι' : Type u_5} (e : ι ι') (v : alternating_map R M R ι) (hv : v 0) :
@[simp]
@[simp]
theorem orientation.reindex_symm (R : Type u_1) [strict_ordered_comm_semiring R] (M : Type u_2) [add_comm_monoid M] [module R M] {ι : Type u_4} {ι' : Type u_5} (e : ι ι') :
@[protected, instance]
def is_empty.oriented {R : Type u_1} [strict_ordered_comm_semiring R] {M : Type u_2} [add_comm_monoid M] [module R M] (ι : Type u_4) [nontrivial R] [is_empty ι] :

A module is canonically oriented with respect to an empty index type.

Equations
@[simp]
theorem orientation.map_of_is_empty {R : Type u_1} [strict_ordered_comm_semiring R] {M : Type u_2} [add_comm_monoid M] [module R M] (ι : Type u_4) [is_empty ι] (x : orientation R M ι) (f : M ≃ₗ[R] M) :
@[protected, simp]
theorem orientation.map_neg {R : Type u_1} [strict_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} (f : M ≃ₗ[R] N) (x : orientation R M ι) :
@[protected, simp]
theorem orientation.reindex_neg {R : Type u_1} [strict_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_3} {ι' : Type u_4} (e : ι ι') (x : orientation R M ι) :
theorem basis.map_orientation_eq_det_inv_smul {R : Type u_1} [strict_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_4} [finite ι] (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.

@[protected]
noncomputable def basis.orientation {R : Type u_1} [strict_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} [strict_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.orientation_reindex {R : Type u_1} [strict_ordered_comm_ring R] {M : Type u_2} [add_comm_group M] [module R M] {ι : Type u_4} {ι' : Type u_5} [fintype ι] [decidable_eq ι] [fintype ι'] [decidable_eq ι'] [nontrivial R] (e : basis ι R M) (eι : ι ι') :
theorem basis.orientation_units_smul {R : Type u_1} [strict_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.

A module M over a linearly ordered commutative ring has precisely two "orientations" with respect to an empty index type. (Note that these are only orientations of M of in the conventional mathematical sense if M is zero-dimensional.)

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} [fintype ι] [decidable_eq ι] (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} [fintype ι] [decidable_eq ι] (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} [fintype ι] [decidable_eq ι] (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.

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

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} [fintype ι] [decidable_eq ι] [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} [fintype ι] [decidable_eq ι] [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} [fintype ι] [decidable_eq ι] [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} [fintype ι] [decidable_eq ι] [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 basis.det_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} [fintype ι] [decidable_eq ι] [nontrivial R] [nonempty ι] (e : basis ι R M) (x : orientation R M ι) :
@[simp]
theorem basis.abs_det_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} [fintype ι] [decidable_eq ι] [nontrivial R] [nonempty ι] (e : basis ι R M) (x : orientation R M ι) (v : ι M) :
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} [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} [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.

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} [fintype ι] (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} [fintype ι] (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} [fintype ι] [finite_dimensional R M] [nonempty ι] [decidable_eq ι] (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]

some_basis gives a basis with the required orientation.