How to define a homomorphism between two algebras

88 views
Skip to first unread message

Irene

unread,
Apr 24, 2014, 11:55:34 AM4/24/14
to sage-s...@googlegroups.com
I have defined two extensions A1 and A2 over a finite field Fp2 with generator b,

A1.<theta>=Fp2.extension(Ep)
A2.<z>=Fp2.extension(Q)

being Ep and Q polynomials.

Now I want to define a homomorphism between those algebras. I have already computed alpha, that is the element in A2 where theta is mapped, but Sage doesn't allow me to define it as:

A1.hom([alpha], A2)

Do you know how to do it?

Irene

Peter Bruin

unread,
Apr 24, 2014, 5:33:52 PM4/24/14
to sage-s...@googlegroups.com
Can you post a complete example?  The following (simple) example works for me (at least in 6.2.beta8):

sage: F=GF(5).extension(2)
sage: A1.<y>=F.extension(x^2+3)
sage: A2.<z>=F.extension(x^2+3)
sage: A1.hom([z],A2)
Ring morphism:
  From: Univariate Quotient Polynomial Ring in y over Finite Field in a of size 5^2 with modulus y^2 + 3
  To:   Univariate Quotient Polynomial Ring in z over Finite Field in a of size 5^2 with modulus z^2 + 3
  Defn: y |--> z

Peter


Op donderdag 24 april 2014 16:55:34 UTC+1 schreef Irene:

Irene

unread,
Apr 25, 2014, 3:26:23 AM4/25/14
to sage-s...@googlegroups.com
Yes, this is the example: 

p=3700001
Fpr=GF(pow(p,2),'b')
b=Fpr.gen()
FFpr.<x>=PolynomialRing(Fpr)
EP= x^6 + (973912*b + 2535329)*x^5 + (416282*b + 3608920)*x^4 + (686636*b + 908282)*x^3 + (2100014*b + 2063451)*x^2 + (2563113*b + 751714)*x + 2687623*b + 1658379
A1.<theta>=Fpr.extension(EP)
Qx=x^6 + (1028017*b + 514009)*x^5 + 2*x^4 + (1028017*b + 514008)*x^3 + 2*x^2 + (1028017*b + 514009)*x + 1

A2.<z>=Fpr.extension(Qx)
alpha=(1636197*b + 1129870)*z^5 + (1120295*b + 3059639)*z^4 + (2637744*b + 3273090)*z^3 + (3564174*b + 890965)*z^2 + (3503957*b + 2631102)*z + 3343290*b + 146187
f=A1.hom([alpha],A2)

John Cremona

unread,
Apr 25, 2014, 4:35:05 AM4/25/14
to SAGE support
On 25 April 2014 08:26, Irene <irene....@gmail.com> wrote:
> Yes, this is the example:
>
> p=3700001
> Fpr=GF(pow(p,2),'b')
> b=Fpr.gen()
> FFpr.<x>=PolynomialRing(Fpr)
> EP= x^6 + (973912*b + 2535329)*x^5 + (416282*b + 3608920)*x^4 + (686636*b +
> 908282)*x^3 + (2100014*b + 2063451)*x^2 + (2563113*b + 751714)*x + 2687623*b
> + 1658379
> A1.<theta>=Fpr.extension(EP)
> Qx=x^6 + (1028017*b + 514009)*x^5 + 2*x^4 + (1028017*b + 514008)*x^3 + 2*x^2
> + (1028017*b + 514009)*x + 1
>
> A2.<z>=Fpr.extension(Qx)
> alpha=(1636197*b + 1129870)*z^5 + (1120295*b + 3059639)*z^4 + (2637744*b +
> 3273090)*z^3 + (3564174*b + 890965)*z^2 + (3503957*b + 2631102)*z +
> 3343290*b + 146187
> f=A1.hom([alpha],A2)

This fails because Qx(alpha) is not 0. You need to map theta to a
root of Qx in A2. UNfortunately simple things like

sage: Qx.roots(A1, multiplicities=False)

sage: Qx.change_ring(A1).factor()

fail with a not-implemented error. I think this is because A1 and A2
have not been constructed as fields, though both A1.is_field() and
A2.is_field() return True. It might work to construct GF(p^12)
separately and define isomorphims from both A1 and A2 to it.

Unfortunately you are discovering that the ability of Sage to work
with relative extensions of finite fields is not as good as it should
be. There has been fairly recent work on this, and maybe Peter Bruin
knows what stage that has reached.

John
> --
> 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.

Peter Bruin

unread,
Apr 26, 2014, 10:37:20 AM4/26/14
to sage-s...@googlegroups.com
Hello,

In the future (hopefully soon; it is being worked on as I write this, see http://trac.sagemath.org/ticket/14990) Sage will have algebraic closures of finite fields; once we have those, you can use the subfield of the appropriate degree inside the algebraic closure instead of creating fields with the extension() method.

That aside, I agree with John that you can probably avoid some problems by first creating F_{p^12} and then constructing the other fields inside that.

Peter


Op vrijdag 25 april 2014 09:35:05 UTC+1 schreef John Cremona:
Reply all
Reply to author
Forward
0 new messages