Extending a Finite Field second time

57 views
Skip to first unread message

Evrim Ulu

unread,
May 4, 2015, 10:02:52 AM5/4/15
to sage-s...@googlegroups.com
Hello,

I'm having trouble extending a finite field. Any help would be appreciated.

F16 = GF(16, 'g')
F16_x.<x> = PolynomialRing(F16, 'x')
HH = GF(F16^7, modulus=x^7 + x + 1, name='h')

I basically try to extend 2^4 to 2^4*7 with a degree 7 irreducible.
I get the following.

best,
evrim.


sage: HH = FiniteField(F16^7, modulus=x^7 + x + g^15, name='h')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/all_cmdline.pyc in <module>()
----> 1 HH = FiniteField(F16**Integer(7), modulus=x**Integer(7) + x + g**Integer(15), name='h')

/usr/lib/sagemath/src/sage/structure/factory.pyx in sage.structure.factory.UniqueFactory.__call__ (build/cythonized/sage/structure/factory.c:1207)()
    362             False
    363         """
--> 364         key, kwds = self.create_key_and_extra_args(*args, **kwds)
    365         version = self.get_version(sage_version)
    366         return self.get_object(version, key, kwds)

/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/rings/finite_rings/constructor.pyc in create_key_and_extra_args(self, order, name, modulus, names, impl, proof, check_irreducible, **kwds)
    426             proof = arithmetic()
    427         with WithProof('arithmetic', proof):
--> 428             order = Integer(order)
    429             if order <= 1:
    430                 raise ValueError("the order of a finite field must be at least 2")

/usr/lib/sagemath/src/sage/rings/integer.pyx in sage.rings.integer.Integer.__init__ (build/cythonized/sage/rings/integer.c:6020)()
    688                     return
    689
--> 690                 raise TypeError, "unable to coerce %s to an integer" % type(x)
    691
    692     def __reduce__(self):

TypeError: unable to coerce <class 'sage.modules.free_module.FreeModule_ambient_field_with_category'> to an integer

Evrim Ulu

unread,
May 4, 2015, 10:22:18 AM5/4/15
to sage-s...@googlegroups.com

Here it is:

F16.extension(modulus=x^7+x+1)

John Cremona

unread,
May 4, 2015, 10:56:17 AM5/4/15
to SAGE support
On 4 May 2015 at 15:22, Evrim Ulu <evri...@gmail.com> wrote:
>
> Here it is:
>
> F16.extension(modulus=x^7+x+1)

To quote from the documentation of the extension() method used here:
"Extensions of non-prime finite fields by polynomials are not yet
supported: we fall back to generic code:"

follwed by an example. In your case you get

Univariate Quotient Polynomial Ring in x over Finite Field in g of
size 2^4 with modulus x^7 + x + 1

which does at least know that it is a field, but its type is not
FiniteField but PolynomialQuatientRing .

There has been recent work to improve handling of relative extensions
of finite fields, and perhaps someone who has been involved with that
will comment further.

John Cremona
> --
> You received this message because you are subscribed to the Google Groups
> "sage-support" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to sage-support...@googlegroups.com.
> To post to this group, send email to sage-s...@googlegroups.com.
> Visit this group at http://groups.google.com/group/sage-support.
> For more options, visit https://groups.google.com/d/optout.

Evrim Ulu

unread,
May 4, 2015, 10:58:19 AM5/4/15
to sage-s...@googlegroups.com
I see that, thanks for the info.

Actually F16.extension(..).gen().multiplicative_order() gives
NotImplementedError

So basically, if i want to simulate the behaviour I can take two poly
f(x), g(x) and generate a field using modulus f(g(x)) composition i
guess.

best
evrim.
> You received this message because you are subscribed to a topic in the Google Groups "sage-support" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/topic/sage-support/mVoFYqsfAAY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to sage-support...@googlegroups.com.

Nils Bruin

unread,
May 4, 2015, 11:27:15 AM5/4/15
to sage-s...@googlegroups.com
On Monday, May 4, 2015 at 7:58:19 AM UTC-7, Evrim Ulu wrote:
I see that, thanks for the info.

Actually F16.extension(..).gen().multiplicative_order() gives
NotImplementedError

So basically, if i want to simulate the behaviour I can take two poly
f(x), g(x) and generate a field using modulus f(g(x)) composition i
guess.
 
Only if you care about having that basis (is f(g(x)) guaranteed to be irreducible?) You can also just construct k=GF(2^(4*7),'a') and hope the underlying library takes a smart choice for its generator. You can then see how GF[x]/(x^7+x+1) embeds by asking for (k[x](x^7+x+1)).roots()

Evrim Ulu

unread,
May 4, 2015, 1:04:05 PM5/4/15
to sage-s...@googlegroups.com
Thats right f(g(x)) is not irreducible obviously, shame on me.

I did this to get the order:
sage: (k[x](x^7+x+1)).roots()[0][0].multiplicative_order()
127

First root, multiplicative order.

The real confusion comes from the notation I guess. When you said
k[x](x^7+x+1) i obviously thought we are generating an Ideal. This is
obviously untrue since k[x]() is a function who casts it into the
ring.

This is really confusing, Thanks for your help.

best,
evrim.

Evrim Ulu

unread,
May 4, 2015, 3:25:29 PM5/4/15
to sage-s...@googlegroups.com
One more question If I may ask.

Is there a way to get the minimal poly of some conjugates over GF(2^4)?
I always end up degree 28 in this case, i want to see some of degree 7.
I've tried to embed it into GF(2^4)[x] and factor yet no luck.


Best,
evrim.
Reply all
Reply to author
Forward
0 new messages