Clifford Algebras over fields

For Clifford algebras over fields, we introduce the following new types:

  • CliffordAlgebra{T, S} <: Hecke.AbstractAssociativeAlgebra{T} for Clifford algebras
  • CliffordAlgebraElem{T, S} <: Hecke.AbstractAssociativeAlgebraElem{T} for elements of Clifford algebras

Here, T is the element type of the base field and S is the element type of the Gram matrix of the underlying quadratic space, respectively. For example, something like CliffordAlgebra{QQFieldElem, QQMatrix} and CliffordAlgebraElem{QQFieldElem, QQMatrix} would be expected here.

We provide a constructor that, given a quadratic space over some algebraic number field, including the rationals, returns its Clifford algebra.

clifford_algebraMethod
clifford_algebra(qs::QuadSpace) -> CliffordAlgebra

Return the Clifford algebra of the quadratic space qs.

Examples

julia> C = clifford_algebra(quadratic_space(QQ, QQ[0 1; 1 0]))
Clifford algebra of quadratic space with Gram matrix
  [0   1]
  [1   0]
defined over rational field

julia> K, a = quadratic_field(-5); C = clifford_algebra(quadratic_space(K, K[2 a; a 2]))
Clifford algebra of quadratic space with Gram matrix
  [       2   sqrt(-5)]
  [sqrt(-5)          2]
defined over imaginary quadratic field defined by x^2 + 5
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Element construction

The Clifford algebra $C$ of a quadratic $K$-space $V$ of dimension $n$ is a free $K$-algebra of dimension $2^n$. Since in this project, $C$ is constructed based on a Gram matrix $G \in K^{n \times n}$ with respect to some implicitly chosen $K$-basis $(e_i \mid I \subseteq \underline{n})$ of $V$, we represent an element $a \in C$ as its coefficient vector with respect to the $K$-basis $(e_I \mid I \subseteq \underline{n})$ of $C$.

Ordering of the basis elements of the Clifford algebra

The basis elements $e_I$ are enumerated in increasing order of the integer represented by the characteristic vectors of subsets $I$, read as a binary number with the first entry being the least significant bit. For example, if $n = 3$, then this order is $e_\emptyset, e_1, e_2, e_{1,2}, e_{3}, e_{1,3}, e_{2,3}, e_{1,2,3}$, which directly corresponds to the increasing sequence of binary numbers $000, 100, 010, 110, 001, 101, 011, 111$.

As a consequence, in our data structure the element $2 - 2e_2 + 3 e_{2,3} - 5e_{1,2,3}$ is represented by the vector [2, 0, -2, 0, 0, 0, 3, -5].

We provide multiple ways of directly constructing elements of a given Clifford algebra:

  • (C::CliffordAlgebra)() returns the zero element of the Clifford algebra C
  • (C::CliffordAlgebra)(a::T) returns a as an element of C, if possible
  • (C::CliffordAlgebra)(coeffs::Vector) returns the element in C with coefficient vector coeffs

Basis and generators

In addition to constructing elements of a Clifford algebra directly, we provide the methods below to allow for direct access to the canonical basis elements $e_I$ and algebra generators $e_i$. One can then use the usual arithmetic operators +,-,* to obtain arbitrary linear combinations and products of these elements.

basisMethod
basis(C::CliffordAlgebra, i::Int) -> CliffordAlgebraElem

Return the i-th canonical basis vector of the Clifford algebra C.

Examples

julia> C = clifford_algebra(quadratic_space(QQ, QQ[0 1; 1 0]));

julia> basis(C, 1)
[1, 0, 0, 0]

julia> basis(C, 2)
[0, 1, 0, 0]

julia> basis(C, 3)
[0, 0, 1, 0]

julia> basis(C, 4)
[0, 0, 0, 1]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
basisMethod
basis(C::CliffordAlgebra) -> Vector{CliffordAlgebraElem}

Return the canonical basis of the Clifford algebra C.

Examples

julia> C = clifford_algebra(quadratic_space(QQ, QQ[0 1; 1 0]));

julia> basis(C)
4-element Vector{CliffordAlgebraElem{QQFieldElem, QQMatrix}}:
 [1, 0, 0, 0]
 [0, 1, 0, 0]
 [0, 0, 1, 0]
 [0, 0, 0, 1]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
