Bill Allombert on Tue, 27 Feb 2007 14:10:12 +0100

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

Re: Variable ordering

On Mon, Feb 26, 2007 at 06:32:20AM -0800, William Hart wrote:
> So here's the problem. In the function
> toEllipticCurve, the first print statement prints
> something like the following:
> u^3 + 6*u^2 + (-17*v + Mod(-17*w + 12, 2*w^3 - 34*w +
> 99))*u + (2*v^3 + Mod(6*w, 2*w^3 - 34*w + 99)*v^2 +
> Mod(6*w^2 - 34, 2*w^3 - 34*w + 99)*v)
> As you can see, it is a polynomial in u and v with
> coefficients in Z[w]/(3*w^3+2*w^2+w-1).
> Now all I want to do is replace u with U/W and v with
> V/W in this polynomial. I've tried using the Pari
> subst function (with appropriate modifications to the
> code). And I've tried exactly what I've written in the
> program  trace above. But it doesn't work. Here is the
> result:
> Mod(6*W^2*V*w^2 + (-17*W^2*U + 6*W*V^2)*w + (U^3 +
> 6*W*U^2 + (-17*W*V + 12*W^2)*U + (2*V^3 - 34*W^2*V)),
> 2*w^3 - 34*w + 99)

You need to create U,V,W before w.  Add at the start of your script
to ensure that.

Beside you can use substvec(...,[u,v],[U/W,V/W]) which is a bit
more robust than subst(subst(...,u,U/W),v,V/W).

> Now I realise this is a Pari variable order issue, and
> indeed, if I change the order of the Pari variables
> using the reorder command, it works just fine. If I

Do not use reorder() it has been removed in the 2.4 series because
it had major issues.

> Does someone know how to do these kinds of
> substitutions without having to use the Pari reorder
> command, or how to use the reorder command in this
> instance to make it return a correct answer?

You should create your variables in the correct order from the start:
do u;v;U;V;W;w and not u;v;w,U;V;W. We are working on a way to allow
users to declare variables with fixed priority.