Ask Your Question

Leonhard Moosbrugger's profile - activity

2020-06-09 13:42:37 +0200 received badge  Famous Question (source)
2019-07-10 18:12:35 +0200 received badge  Notable Question (source)
2017-03-14 11:12:00 +0200 received badge  Popular Question (source)
2016-12-14 20:03:47 +0200 received badge  Notable Question (source)
2016-12-14 20:03:47 +0200 received badge  Popular Question (source)
2014-06-29 20:58:14 +0200 received badge  Popular Question (source)
2014-06-29 20:58:14 +0200 received badge  Notable Question (source)
2014-06-29 20:58:14 +0200 received badge  Famous Question (source)
2013-06-27 13:27:46 +0200 commented answer Computing maximal orders in relative extensions

Thanks both of your replies. One example of the Qa12 I ended up with is: Number Field in a with defining polynomial x^20 - 50*x^18 + 1015*x^16 - 11000*x^14 + 70255*x^12 - 134825*x^10 - 1299365*x^8 + 9691600*x^6 - 25842350*x^4 + 28129275*x^2 + 147598569 I just checked, and it seems that polred doesn't reduce that polynomial any further. If I remember correctly, the MAGMA code would take about 15-30 seconds, so it might well be that the problem was the different starting order. I'll try to see if Marco's workaround also hangs for me, or if something similar works in PARI. I'll let you know if I find anything out on the problem!

2012-08-27 14:22:35 +0200 asked a question Plotting hyperelliptic curves (and the group law)

I am trying to create plots of hyperelliptic curves (over the rationals) using SAGE. Moreover, I want to plot the integral points on these curves (within a certain range, obviously) and illustrate the group law on the Jacobian. In other words, I want to create an image similar to the one used here: Hyperelliptic curve plot. Plotting the curve itself is not hard. One may use, say, the following code:

Qx.<x> = QQ[]
f = x^5 + 3
C = HyperellipticCurve(f)
image = plot(C)
image.save('image.png')

I am mainly interested in how to plot integral points on said curve and how to illustrate "addition" of these points (in the sense of addition of the corresponding elements on the Jacobian). Do you know how to do this? Any help would be greatly appreciated.

2012-08-14 09:58:15 +0200 asked a question pariError when computing discriminant

Consider the following piece of code:

Qx.<x> = PolynomialRing(Rationals())
K = NumberField(x^2+1, 'a')
OOK = K.ring_of_integers()    #K.maximal_order() has same effect
OOa = OOK.extension(x^3+2, 'alpha'); OOa

This returns "Univariate Quotient Polynomial Ring in alpha over Maximal Order in Number Field in a with defining polynomial x^2 + 1 with modulus alpha^3 + 2". Why is this the case? I would have expected it to have the same effect as

Qx.<x> = PolynomialRing(Rationals())
00b = ZZ.extension([x^3+2,x^2+1], 'beta,b'); OOb

Namely, that it returns "Relative Order in Number Field in beta with defining polynomial x^3 + 2 over its base field".

Moreover, and perhaps more interestingly, when one tries to run the command OOa.discriminant() after the first piece of code, "PariError: (5)" is returned. Running the analogous command, OOb.absolute_discriminant() after the second piece of code, one gets -746496. I presume the fact that these two commands return different results is explained in Quotients of Univariate Polynomial Rings when it says

The discriminant of the quotient polynomial ring need not equal the discriminant of the corresponding number field, since the discriminant of a number field is by definition the discriminant of the ring of integers of the number field.

even though we are not computing the discriminant of a number field in the second piece of code. However, why is a pariError returned when trying to compute the discriminant of OOa? Surely this must be somehow linked to the fact that the two blocks of code return completely different things. Is this indeed the case? Any help would be appreciated.

2012-08-07 17:38:18 +0200 received badge  Student (source)
2012-08-04 11:33:43 +0200 asked a question Computing maximal orders in relative extensions

As part of a project, I am translating some MAGMA code to SAGE. The relevant piece of code computes the maximal order of the relative extension of Qa12, a number field of degree 20, by the polynomial y^2 - kappa12:

    subOrderK:=ext<OO | y^2-kappa12>;
    subOrderK:=AbsoluteOrder(subOrderK);
    D:=Discriminant(subOrderK);
    for p in PrimeDivisors(D) do
        subOrderK:=pMaximalOrder(subOrderK,p);
    end for;
    OOK:=subOrderK;

Here OO is the ring of integers (i.e. the maximal order) of Qa12. As I did not see a way to translate this word for word (if I am missing something, please point it out), I tried a different approach. Here is my code (in SAGE):

    L.<c> = Qa12.extension(y^2-kappa12)
    L.<alpha> = L.absolute_field()
    subOrderK = L.order(alpha)
    D = subOrderK.discriminant()
    for p in factor(D):
        subOrderK = L.maximal_order(p[0])
    OOK = subOrderK

Note that y^2-kappa12 has coefficients coerced in Qa12 and we make sure that it is indeed irreducible in Qa12 (i.e. we make sure that kappa12 is not the square of an element of Qa12). You may notice immediately that my for-loop is a rather clumsy translation of the corresponding loop in the MAGMA code. I was hoping that SAGE would "remember" the previous value of subOrderK, thus having the same effect as the MAGMA-command pMaximalOrder(subOrderK,p). However, my problem arises even earlier than that: the number computed by subOrderK.discriminant() is absurdly huge - too big, in fact, for there to be any hope to factorise it in any reasonable amount of time.

The obvious alternative of simply writing

L.<c> = Qa12.extension(y^2-kappa12)
L.<alpha> = L.absolute_field()
OOK = L.maximal_order()

is also extremely time-intensive; I have not yet seen this finish.

I was hoping someone could help either with improving my code, or with a radically different approach to the problem.

NOTE: Though I have tried to make this question understandable, if some parts remain opaque, please do say so. I'll do my best to correct it.