[Next] [Prev] [Right] [Left] [Up] [Index] [Root]
Morphisms

Morphisms

Isogenies and isomorphisms

Subsections

Creation functions

Morphism(E, F, psi , phi, omega ) : CurveEll, CurveEll, RngMPolElt, RngMPolElt, RngMPolElt -> Map
Isogeny(E, F, psi , phi, omega ) : CurveEll, CurveEll, RngMPolElt, RngMPolElt, RngMPolElt -> Map
Given elliptic curves E and F defined over the same field K, and multivariate polynomials psi , phi, omega in K[x, y] with psi and phi monic, satisfying deg phi > deg psi ^2, this function returns an isogeny between E and F viewed as a map Phi : E[bar K] -> F[bar K].

If the degree of the isogeny is odd, the map is defined by:

Phi((0:1:0)) = (0:1:0), and

Phi((X:Y:1))= cases( (0:1:0)&if psi (X)=0, cr ((phi(X)/ psi ^2(X)): ( omega (X, Y)/ psi ^3(X)): 1)&if psi (X) != 0cr) for any point (X:Y:1) defined over K. A subtle problem occurs when the isogeny has even degree. In this case, psi should really be a product psi = psi _2 tilde psi where psi _2 represents the two - torsion and should properly be represented as a multivariate polynomial. In order that psi be univariate, we assume that psi is presented as psi = psi _2^2 tilde psi . This is consistent with the way the two - torsion in handled when returning univariate division polynomials. In effect, it means we are counting the included two - torsion points twice. In this case the isogeny is defined by:

Phi((0:1:0)) = (0:1:0), and

Phi((X:Y:1))= cases( (0:1:0)&if psi (X)=0 or psi _2^2(X)=0, cr ((phi(X) /( psi _2^2 tilde psi ^2(X))): ( omega (X, Y)/( psi _2^3 tilde psi ^3(X))): 1)&if psi (X) != 0cr) for any point (X:Y:1) defined over K..


Example Elcu_Isogeny (H53E14)

This example is taken from Silverberg, The Arithmetic of Elliptic Curves, p.74

> FF<w> := FiniteField(101);
> P<x, y> := PolynomialRing(FF, 2);
> a := FF!2;
> b := FF!3;
> r := a^2 - 4*b;
> assert r ne 0;
> E1 := EllipticCurve([0, a, 0, b, 0]);
> E2 := EllipticCurve([0, -2*a, 0, r, 0]);
> m := Isogeny(E1, E2, x, x^2 + a*x + b, y*(b-x^2));
> m_star := Isogeny(E2, E1, 2*x, x^2 - 2*a*x + r, y*(r-x^2));
> { m_star(m(p)) eq 2*p : p in RationalPoints(E1)} eq { true };
true

Isomorphism(E, F, [r, s, t, u]) : CurveEll, CurveEll, Seq -> Map
Given elliptic curves E and F defined over the same field K, and four elements r, s, t, u of K (where u != 0), returns the isomorphism E -> F which maps (x, y) |-> (u^2x + r, u^3 y + su^2 x + t). This function returns an error if the values passed do not define an isomorphism.
IsomorphismToIsogeny(I) : Map -> Map
Returns the isogeny with the same action as the isomorphism I.
IsIsomorphism(I) : BoolElt, Map -> Map
Returns true iff the isogeny I has the same action as some isomorphism, in which case it also returns the isomorphism.

Example Elcu_Isomorphism (H53E15)

An example of how to use the previous two functions.

> FF := GF(23);
> E0 := EllipticCurve([FF | 1,1]);
> E1 := EllipticCurve([FF | 3,2]);
> b, iso := IsIsomorphic(E0, E1);
> b;
true
> isog := IsomorphismToIsogeny(iso);
> assert Degree(isog) eq 1;
> b, new_iso := IsIsomorphism(isog);
> b;
true
> inv := Inverse(new_iso);
> P := Random(E0);
> inv(isog(P)) eq P;
true

