originally posted by Anonymous
I've been checking quaternion support in Axiom. And I've found out
that it is a bit too restricted. More exactly it seems to be aimed
on Hamiltonian quaternions only:
axiom
q := quatern(0,1,0,0)
Type: Quaternion(Integer)
axiom
q**2
Type: Quaternion(Integer)
This is fine over the reals. But only there. On any field with bigger
group of square classes (e.g. rationals, algebraic rationals,...) we
have far more quaternion algebras. Namely for any two square classes
, there exist a
quaternion algebra
with and .
Is there a way to declare such a quaternions in Axiom?
From the description of quatern on in section
9.64 Quaternion, page 734 of the
Axiom Book
I think that what you want is not possible with this domain.
But since the quaternions can be thought of as a Clifford algebra,
please refer to section
9.10.2 The Quaternion Numbers as a Clifford Algebra,
page 483 of
the Book
For example
axiom
K := Fraction Polynomial Integer
Type: Type
axiom
m := matrix [ [a,0],[0,b] ]
Type: Matrix(Polynomial(Integer))
axiom
H := CliffordAlgebra(2, K, quadraticForm m)
There are 1 exposed and 0 unexposed library operations named
quadraticForm having 1 argument(s) but none was determined to be
applicable. Use HyperDoc Browse, or issue
)display op quadraticForm
to learn more about the available operations. Perhaps
package-calling the operation or using coercions on the arguments
will allow you to apply the operation.
Cannot find a definition or applicable library operation named
quadraticForm with argument type(s)
Matrix(Polynomial(Integer))
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
i: H := e(1)
There are 1 exposed and 0 unexposed library operations named e
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op e
to learn more about the available operations. Perhaps
package-calling the operation or using coercions on the arguments
will allow you to apply the operation.
Cannot find a definition or applicable library operation named e
with argument type(s)
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
j: H := e(2)
There are 1 exposed and 0 unexposed library operations named e
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op e
to learn more about the available operations. Perhaps
package-calling the operation or using coercions on the arguments
will allow you to apply the operation.
Cannot find a definition or applicable library operation named e
with argument type(s)
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
k: H := i * j
Type: Polynomial(Integer)
axiom
i^2
Type: Polynomial(Integer)
axiom
j^2
Type: Polynomial(Integer)
axiom
k^2
Type: Polynomial(Integer)
-