genMethod
gen(C::CliffordAlgebra, i::Int) -> CliffordAlgebraElem

Return the i-th canonical algebra generator of the Clifford algebra C. This is just the image of the i-th basis vector of the underlying quadratic space under the canonical embedding into the Clifford algebra.

Examples

julia> C = clifford_algebra(quadratic_space(QQ, identity_matrix(QQ,3)));

julia> gen(C, 1)
[0, 1, 0, 0, 0, 0, 0, 0]

julia> gen(C, 2)
[0, 0, 1, 0, 0, 0, 0, 0]

julia> gen(C, 3)
[0, 0, 0, 0, 1, 0, 0, 0]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
gensMethod
gens(C::CliffordAlgebra) -> Vector{CliffordAlgebraElem}

Return the vector of canonical algebra generators of the Clifford algebra C, i.e., if gram_matrix(C) is the Gram matrix of the underlying quadratic space with respect to the basis (e1,...,en) then the vector of images under the canonical embedding into the Clifford algebra is returned.

Examples

julia> C = clifford_algebra(quadratic_space(QQ, identity_matrix(QQ, 3)));

julia> gens(C)
3-element Vector{CliffordAlgebraElem{QQFieldElem, QQMatrix}}:
 [0, 1, 0, 0, 0, 0, 0, 0]
 [0, 0, 1, 0, 0, 0, 0, 0]
 [0, 0, 0, 0, 1, 0, 0, 0]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Basic methods for Clifford algebras

zeroMethod
zero(C::CliffordAlgebra) -> CliffordAlgebraElem

Return the additive identity of the Clifford algebra C.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
oneMethod
one(C::CliffordAlgebra) -> CliffordAlgebraElem

Return the multiplicative identity of the Clifford algebra C.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
base_ringMethod
base_ring(C::CliffordAlgebra) -> Ring

Return the base ring of the Clifford algebra C.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
spaceMethod
space(C::CliffordAlgebra) -> QuadSpace

Return the underlying quadratic space of the Clifford algebra C.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
gram_matrixMethod
gram_matrix(C::CliffordAlgebra) -> MatElem

Return the Gram matrix of the free quadratic module with Clifford algebra C.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
dimMethod
dim(C::CliffordAlgebra) -> Int

Return the dimension of the Clifford algebra C over its base ring.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
is_commutativeMethod
is_commutative(C::CliffordAlgebra) -> Bool

Return true if C is commutative and false otherwise.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Basic methods for elements of a Clifford algebra

parentMethod
parent(x::CliffordAlgebraElem) -> CliffordAlgebra

Return the Clifford algebra containing x.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
coeffMethod
coeff(x::CliffordAlgebraElem, i::Int) -> FieldElem

Return the i-th coefficient of the element x.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
coefficientsMethod
coefficients(x::CliffordAlgebraElem) -> Vector

Return the coefficient vector of x wrt the canonical basis of its parent Clifford algebra.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

In addition to the above coeff-method, you can also use standard indexing syntax to conveniently access and modify the coefficients of an element of a Clifford algebra.

#Access the third entry of an element x of a Clifford algebra
x[3]

#Modify the third entry of an element x of a Clifford algebra
x[3] = 2

Functionality for graded parts

The Clifford algebra $C = C(V)$ carries a natural $\mathbb{Z}/2\mathbb{Z}$-grading $C = C_0(V) \oplus C_1(V)$, where $C_i = C_i(V)$ is generated as a $K$-space by the set of basis elements $e_I$ of $C$ with $I \: \mathrm{mod} \: 2 = i$, for $i \in \lbrace 0, 1\rbrace$. In particular, both $C_0$ and $C_1$ are $2^{n-1}$-dimensional subspaces of $C$. Moreover, $C_0$ is a subalgebra of $C$, called the even Clifford algebra of $V$ and the odd part $C_1$ is a $C_0$-bimodule.

Currently, we only provide the following basic functionality on elements for the graded parts of the Clifford algebra:

even_coefficientsMethod
even_coefficients(x::CliffordAlgebraElem) -> Vector

Return the coefficient vector of x with respect to the canonical basis of its parent Clifford algebra, but with all its coefficients that correspond to basis elements with odd grading set to zero.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
even_partMethod
even_part(x::CliffordAlgebraElem) -> CliffordAlgebraElem