Automorphism(E, [r, s, t, u]) : CurveEll, CurveEll, Seq -> Map
Given an elliptic curve E defined over a field K, and four elements r, s, t, u of K (where u != 0), returns the isomorphism E -> E which maps (x, y) |-> (u^2x + r, u^3 y + su^2 x + t). This function returns an error if the values passed do not define an isomorphism.
IsomorphismImage(E, [r, s, t, u]) : CurveEll, Seq -> Map, CurveEll
Given an elliptic curve E defined over a field K, and four elements r, s, t, u of K (where u != 0), returns an elliptic curve F isomorphic to E by the isomorphism (x, y) |-> (u^2x + r, u^3 y + su^2 x + t), and the isomorphism itself.
TranslationMap(E, P) : CurveEll, CurveEllPt -> Map
Given a rational point P on E, returns the morphism [P] : E -> E defined by [P](Q) = P + Q, for all rational points Q of E.
RationalMap(E, F, i, t) : CurveEll, CurveEllPt -> Map
Let i be an isogeny and t be a translation map t_P: E -> E where t_P(Q) = P + Q for some rational point P in E. This function returns the rational map phi : E -> F obtained by composing i and t (applying t first). Any rational map E -> F can be represented in this form.

Example Elcu_Map (H53E16)

One may also define maps between elliptic curves using the generic map constructor, as the following examples show.

M := map<E1 -> E2 | P :-> 2*P>;
M := map<E1 -> E2 | P :-> E2![P[1], -P[2], P[3]]>;
M := map<E1 -> E2 | P :-> (P eq E1!0) select E2!0 else E2![P[1], -P[2], 1]>;

IsogenyFromKernel(G) : CurveEllSubgroup -> CurveEll, Map
Let G be a subgroup of an elliptic curve E. There is a separable isogeny Phi: E -> E_d of degree d to some other elliptic curve E_d, which has kernel G. This function returns the curve E_d and the map Phi. The calculations are done using Velu's formulae.
IsogenyFromKernelFactored(G) : CurveEllSubgroup -> CurveEll, Map
Returns a sequence of isogenies whose product is the isogeny returned by IsogenyFromKernel(G). The isogenies have either degree 2 or odd degree. This function was introduced because composing isogenies is computationally expensive.
IsogenyFromKernel(E, psi) : CurveEll, RngUPolElt -> CurveEll, Map
Given an elliptic curve E and a univariate polynomial which defines a subscheme of E which is a subgroup of the set of rational points for E, compute an isogeny using Velu's formulae as above.
IsogenyFromKernelFactored(E, psi) : CurveEllSubgroup -> CurveEll, Map
Returns a sequence of isogenies whose product is the isogeny returned by IsogenyFromKernel(G). The isogenies have either degree 2 or odd degree. This function was introduced because composing isogenies is computationally expensive.

Structure operations

IsogenyMapPsi(I) : Map -> RngUPolElt
Returns the multivariate polynomial psi used in defining the isogeny I. The roots of psi determine the kernel of I.
IsogenyMapPsiUni(I) : Map -> RngUPolElt
Returns the polynomial psi used in defining the isogeny I as a univariate polynomial.
IsogenyMapPhi(I) : Map -> RngUPolElt
Returns the multivariate polynomial phi used in defining the isogeny I.
IsogenyMapPhiUni(I) : Map -> RngUPolElt
Returns the polynomial phi used in defining the isogeny I as a univariate polynomial.
IsogenyMapOmega(I) : Map -> RngMPolElt
Returns the multivariate polynomial omega used in defining the isogeny I.
Kernel(I) : Map -> CurveEllSubgroup
Returns the subgroup of the domain consisting of the elements that map to zero under the isogeny I.

Degree(I) : Map -> RngIntElt
Returns the degree of the morphism I.
SeparableDegree(I) : Map -> RngIntElt
Returns the separable degree of the isogeny I.
InseparableDegree(I) : Map -> RngIntElt
Returns the inseparable degree of the isogeny I.
IsomorphismToIsogeny(I) : Map -> Map
Takes a map of type isomorphism and returns an equivalent map with type sogeny.

The endomorphism ring

Let E be an elliptic curve defined over the field K. The set of isogenies End(E) = { isogenies E -> E } forms a ring under composition and addition of maps.

The endormorphism ring of E always contains a subring isomorphic to Z generated by the Frobenius isomorphism. A curve E whose endomorphism ring contains more isogenies than these is said to have complex multiplication.

If E is defined over a finite field, then E alwasys has complex multiplication. The endomorphism ring of E is isomorphic to an order in either a quadratic number field (if E is ordinary) or a quaternion algebra (if E is supersingular).

