Clifford Algebras over fields
For Clifford algebras over fields, we introduce the following new types:
CliffordAlgebra{T, S} <: Hecke.AbstractAssociativeAlgebra{T}for Clifford algebrasCliffordAlgebraElem{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_algebra — Method
clifford_algebra(qs::QuadSpace) -> CliffordAlgebraReturn 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 + 5This function is part of the experimental code in Oscar. Please read here for more details.
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$.
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 algebraC(C::CliffordAlgebra)(a::T)returnsaas an element ofC, if possible(C::CliffordAlgebra)(coeffs::Vector)returns the element inCwith coefficient vectorcoeffs
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.
basis — Method
basis(C::CliffordAlgebra, i::Int) -> CliffordAlgebraElemReturn 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]This function is part of the experimental code in Oscar. Please read here for more details.
basis — Method
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]This function is part of the experimental code in Oscar. Please read here for more details.
gen — Method
gen(C::CliffordAlgebra, i::Int) -> CliffordAlgebraElemReturn 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]This function is part of the experimental code in Oscar. Please read here for more details.
gens — Method
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]This function is part of the experimental code in Oscar. Please read here for more details.
Basic methods for Clifford algebras
gram_matrix — Method
gram_matrix(C::CliffordAlgebra) -> MatElemReturn the Gram matrix of the free quadratic module with Clifford algebra C.
This function is part of the experimental code in Oscar. Please read here for more details.
is_commutative — Method
is_commutative(C::CliffordAlgebra) -> BoolReturn true if C is commutative and false otherwise.
This function is part of the experimental code in Oscar. Please read here for more details.
Basic methods for elements of a Clifford algebra
coefficients — Method
coefficients(x::CliffordAlgebraElem) -> VectorReturn the coefficient vector of x wrt the canonical basis of its parent Clifford algebra.
This function is part of the experimental code in Oscar. Please read here for more details.
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] = 2Functionality 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_coefficients — Method
even_coefficients(x::CliffordAlgebraElem) -> VectorReturn 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.
This function is part of the experimental code in Oscar. Please read here for more details.
even_part — Method
even_part(x::CliffordAlgebraElem) -> CliffordAlgebraElemReturn 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]This function is part of the experimental code in Oscar. Please read here for more details.
is_even — Method
is_even(x::CliffordAlgebraElem) -> BoolReturn 'true' if 'x' is even, i.e. if even_part(x) and x coincide. Otherwise, return false.
odd_coefficients — Method
odd_coefficients(x::CliffordAlgebraElem) -> VectorReturn 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.
This function is part of the experimental code in Oscar. Please read here for more details.
odd_part — Method
odd_part(x::CliffordAlgebraElem) -> CliffordAlgebraElemReturn 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]This function is part of the experimental code in Oscar. Please read here for more details.
is_odd — Method
is_odd(x::CliffordAlgebraElem) -> BoolReturn 'true' if 'x' is odd, i.e. if odd_part(x) and x coincide. Otherwise, return false.
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_center — Method
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.
This function is part of the experimental code in Oscar. Please read here for more details.
basis_of_centroid — Method
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]This function is part of the experimental code in Oscar. Please read here for more details.
quadratic_discriminant — Method
quadratic_discriminant(C::CliffordAlgebra) -> FieldElemReturn the quadratic discriminant of C as an element of base_ring(C).
This function is part of the experimental code in Oscar. Please read here for more details.
disq — Method
disq(C::CliffordAlgebra) -> FieldElemAlias for quadratic_discriminant.
This function is part of the experimental code in Oscar. Please read here for more details.