Ask Your Question
1

Finite Fields: Basic Question

asked 2019-09-13 10:36:37 -0600

StormyTeacup gravatar image

updated 2019-09-13 11:34:07 -0600

tmonteil gravatar image

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 flag offensive close merge delete

2 answers

Sort by ยป oldest newest most voted
1

answered 2019-09-13 11:33:26 -0600

tmonteil gravatar image

updated 2019-09-13 11:35:48 -0600

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.

edit flag offensive delete link more

Comments

Now this is just a perfect little summary of everything I wanted to know! Thank you very much! :D

StormyTeacup gravatar imageStormyTeacup ( 2019-09-13 13:49:00 -0600 )edit
1

answered 2019-09-13 11:31:47 -0600

rburing gravatar image

You have to define a = k.gen().

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

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

2 followers

Stats

Asked: 2019-09-13 10:36:37 -0600

Seen: 37 times

Last updated: Sep 13