Bill Allombert on Wed, 04 Feb 2026 11:11:42 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: what's going on here?


On Wed, Feb 04, 2026 at 09:08:27AM +0000, Chris Wuthrich wrote:
> My guess is, but I haven't looked at the code behind it: The effort relates
> to searching on an integral model. It takes some effort to find the
> generator in the minimal model. If it did search on the initial model then
> it might find it earlier.
> 
> e2 = ellminimalmodel(e);
> ? ellrank(e2)
> %4 = [1, 1, 2, []]
> ? ellrank(e2,1)
> %5 = [1, 1, 2, [[-4009511/4, 876467493/8]]]

Yes, this is exactly what happens.
If you use ellratpoints, then a naive search is done on the original model:
? E = ellinit([0, -3860/957, 0, 965/957, 0]);
? F = ellintegralmodel(E);
? M = ellminimalmodel(E);
? ellratpoints(E,10)
%127 = [[0,0],[1/4,1/8],[1/4,-1/8]]
? ellratpoints(F,100000)
%130 = [[0,0]]
? ellratpoints(F,1000000)
%131 = [[0,0],[915849/4,876467493/8],[915849/4,-876467493/8]]
? ellratpoints(M,1000000)
%133 = []
? ellratpoints(M,10000000)
%134 = [[-1231340,0],[2462680,1767588570],[2462680,-1767588570],[-4009511/4,876467493/8],[-4009511/4,-876467493/8]]

On the other end, ellrank always uses the minimal model, because this makes the computation easier
and we expect the points to be smaller on this model.

If you run
\g3
ellrank(E,1)
it ends by
  reduced quartic: Y^2 = x^4+67*x^3+1505250*x^2-59170157*x+735894967009
Found point: [-4009511/4,876467493/8]
%138 = [1,1,2,[[1/4,1/8]]]

So it needs to find the point [-4009511/4,876467493/8] on the quartic, and then
by applying the change of coordinate, get the small point [1/4,1/8].

Note that once you know a point on a curve, you can always do a basis change to move it 
to [0,0]...

Cheers,
Bill.