Dedekind 0.0.0
A structuralist C++23 Module Library
Loading...
Searching...
No Matches
quaternion.cppm File Reference

The Quaternion Division Ring (ℍ). More...

#include <concepts>
import dedekind.numbers:rational;
import dedekind.geometry;
import dedekind.category;
Include dependency graph for quaternion.cppm:

Classes

class  dedekind::numbers::Quaternion< R >
 Hamilton's hypercomplex numbers q = a + bi + cj + dk. More...

Namespaces

namespace  dedekind::numbers

Concepts

concept  dedekind::numbers::IsQuaternionScalar
 Scalar type suitable as quaternion components.

Typedefs

using dedekind::numbers::ℍ_ℚ = Quaternion<Rational<>>

Variables

constexpr ℍ_ℚ dedekind::numbers::q_i
constexpr ℍ_ℚ dedekind::numbers::q_j
constexpr ℍ_ℚ dedekind::numbers::q_k
constexpr ℍ_ℚ dedekind::numbers::q_neg1

Detailed Description

The Quaternion Division Ring (ℍ).

@partition :quaternion

quaternion__Algebraic_Structure

The quaternions ℍ form a non-commutative division ring (a skew-field):

  • (ℍ, +) is an abelian group
  • (ℍ \ {0}, ×) is a group (non-abelian)
  • ij = k, jk = i, ki = j, ji = -k, kj = -i, ik = -j
  • i² = j² = k² = ijk = -1

quaternion__Vector_Space_Embedding

Quaternions embed into ℝ⁴ via q = a + bi + cj + dk ↦ (a, b, c, d). This identifies ℍ as a 4-dimensional real vector space.

quaternion__Matrix_Representation

The left-multiplication map L_q : ℍ → ℍ, p ↦ q×p, is an ℝ-linear map. In the basis {1, i, j, k} its matrix is: L_q = ⎡ a -b -c -d ⎤ ⎢ b a -d c ⎥ ⎢ c d a -b ⎥ ⎣ d -c b a ⎦

This satisfies: as_matrix(q) * as_vector(p) == as_vector(q * p).

Note
"I think I have already said somewhere that mathematics is the art of giving the same name to different things." – Henri Poincare, Science and Method (1908)