H ! n : Rng, RngIntElt -> Map
For an integer n, this returns the multiplication by n morphism as an element of the endomorphism ring H=End_K(E). In particular, for n = 1 the identity morphism is returned as the map [x, 1, 1, 1], for n = 0 the zero map [0, 0, 1, 0], and for n = (-1) the inversion map [x, 1, - 1, 1].
f + g : Map, Map -> Map
Sum of two elements of the same endomorphism ring, defined by (f + g) (P) = f(P) + g(P) for all points P on the curve.
f - g : Map, Map -> Map
Difference of two elements of the same endomorphism ring.
f ^ k : Map, RngIntElt -> Map
k-fold iterated composition of an element of the endomorphism ring.
MultiplicationByMMap(E, m) : CurveEll, RngIntElt -> Map
Returns the multiplication-by-m endomorphism [m] : E -> E, such that [m](P) = m * P.
IdentityIsogeny(E) : CurveEll -> Map
Returns the identity isogeny E -> E.
IdentityMap(E) : CurveEll -> Map
Returns the identity map E -> E as an isomorphism.
FrobeniusMap(E, i) : CurveEll, RngIntElt -> Map
Returns the Frobenius isogeny [x, y] |-> [x^(p^i), y^(p^i)] of an elliptic curve defined over a finite field of characteristic p.
FrobeniusMap(E) : CurveEll -> Map
Equivalent to FrobeniusMap(E, 1).

Example Elcu_Frobenius (H53E17)

We check the action of the FrobeniusMap function.

> PR := 23;
> FF2<w2> := FiniteField(PR, 2);
> FF1<w1> := FiniteField(PR, 1);
> a := 1;   b := 3;
> E := EllipticCurve([FF2 | a, b]);
> fr := FrobeniusMap(E, 1);
> E1 := EllipticCurve([FF1 | a, b]);
> { E1!p : p in RationalPoints(E) | fr(p) eq p} eq RationalPoints(E1);
true

Example Elcu_DualIsogeny (H53E18)

We show one way of calculating the dual of an isogeny.

> // First we create the curve and the isogeny.
> E := EllipticCurve([GF(97) | 2, 3]);
> E1, I := Velu(E, DivisionPolynomial(E, 5));
> 
> // Now we find the dual
> deg := Degree(I);
> p := DivisionPolynomial(E, deg);
> np := PushThroughIsogeny(I, p);
> E2, J := Velu(E1, np);
> // Velu's formulae give an isomorphic curve, not the curve itself
> b, c := IsIsomorphic(E2, E);    
> assert (b and #E2 eq #E);
> dual_I := J*c;			// the dual of our original isogeny
> 
> // Check our answer
> P := Random(E); P; dual_I(I(P)) eq deg*P;
(12, 94, 1)
true

The automorphism group

Let E be an elliptic curve defined over the field K. The set of iomorphisms Aut(E) = { isomorphisms E -> E } forms a group under composition of maps.

AutomorphismGroup(E) : CurveEll -> Rng
Let E be an elliptic curve defined over the field K. This returns the group of isomorphisms H = End_K(E) from E to E over K under composition.
IdentityMap(E) : CurveEll -> Map
E ! 1 : CurveEll -> Map
Returns the identity isomorphism which fixes every point of E, having [r, s, t, u] = [0, 0, 0, 1].
NegationMap(E) : CurveEll -> Map
E ! -1 : CurveEll -> Map
Returns the isomorphism which maps P to -P, for all P in E.
f * g : Map, Map -> Map
Composition of the maps f and g, corresponding to multiplication in the automorphism group.
f ^ k : Map, RngIntElt -> Map
k-fold iterated composition of an element of the automorphism group.

Predicates on isogenies

IsZero(I) : Map -> Bool
IsConstant(I) : Map -> Bool
Returns true iff the image of the isogeny I is the zero element of its codomain.
IsogeniesAreEqual(I, J) : Map, Map -> Bool
Returns true iff the isogenies I and J are equal.
IsSeparable(I) : Map -> Bool
Returns true iff the isogeny I is separable.
IsInseparable(I) : Map -> Bool
Returns true iff the isogeny I is inseparable.
LiftIsogeny(I, K) : Map, Rng -> Map
Lift the isogeny I to be defined over the base ring K.
LiftIsomorphism(I, K) : Map, Rng -> Map
Lift the isomorphism I to be defined over the base ring K.
[Next] [Prev] [Right] [Left] [Up] [Index] [Root]