Rays in modules #
This file defines rays in modules.
Main definitions #
-
SameRay
: two vectors belong to the same ray if they are proportional with a nonnegative coefficient. -
Module.Ray
is a type for the equivalence class of nonzero vectors in a module with some common positive multiple.
Two vectors are in the same ray if either one of them is zero or some positive multiples of them are equal (in the typical case over a field, this means one of them is a nonnegative multiple of the other).
Equations
Instances For
SameRay
is reflexive.
SameRay
is symmetric.
If x
and y
are nonzero vectors on the same ray, then there exist positive numbers r₁ r₂
such that r₁ • x = r₂ • y
.
SameRay
is transitive unless the vector in the middle is zero and both other vectors are
nonzero.
A vector is in the same ray as a nonnegative multiple of itself.
A nonnegative multiple of a vector is in the same ray as that vector.
A vector is in the same ray as a positive multiple of itself.
A positive multiple of a vector is in the same ray as that vector.
A vector is in the same ray as a nonnegative multiple of one it is in the same ray as.
A nonnegative multiple of a vector is in the same ray as one it is in the same ray as.
A vector is in the same ray as a positive multiple of one it is in the same ray as.
A positive multiple of a vector is in the same ray as one it is in the same ray as.
If two vectors are on the same ray then they remain so after applying a linear map.
The images of two vectors under an injective linear map are on the same ray if and only if the original vectors are on the same ray.
The images of two vectors under a linear equivalence are on the same ray if and only if the original vectors are on the same ray.
If two vectors are on the same ray then both scaled by the same action are also on the same ray.
If x
and y
are on the same ray as z
, then so is x + y
.
If y
and z
are on the same ray as x
, then so is y + z
.
The setoid of the SameRay
relation for the subtype of nonzero vectors.
Equations
- RayVector.Setoid R M = { r := fun (x y : RayVector R M) => SameRay R ↑x ↑y, iseqv := (_ : Equivalence fun (x y : RayVector R M) => SameRay R ↑x ↑y) }
A ray (equivalence class of nonzero vectors with common positive multiples) in a module.
Equations
- Module.Ray R M = Quotient (RayVector.Setoid R M)
Instances For
Equivalence of nonzero vectors, in terms of SameRay
.
The ray given by a nonzero vector.
Equations
- rayOfNeZero R v h = ⟦{ val := v, property := h }⟧
Instances For
An induction principle for Module.Ray
, used as induction x using Module.Ray.ind
.
Equations
- (_ : Nonempty (Module.Ray R M)) = (_ : Nonempty (Module.Ray R M))
The rays given by two nonzero vectors are equal if and only if those vectors
satisfy SameRay
.
The ray given by a positive multiple of a nonzero vector.
An equivalence between modules implies an equivalence between ray vectors.
Equations
- RayVector.mapLinearEquiv e = Equiv.subtypeEquiv (LinearEquiv.toEquiv e) (_ : ∀ (x : M), x ≠ 0 ↔ e x ≠ 0)
Instances For
An equivalence between modules implies an equivalence between rays.
Equations
- Module.Ray.map e = Quotient.congr (RayVector.mapLinearEquiv e) (_ : ∀ (x x_1 : RayVector R M), SameRay R ↑x ↑x_1 ↔ SameRay R (e ↑x) (e ↑x_1))
Instances For
Any invertible action preserves the non-zeroness of ray vectors. This is primarily of interest
when G = Rˣ
Any invertible action preserves the non-zeroness of rays. This is primarily of interest when
G = Rˣ
Equations
- instMulActionRayToMonoidToDivInvMonoid = MulAction.mk (_ : ∀ (q : Quotient (RayVector.Setoid R M)), 1 • q = q) (_ : ∀ (a b : G) (q : Quotient (RayVector.Setoid R M)), (a * b) • q = a • b • q)
The action via LinearEquiv.apply_distribMulAction
corresponds to Module.Ray.map
.
Scaling by a positive unit is a no-op.
An arbitrary RayVector
giving a ray.
Equations
Instances For
The ray of someRayVector
.
An arbitrary nonzero vector giving a ray.
Equations
Instances For
someVector
is nonzero.
The ray of someVector
.
SameRay.neg
as an iff
.
Alias of the forward direction of sameRay_neg_iff
.
SameRay.neg
as an iff
.
Alias of the reverse direction of sameRay_neg_iff
.
SameRay.neg
as an iff
.
If a vector is in the same ray as its negation, that vector is zero.
Negating a nonzero vector.
Negating a nonzero vector commutes with coercion to the underlying module.
Negating a nonzero vector twice produces the original vector.
If two nonzero vectors are equivalent, so are their negations.
Negating a ray.
Equations
- instNegRayToStrictOrderedCommSemiringToAddCommMonoid R = { neg := Quotient.map (fun (v : RayVector R M) => -v) (_ : ∀ (x x_1 : RayVector R M), x ≈ x_1 → -x ≈ -x_1) }
The ray given by the negation of a nonzero vector.
Negating a ray twice produces the original ray.
Equations
- Module.Ray.instInvolutiveNegRayToStrictOrderedCommSemiringToAddCommMonoid = InvolutiveNeg.mk (_ : ∀ (x : Module.Ray R M), - -x = x)
A ray does not equal its own negation.
Scaling by a negative unit is negation.
SameRay
follows from membership of MulAction.orbit
for the Units.posSubgroup
.
Scaling by an inverse unit is the same as scaling by itself.
A nonzero vector is in the same ray as a multiple of itself if and only if that multiple is positive.
A multiple of a nonzero vector is in the same ray as that vector if and only if that multiple is positive.
Two vectors are in the same ray, or the first is in the same ray as the negation of the second, if and only if they are not linearly independent.
Two vectors are in the same ray, or they are nonzero and the first is in the same ray as the negation of the second, if and only if they are not linearly independent.
If a vector v₂
is on the same ray as a nonzero vector v₁
, then it is equal to c • v₁
for
some nonnegative c
.
If a vector v₁
is on the same ray as a nonzero vector v₂
, then it is equal to c • v₂
for
some nonnegative c
.
If vectors v₁
and v₂
are on the same ray, then for some nonnegative a b
, a + b = 1
, we
have v₁ = a • (v₁ + v₂)
and v₂ = b • (v₁ + v₂)
.
If vectors v₁
and v₂
are on the same ray, then they are nonnegative multiples of the same
vector. Actually, this vector can be assumed to be v₁ + v₂
, see SameRay.exists_eq_smul_add
.