Orientations of modules #
This file defines orientations of modules.
Main definitions #
Orientation
is a type synonym forModule.Ray
for the case where the module is that of alternating maps from a module to its underlying ring. An orientation may be associated with an alternating map or with a basis.Module.Oriented
is a type class for a choice of orientation of a module that is considered the positive orientation.
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 #
- https://en.wikipedia.org/wiki/Orientation_(vector_space)
An orientation of a module, intended to be used when ι
is a Fintype
with the same
cardinality as a basis.
Equations
- Orientation R M ι = Module.Ray R (M [⋀^ι]→ₗ[R] R)
Instances For
A type class fixing an orientation of a module.
- positiveOrientation : Orientation R M ι
Fix a positive orientation.
Instances
An equivalence between modules implies an equivalence between orientations.
Equations
- Orientation.map ι e = Module.Ray.map (AlternatingMap.domLCongr R R ι R e)
Instances For
An equivalence between indices implies an equivalence between orientations.
Equations
Instances For
A module is canonically oriented with respect to an empty index type.
Equations
- IsEmpty.oriented ι = { positiveOrientation := rayOfNeZero R (AlternatingMap.constLinearEquivOfIsEmpty 1) ⋯ }
The value of Orientation.map
when the index type has the cardinality of a basis, in terms
of f.det
.
The orientation given by a basis.
Equations
- e.orientation = rayOfNeZero R e.det ⋯
Instances For
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.)
The orientations given by two bases are equal if and only if the determinant of one basis with respect to the other is positive.
Given a basis, any orientation equals the orientation given by that basis or its negation.
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.
Negating a single basis vector (represented using units_smul
) negates the corresponding
orientation.
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
- e.adjustToOrientation x = if e.orientation = x then e else e.unitsSMul (Function.update 1 (Classical.arbitrary ι) (-1))
Instances For
adjust_to_orientation
gives a basis with the required orientation.
Every basis vector from adjust_to_orientation
is either that from the original basis or its
negation.
If the index type has cardinality equal to the finite dimension, any two orientations are equal or negations.
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
.
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.
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.
If the index type has cardinality equal to the finite dimension, a basis with the given orientation.
Equations
- x.someBasis h = ((FiniteDimensional.finBasis R M).reindex (Fintype.equivFinOfCardEq h).symm).adjustToOrientation x
Instances For
some_basis
gives a basis with the required orientation.