This page demonstrates some features of Axiom.
Let's begin with the construction of a polynomial ring
in the indeterminate
with coefficients from the ring
of square matrices with entries that are
polynomials
where
is the Galois field with 3 elements.
fricas
F := PrimeField 3
Type: Type
fricas
P := UnivariatePolynomial(x, F)
Type: Type
fricas
S := SquareMatrix(2, P)
Type: Type
fricas
R := UnivariatePolynomial(z, S)
Type: Type
OK, now we have the type
. Let's construct an element.
We start with constructing some coefficients first.
fricas
s1:S := matrix[[2*x +1 ,x^2-1],[0,x-1]]
Type: SquareMatrix
?(2,
UnivariatePolynomial
?(x,
PrimeField
?(3)))
fricas
s2 := transpose s1
Type: SquareMatrix
?(2,
UnivariatePolynomial
?(x,
PrimeField
?(3)))
And now we build the polynomial.
fricas
r: R := z^2 + s1*z + s2
Type: UnivariatePolynomial
?(z,
SquareMatrix
?(2,
UnivariatePolynomial
?(x,
PrimeField
?(3))))
Of course, since we work in characteristic 3, the following sum must be zero.
fricas
r+ 2*r
Type: UnivariatePolynomial
?(z,
SquareMatrix
?(2,
UnivariatePolynomial
?(x,
PrimeField
?(3))))
Note that this is not the integer 0, but it is still a polynomial of type
.
Asking for the degree of
is no problem, because
is a univariate polynomial ring.
fricas
degree r
Let us add 1 to
.
fricas
r+1
Type: UnivariatePolynomial
?(z,
SquareMatrix
?(2,
UnivariatePolynomial
?(x,
PrimeField
?(3))))
Oh, interesting, Axiom figured out that by 1 we actually meant the polynomial 1 in
.
fricas
one: R := 1
Type: UnivariatePolynomial
?(z,
SquareMatrix
?(2,
UnivariatePolynomial
?(x,
PrimeField
?(3))))
No no, it is not the unit square matrix. It is the unit square matrix multiplied
by
. Look at the type.
So let's see what happens if we multiply
by itself.
fricas
r2 := r*r
Type: UnivariatePolynomial
?(z,
SquareMatrix
?(2,
UnivariatePolynomial
?(x,
PrimeField
?(3))))
Well, of course there is a common factor of
an
. Can Axiom find it?
fricas
gcd(r2, r)
There are 4 exposed and 3 unexposed library operations named gcd
having 2 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op gcd
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 gcd
with argument type(s)
UnivariatePolynomial(z,SquareMatrix(2,UnivariatePolynomial(x,PrimeField(3))))
UnivariatePolynomial(z,SquareMatrix(2,UnivariatePolynomial(x,PrimeField(3))))
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
Ooops. What does that say?:
Cannot find a definition or applicable library operation named gcd.
Ah, of course, the coefficient ring of
is the matrix ring
and this is
unfortunately not a field (not even an integral domain), so we cannot simply
apply Euclid's algorithm. Axiom simply stops by telling you that
there is no applicable operation.
Of course, Axiom can compute a gcd of univariate polynomials.
fricas
p1:=s1(1,1)
Type: UnivariatePolynomial
?(x,
PrimeField
?(3))
fricas
p2:=s1(1,2)
Type: UnivariatePolynomial
?(x,
PrimeField
?(3))
fricas
gcd(p1,p2)
Type: UnivariatePolynomial
?(x,
PrimeField
?(3))
OK, let us do that again.
fricas
q1: UP(x, INT) := 2*x+1
Type: UnivariatePolynomial
?(x,
Integer)
fricas
q2: UP(x, INT) := x^2+2
Type: UnivariatePolynomial
?(x,
Integer)
fricas
gcd(q1,q2)
Type: UnivariatePolynomial
?(x,
Integer)
Nice! Depending on where I compute these polynomials either
have a common factor or are coprime.
Well, all depends on the underlying ring, of course.