# Finite Fields: Basic Question

Good people!

So I'm currently working on a problem where I am dealing with a variety of variables which takes values in finite fields. After originally having tried for a week to do this the hard way from scratch in Python, the other day, my supervisor suggested that, hey, you know, SageMath already comes with the full functionality of finite fields, so why not give it a go? And so I installed it just yesterday!

I'm having problems finding the appropriate tutorials online to figure out the answer for a problem that is quite simple. Specifically, let's say that I create the finite field of order $3^2$,

k = GF(9, 'a')


Then that has elements ${0,a,a + 1,2a + 1,2,2a,2a + 2,a + 2,1}$. Now, I just want to start assigning various variables values in this field, for example, to just take something out of the blue, set $x = 2a+1$, then my natural assumption would be that, "ah, you just write:"

x = 2*a+1


But, well, turns out you cannot do that, which in retrospect is fairly obvious, since $k$ is some sort of array or another.

Can someone please give either some pointer or direct me to a place where it is explained how you work with variables that take values in a finite field?

edit retag close merge delete

Sort by » oldest newest most voted

When you write

sage: k = GF(9, 'a')


The Python name k points to the field with 9 elements:

sage: k
Finite Field in a of size 3^2


But the Python name a does not point to anything:

sage: a
NameError: name 'a' is not defined


If you want to get the generator of the field, you can do:

sage: k.gen()
a
sage: k.gen()^8
1


So, if you want the Python name a to point to that generator of the field, you can just do:

sage: a = k.gen()
sage: a
a
sage: a^2
a + 1

sage: x = 2*a+1
sage: x
2*a + 1
sage: x^3
a


Now, Sage has some magic to do that, you could also do (it is very convenient for objects with several generators):

sage: k.inject_variables()
Defining a


Also, there is something else, which is convenient for mathematicians, but violates the Python language (there is a specific Sage preparsing behind the scenes), you can do:

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


This defines both k and a at the same time.

more

Now this is just a perfect little summary of everything I wanted to know! Thank you very much! :D You have to define a = k.gen().

The shorthand notation to define both k and a is k.<a> = GF(9).

more