# Revision history [back]

The error in your math is that the group and ring structures on F9 are not the same as those on Z/9Z. As you know, Z/nZ is a field only when n is prime.

The error in your code comes from calling GF(9). You get the same error by just this:

sage: GF(9)
...
ValueError: parameter 'conway' is required if no name given


Instead, you need to define the generator at the time you instantiate GF(9). Do this:

sage: F.<a> = GF(9)


Then F is defined, with a as a generator (over Z/3Z). You can check its minimal polynomial:

sage: p = a.minpoly()
sage: p
x^2 + 2*x + 2
sage: p.parent()
Univariate Polynomial Ring in x over Finite Field of size 3


The rest of your code should work from there.

sage: R.<x> = PolynomialRing(F)
sage: f = x^4 + x^2 - 1
sage: f in R
True
sage: f.factor()
(x^2 + a) * (x^2 + 2*a + 1)


The error in your math is that the group and ring structures on F9 are not the same as those on Z/9Z. As you know, Z/nZ is a field only when n is prime.

The error in your code comes from calling GF(9). You get the same error by just this:

sage: GF(9)
...
ValueError: parameter 'conway' is required if no name given


Instead, you need to define the generator at the time you instantiate GF(9). Do this:

sage: F.<a> = GF(9)


Then F is defined, with a as a generator (over Z/3Z). You can check its minimal polynomial:

sage: p = a.minpoly()
sage: p
x^2 + 2*x + 2
sage: p.parent()
Univariate Polynomial Ring in x over Finite Field of size 3


The rest of your code should work from there.

sage: R.<x> = PolynomialRing(F)
sage: f = x^4 + x^2 - 1
sage: f in R
True
sage: f.factor()
(x^2 + a) * (x^2 + 2*a + 1)


Edit: In Sage 7.2 you can call GF(9) without specifying a polynomial, and Sage will pick one for you.

The error in your math is that the group and ring structures on F9 are not the same as those on Z/9Z. As you know, Z/nZ is a field only when n is prime.

The error in your code comes from calling GF(9). You get the same error by just this:

sage: GF(9)
...
ValueError: parameter 'conway' is required if no name given


Instead, you need to define the generator at the time you instantiate GF(9). Do this:

sage: F.<a> = GF(9)


Then F is defined, with a as a generator (over Z/3Z). You can check its minimal polynomial:

sage: p = a.minpoly()
sage: p
x^2 + 2*x + 2
sage: p.parent()
Univariate Polynomial Ring in x over Finite Field of size 3


The rest of your code should work from there.

sage: R.<x> = PolynomialRing(F)
sage: f = x^4 + x^2 - 1
sage: f in R
True
sage: f.factor()
(x^2 + a) * (x^2 + 2*a + 1)


Edit: In Sage 7.2 you can call GF(9) without specifying a polynomial, and generator name or a polynomial. Your original code works in Sage will pick one for you.

7.2.