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

Maps and Curves

Subsections

Elementary Maps

The first group of functions create selfmaps of the affine plane. Such a map f can be used to move a curve around the plane simply by applying it to the curve. See Chapter SCHEMES on schemes for more details about maps.

IdentityAutomorphism(A) : Sch -> AutSch
Translation(A,p) : Sch,Pt -> AutSch
FlipCoordinates(A) : Sch -> AutSch
Automorphism(A,q) : Sch,RngMPolElt -> AutSch
These are the basic automorphisms of the affine plane A taking (x, y) to (x, y), (x - a, y - b), (y, x) and (x + q(y), y) respectively, where p is the point (a, b) and q is a polynomial on A involving y only.
TranslationToInfinity(C,p) : Crv,Pt -> Crv,AutSch
The image of C under the change of coordinates which translates p to the point (0:1:0) in the projective plane and makes the tangent line there equal to the line at infinity. An error is reported if p is a singular point of C. The change of coordinates map is given so that other curves can be mapped by the same change of coordinates.

Example Crv_translation-to-infinity (H114E16)

In this example we show how one could begin to work out a Weierstrass equation for a Fermat cubic. First we define that cubic curve C in the projective plane and choose a point p on C.

> P<x,y,z> := ProjectiveSpace(Rationals(),2);
> C := Curve(P,x^3 + y^3 + z^3);
> p := C ! [1,-1,0];
> IsFlex(C,p);
true 3

The point we have chosen is a flex --- the second return value of 3 is the local intersection number of the curve C with its tangent line at p. We use the intrinsic TranslationToInfinity to make an automorphism of P which takes the point p to the point (0:1:0) and takes the curve C to a curve which has tangent line z=0 at the image of p.

> C1,phi := TranslationToInfinity(C,p);
> phi(p);
(0 : 1 : 0)
> C1;
Curve over Rational Field defined by
x^3 + 3*y^2*z - 3*y*z^2 + z^3

This is almost in Weierstrass form already. It is a pleasant exercise to make coordinate changes which "absorb" some of the coefficients. Alternatively, one can use the intrinsic EllipticCurve to perform the entire transformation in one step.


EvaluateByPowerSeries(m, P) : MapSch, Pt -> Pt
Given a map m: C to D, and a nonsingular point P on C, where C is a curve, return m(P), evaluating m(P) using a power series expansion if necessary. This allows a rational map on C to be evaluated at nonsingular base points.

Example Crv_maps-point_pow_eval (H114E17)

The following example shows a map evaluated at a point using power series methods.

> P2<X,Y,Z>:=ProjectiveSpace(Rationals(),2);
> C:=Curve(P2,X^3+Y^3-2*Z^3);
> D:=Curve(P2,Y^2*Z-X^3+27*Z^3);
> phi:=map<C->D|[-6*X^2-6*X*Z+6*Y^2+6*Y*Z,
>                9*X^2+18*X*Y+18*X*Z+9*Y^2+18*Y*Z+36*Z^2,
>                X^2-2*X*Z-Y^2+2*Y*Z
>               ]>;
> P:=C![-1,1,0];
> P in BaseScheme(phi);
true (-1 : 1 : 0)
> Q:=EvaluateByPowerSeries(phi,P);
> Q;
(3 : 0 : 1)

> phi(P); >> phi(P); ^ Runtime error in map application: Image of map does not lie in the codomain > pullbackQ:=Q@@phi; > pullbackQ; Scheme over Rational Field defined by -9*X^2 + 9*Y^2, 9*X^2 + 18*X*Y + 18*X*Z + 9*Y^2 + 18*Y*Z + 36*Z^2, X^3 + Y^3 - 2*Z^3 > IsSubscheme(BaseScheme(phi), pullbackQ); true > P in pullbackQ; true (-1 : 1 : 0) > Degree(BaseScheme(phi))+1 eq Degree(pullbackQ); true

Maps Induced by Morphisms

Given a non-constant map φ:D to C between curves, there are several induced maps between the function fields of C and D and the divisor groups ( Div)(C) and ( Div)(D). We refer to the contravariant maps φ^ * as Pullbacks and to the covariant maps φ_*, corresponding to the Norm between the function fields, as Pushforwards. Divisor groups and other function field related items are discussed in Section Function Fields.

Degree(m) : MapSch -> RngIntElt
Returns the degree of a non-constant dominant map m between curves.
RamificationDivisor(m) : MapSch -> DivCrvElt
Returns the ramification divisor of a non-constant dominant map m between irreducible curves.
Pullback(phi, X) : MapSch, FldFunFracSchElt -> FldFunFracSchElt
Pullback(phi, X) : MapSch, DiffCrvElt -> DiffCrvElt
Pullback(phi, X) : MapSch, DivCrvElt -> DivCrvElt
Pullback(phi, X) : MapSch, PlcCrvElt -> DivCrvElt
Given a map φ:D to C between curves and a function, differential, place or divisor X on C, this function returns the pullback of X along φ.
Pushforward(phi, X) : MapSch, FldFunFracSchElt -> FldFunFracSchElt
Pushforward(phi, X) : MapSch, PlcCrvElt -> DivCrvElt
Pushforward(phi, X) : MapSch, DivCrvElt -> DivCrvElt
Given a map φ:D to C between curves and a function, place or divisor X on C, this function returns the pushforward of X along φ. In older versions, the function applied to a place used to only work with the image of the point (or cluster) below the place for speed and would give an error when φwas undefined there. Now, if this is true, the function reverts to working entirely with places and should never fail.

Example Crv_map-push-pull (H114E18)

As an illustration of these routines, consider the following example

> Puvw<u,v,w>:=ProjectiveSpace(Rationals(),2);
> Pxyz<x,y,z>:=ProjectiveSpace(Rationals(),2);
> D:=Curve(Puvw,u^4+v^4-w^4);
> C:=Curve(Pxyz,x^4-y^4+y^2*z^2);
> phiAmb:=map<Puvw->Pxyz|[y*z,z^2,x^2]>;
> phi:=Restriction(phiAmb,D,C);
> KC:=FunctionField(C);
> KD:=FunctionField(D);
> Omega:=BasisOfHolomorphicDifferentials(C)[1];
Here we see a holomorphic differential pulls back to holomorphic.

> IsEffective(Divisor(Pullback(phi,Omega)));
true
Ramification divisors are actually quite easy to compute.

> RamificationDivisor(phi) eq
>     Divisor(Pullback(phi,Omega))-Pullback(phi,Divisor(Omega));
true
Verifying Riemann-Hurwitz:

> 2*Genus(D)-2 eq Degree(phi)*(2*Genus(C)-2)+Degree(RamificationDivisor(phi)); 
true
Pulling back and pushing forward is taking powers on the function field.

> f:=KC.1;
> Pushforward(phi,Pullback(phi,f)) eq f^Degree(phi);
true
Divisor and Pushforward commute.

> g:=KD.1;
> Divisor(Pushforward(phi,g)) eq Pushforward(phi,Divisor(g));
true

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

Version: V2.19 of Wed Apr 24 15:09:57 EST 2013