Return the projection of x onto the even Clifford algebra

Examples

julia> C = clifford_algebra(quadratic_space(QQ, identity_matrix(QQ,3))); x = C(collect(1:8))
[1, 2, 3, 4, 5, 6, 7, 8]

julia> even_part(x)
[1, 0, 0, 4, 0, 6, 7, 0]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
is_evenMethod
is_even(x::CliffordAlgebraElem) -> Bool

Return 'true' if 'x' is even, i.e. if even_part(x) and x coincide. Otherwise, return false.

source
odd_coefficientsMethod
odd_coefficients(x::CliffordAlgebraElem) -> Vector

Return the coefficient vector of x with respect to the canonical basis of its parent Clifford algebra, but with all its coefficients that correspond to basis elements with even grading set to zero.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
odd_partMethod
odd_part(x::CliffordAlgebraElem) -> CliffordAlgebraElem

Return the projection of x onto the odd Clifford algebra.

Examples

julia> C = clifford_algebra(quadratic_space(QQ, identity_matrix(QQ,3))); x = C(collect(1:8))
[1, 2, 3, 4, 5, 6, 7, 8]

julia> odd_part(x)
[0, 2, 3, 0, 5, 0, 0, 8]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
is_oddMethod
is_odd(x::CliffordAlgebraElem) -> Bool

Return 'true' if 'x' is odd, i.e. if odd_part(x) and x coincide. Otherwise, return false.

source

Center, centroid and quadratic discriminant

The centroid of $V = (V,q)$ (or of $C = C(V)$), denoted by $\mathcal{Z}(V)$, is defined as the centraliser of $C_0(V)$ in $C$. Unless $n = \mathrm{dim}(V) = 0$, in which case $C(V) = C_0(V) = \mathcal{Z}(V) \cong K$, the centroid is always a separable quadratic $K$-algebra. This means that $\mathcal{Z}(V) \cong K[x]/(x^2 - d)$, for some non-zero $d \in K$. The square class $d(K^\times)^2$ is uniquely determined and called the quadratic discriminant of $V$ (or of $C$), denoted by $\mathrm{disq}(V)$. If $n = 0$, we put $\mathrm{disq}(V) \coloneqq 1(K^\times)^2$.

Note that there are also the usual notions of the center of $C$ (not. $Z(C)$) and the discriminant of $V$ (not. $\mathrm{disc}(V)$) as a quadratic $K$-space; see discriminant. The four concepts of the discriminant and quadratic discriminant of $V$ and the center and centroid of $C$ are connected as follows:

  • If the dimension $n$ is even, then $\mathrm{disc}(V) = \mathrm{disq}(V)$ and $C$ is a central simple $K$-algebra, so $Z(C) = K$. Moreover, the centroid is entirely contained in the even Clifford algebra.
  • If the dimension $n$ is odd, then $\mathrm{disc}(V) = 2\mathrm{disq}(V)$ and $Z(C) = \mathcal{Z}(V)$.
basis_of_centerMethod
basis_of_center(C::CliffordAlgebra) -> Vector{CliffordAlgebraElem}

Return a basis of the center of C. It equals basis_of_centroid(C), if and only if dim(space(C)) is odd. Otherwise it contains only the multiplicative identity of C.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
basis_of_centroidMethod
basis_of_centroid(C::CliffordAlgebra) -> Vector{CliffordAlgebraElem}

Return a basis of the centroid of C. Unless dim(space(C)) = 0, it consists of two elements. The first one is the multiplicative identity of C. The square of the second basis element, if present, equals quadratic_discriminant(C); see quadratic_discriminant.

Examples

julia> C = clifford_algebra(quadratic_space(QQ, gram_matrix(root_lattice(:A, 4))));

julia> basis_of_centroid(C)
2-element Vector{CliffordAlgebraElem{QQFieldElem, QQMatrix}}:
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
 [1, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 4]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
quadratic_discriminantMethod
quadratic_discriminant(C::CliffordAlgebra) -> FieldElem

Return the quadratic discriminant of C as an element of base_ring(C).

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
disqMethod
disq(C::CliffordAlgebra) -> FieldElem

Alias for quadratic_discriminant.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source