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.
axiom
F:= PrimeField 3
Type: Domain
axiom
P:=UnivariatePolynomial(x, F)
Type: Domain
axiom
S := SquareMatrix(2, P)
Type: Domain
axiom
R := UnivariatePolynomial(z, S)
Type: Domain
OK, now we have the type
. Let's construct an element.
We start with constructing some coefficients first.
axiom
s1:S := matrix[[2*x +1 ,x^2-1],[0,x-1]]
Type: SquareMatrix
?(2,UnivariatePolynomial
?(x,PrimeField
? 3))
axiom
s2 := transpose s1
Type: SquareMatrix
?(2,UnivariatePolynomial
?(x,PrimeField
? 3))
And now we build the polynomial.
axiom
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.
axiom
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.
axiom
degree r
So let's see what happens if we multiply
by itself.
axiom
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?
axiom
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 an integral domain. So Axiom simply stops by telling you that
there is no applicaple operation.
Of course, Axiom can compute a gcd of univariate polynomials.
axiom
p1:=s1(1,1)
Type: UnivariatePolynomial
?(x,PrimeField
? 3)
axiom
p2:=s1(1,2)
Type: UnivariatePolynomial
?(x,PrimeField
? 3)
axiom
gcd(p1,p2)
Type: UnivariatePolynomial
?(x,PrimeField
? 3)
OK, let us do that again.
axiom
q1: UP(x, INT) := 2*x+1
Type: UnivariatePolynomial
?(x,Integer)
axiom
q2: UP(x, INT) := x^2+2
Type: UnivariatePolynomial
?(x,Integer)
axiom
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.