Quaternions #
In this file we define quaternions ℍ[R] over a commutative ring R, and define some
algebraic structures on ℍ[R].
Main definitions #
QuaternionAlgebra R a b c,ℍ[R, a, b, c]: Bourbaki, Algebra I with coefficientsa,b,c(Many other references such as Wikipedia assume $\operatorname{char} R ≠ 2$ therefore one can complete the square and WLOG assume $b = 0$.)Quaternion R,ℍ[R]: the space of quaternions, a.k.a.QuaternionAlgebra R (-1) (0) (-1);Quaternion.normSq: square of the norm of a quaternion;
We also define the following algebraic structures on ℍ[R]:
Ring ℍ[R, a, b, c],StarRing ℍ[R, a, b, c], andAlgebra R ℍ[R, a, b, c]: for any commutative ringR;Ring ℍ[R],StarRing ℍ[R], andAlgebra R ℍ[R]: for any commutative ringR;IsDomain ℍ[R]: for a linear ordered commutative ringR;DivisionRing ℍ[R]: for a linear ordered fieldR.
Notation #
The following notation is available with open Quaternion or open scoped Quaternion.
ℍ[R,c₁,c₂,c₃]:QuaternionAlgebra R c₁ c₂ c₃ℍ[R,c₁,c₂] :QuaternionAlgebra R c₁ 0 c₂`ℍ[R]: quaternions overR.
Implementation notes #
We define quaternions over any ring R, not just ℝ to be able to deal with, e.g., integer
or rational quaternions without using real numbers. In particular, all definitions in this file
are computable.
Tags #
quaternion
Quaternion algebra over a type with fixed coefficients where $i^2 = a + bi$ and $j^2 = c$,
denoted as ℍ[R,a,b].
Implemented as a structure with four fields: re, imI, imJ, and imK.
- re : R
Real part of a quaternion.
- imI : R
First imaginary part (i) of a quaternion.
- imJ : R
Second imaginary part (j) of a quaternion.
- imK : R
Third imaginary part (k) of a quaternion.
Instances For
The equivalence between a quaternion algebra over R and R × R × R × R.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The equivalence between a quaternion algebra over R and Fin 4 → R.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The imaginary part of a quaternion.
Note that unless c₂ = 0, this definition is not particularly well-behaved;
for instance, QuaternionAlgebra.star_im only says that the star of an imaginary quaternion
is imaginary under this condition.
Instances For
Alias of QuaternionAlgebra.re_im.
Alias of QuaternionAlgebra.imI_im.
Alias of QuaternionAlgebra.imJ_im.
Alias of QuaternionAlgebra.imK_im.
Coercion R → ℍ[R,c₁,c₂,c₃].
Instances For
Equations
Alias of QuaternionAlgebra.re_coe.
Alias of QuaternionAlgebra.imI_coe.
Alias of QuaternionAlgebra.imJ_coe.
Alias of QuaternionAlgebra.imK_coe.
Alias of QuaternionAlgebra.im_zero.
Equations
- QuaternionAlgebra.instInhabited = { default := 0 }
Alias of QuaternionAlgebra.im_one.
Alias of QuaternionAlgebra.im_add.
Alias of QuaternionAlgebra.im_neg.
Alias of QuaternionAlgebra.im_sub.
Alias of QuaternionAlgebra.im_coe.
Alias of QuaternionAlgebra.sub_im_self.
Alias of QuaternionAlgebra.sub_re_self.
Multiplication is given by
1 * x = x * 1 = x;i * i = c₁ + c₂ * i;j * j = c₃;i * j = k,j * i = c₂ * j - k;k * k = - c₁ * c₃;i * k = c₁ * j + c₂ * k,k * i = -c₁ * j;j * k = c₂ * c₃ - c₃ * i,k * j = c₃ * i.
Equations
- One or more equations did not get rendered due to their size.
Alias of QuaternionAlgebra.im_smul.
Equations
- QuaternionAlgebra.instAddCommGroup = Function.Injective.addCommGroup ⇑(QuaternionAlgebra.equivProd c₁ c₂ c₃) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- One or more equations did not get rendered due to their size.
Alias of QuaternionAlgebra.re_natCast.
Alias of QuaternionAlgebra.imI_natCast.
Alias of QuaternionAlgebra.imJ_natCast.
Alias of QuaternionAlgebra.imK_natCast.
Alias of QuaternionAlgebra.im_natCast.
Alias of QuaternionAlgebra.re_intCast.
Alias of QuaternionAlgebra.re_ofNat.
Alias of QuaternionAlgebra.imI_ofNat.
Alias of QuaternionAlgebra.imJ_ofNat.
Alias of QuaternionAlgebra.imK_ofNat.
Alias of QuaternionAlgebra.im_ofNat.
Alias of QuaternionAlgebra.imI_intCast.
Alias of QuaternionAlgebra.imJ_intCast.
Alias of QuaternionAlgebra.imK_intCast.
Alias of QuaternionAlgebra.im_intCast.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
QuaternionAlgebra.re as a LinearMap
Equations
- QuaternionAlgebra.reₗ c₁ c₂ c₃ = { toFun := QuaternionAlgebra.re, map_add' := ⋯, map_smul' := ⋯ }
Instances For
QuaternionAlgebra.imI as a LinearMap
Equations
- QuaternionAlgebra.imIₗ c₁ c₂ c₃ = { toFun := QuaternionAlgebra.imI, map_add' := ⋯, map_smul' := ⋯ }
Instances For
QuaternionAlgebra.imJ as a LinearMap
Equations
- QuaternionAlgebra.imJₗ c₁ c₂ c₃ = { toFun := QuaternionAlgebra.imJ, map_add' := ⋯, map_smul' := ⋯ }
Instances For
QuaternionAlgebra.imK as a LinearMap
Equations
- QuaternionAlgebra.imKₗ c₁ c₂ c₃ = { toFun := QuaternionAlgebra.imK, map_add' := ⋯, map_smul' := ⋯ }
Instances For
QuaternionAlgebra.equivTuple as a linear equivalence.
Equations
- One or more equations did not get rendered due to their size.
Instances For
ℍ[R,c₁,c₂,c₃] has a basis over R given by 1, i, j, and k.
Equations
- QuaternionAlgebra.basisOneIJK c₁ c₂ c₃ = Module.Basis.ofEquivFun (QuaternionAlgebra.linearEquivTuple c₁ c₂ c₃)
Instances For
There is a natural equivalence when swapping the first and third coefficients of a
quaternion algebra if c₂ is 0.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Quaternion conjugate.
Equations
- QuaternionAlgebra.instStarRing = { toStar := QuaternionAlgebra.instStarQuaternionAlgebra, star_involutive := ⋯, star_mul := ⋯, star_add := ⋯ }
A version of star_smul for the special case when c₂ = 0, without SMulCommClass S R R.
Quaternion conjugate as an AlgEquiv to the opposite ring.
Equations
- QuaternionAlgebra.starAe = { toFun := MulOpposite.op ∘ star, invFun := star ∘ MulOpposite.unop, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯, map_add' := ⋯, commutes' := ⋯ }
Instances For
Space of quaternions over a type, denoted as ℍ[R].
Implemented as a structure with four fields: re, im_i, im_j, and im_k.
Equations
- Quaternion R = QuaternionAlgebra R (-1) 0 (-1)
Instances For
Space of quaternions over a type, denoted as ℍ[R].
Implemented as a structure with four fields: re, im_i, im_j, and im_k.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The equivalence between the quaternions over R and R × R × R × R.
Equations
- Quaternion.equivProd R = QuaternionAlgebra.equivProd (-1) 0 (-1)
Instances For
The equivalence between the quaternions over R and Fin 4 → R.
Equations
- Quaternion.equivTuple R = QuaternionAlgebra.equivTuple (-1) 0 (-1)
Instances For
Coercion R → ℍ[R].
Equations
Instances For
Equations
- Quaternion.instCoeTC = { coe := Quaternion.coe }
Equations
- Quaternion.instInhabited = inferInstanceAs (Inhabited (QuaternionAlgebra R (-1) 0 (-1)))
Equations
- Quaternion.instSMul = inferInstanceAs (SMul S (QuaternionAlgebra R (-1) 0 (-1)))
Equations
- Quaternion.algebra = inferInstanceAs (Algebra S (QuaternionAlgebra R (-1) 0 (-1)))
Alias of Quaternion.re_im.
Alias of Quaternion.imI_im.
Alias of Quaternion.imJ_im.
Alias of Quaternion.imK_im.
Alias of Quaternion.sub_im_self.
Alias of Quaternion.sub_re_self.
Alias of Quaternion.re_coe.
Alias of Quaternion.imI_coe.
Alias of Quaternion.imJ_coe.
Alias of Quaternion.imK_coe.
Alias of Quaternion.im_coe.
Alias of Quaternion.re_zero.
Alias of Quaternion.imI_zero.
Alias of Quaternion.imJ_zero.
Alias of Quaternion.imK_zero.
Alias of Quaternion.im_zero.
Alias of Quaternion.re_one.
Alias of Quaternion.imI_one.
Alias of Quaternion.imJ_one.
Alias of Quaternion.imK_one.
Alias of Quaternion.im_one.
Alias of Quaternion.re_add.
Alias of Quaternion.imI_add.
Alias of Quaternion.imJ_add.
Alias of Quaternion.imK_add.
Alias of Quaternion.im_add.
Alias of Quaternion.re_neg.
Alias of Quaternion.imI_neg.
Alias of Quaternion.imJ_neg.
Alias of Quaternion.imK_neg.
Alias of Quaternion.im_neg.
Alias of Quaternion.re_sub.
Alias of Quaternion.imI_sub.
Alias of Quaternion.imJ_sub.
Alias of Quaternion.imK_sub.
Alias of Quaternion.im_sub.
Alias of Quaternion.re_natCast.
Alias of Quaternion.imI_natCast.
Alias of Quaternion.imJ_natCast.
Alias of Quaternion.imK_natCast.
Alias of Quaternion.im_natCast.
Alias of Quaternion.re_intCast.
Alias of Quaternion.imI_intCast.
Alias of Quaternion.imJ_intCast.
Alias of Quaternion.imK_intCast.
Alias of Quaternion.im_intCast.
Alias of Quaternion.re_smul.
Alias of Quaternion.imI_smul.
Alias of Quaternion.imJ_smul.
Alias of Quaternion.imK_smul.
Alias of Quaternion.im_smul.
Alias of Quaternion.re_star.
Alias of Quaternion.imI_star.
Alias of Quaternion.imJ_star.
Alias of Quaternion.imK_star.
Square of the norm.
Equations
- Quaternion.normSq = { toFun := fun (a : Quaternion R) => (a * star a).re, map_zero' := ⋯, map_one' := ⋯, map_mul' := ⋯ }
Instances For
Equations
- Quaternion.instNNRatCast = { nnratCast := fun (q : ℚ≥0) => ↑↑q }
Equations
- Quaternion.instRatCast = { ratCast := fun (q : ℚ) => ↑↑q }
Alias of Quaternion.re_ratCast.
Alias of Quaternion.im_ratCast.
Alias of Quaternion.imI_ratCast.
Alias of Quaternion.imJ_ratCast.
Alias of Quaternion.imK_ratCast.
Equations
- Quaternion.instInv = { inv := fun (a : Quaternion R) => (Quaternion.normSq a)⁻¹ • star a }
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
The cardinality of a quaternion algebra, as a type.
Show the quaternion ⟨w, x, y, z⟩ as a string "{ re := w, imI := x, imJ := y, imK := z }".
For the typical case of quaternions over ℝ, each component will show as a Cauchy sequence due to the way Real numbers are represented.
Equations
- One or more equations did not get rendered due to their size.