Points on projective varieties

Scheme morphism for points on projective varieties

AUTHORS:

  • David Kohel, William Stein

  • William Stein (2006-02-11): fixed bug where P(0,0,0) was allowed as a projective point.

  • Volker Braun (2011-08-08): Renamed classes, more documentation, misc cleanups.

  • Ben Hutz: (June 2012) added support for projective ring

    (March 2013) iteration functionality and new directory structure for affine/projective

class sage.schemes.projective.projective_point.SchemeMorphism_point_abelian_variety_field(X, v, check=True)

Bases: sage.structure.element.AdditiveGroupElement, sage.schemes.projective.projective_point.SchemeMorphism_point_projective_field

A rational point of an abelian variety over a field.

EXAMPLES:

sage: E = EllipticCurve([0,0,1,-1,0])
sage: origin = E(0)
sage: origin.domain()
Spectrum of Rational Field
sage: origin.codomain()
Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field
class sage.schemes.projective.projective_point.SchemeMorphism_point_projective_field(X, v, check=True)

Bases: sage.schemes.projective.projective_point.SchemeMorphism_point_projective_ring

A rational point of projective space over a field.

INPUT:

  • X – a homset of a subscheme of an ambient projective space over a field K
  • v – a list or tuple of coordinates in K
  • check – boolean (optional, default:True). Whether to check the input for consistency.

EXAMPLES:

sage: P = ProjectiveSpace(3, RR)
sage: P(2,3,4,5)
(0.400000000000000 : 0.600000000000000 : 0.800000000000000 : 1.00000000000000)
clear_denominators()

scales by the least common multiple of the denominators.

OUTPUT: None.

EXAMPLES:

sage: R.<t>=PolynomialRing(QQ)
sage: P.<x,y,z>=ProjectiveSpace(FractionField(R),2)
sage: Q=P([t,3/t^2,1])
sage: Q.clear_denominators(); Q
(t^3 : 3 : t^2)
sage: R.<x>=PolynomialRing(QQ)
sage: K.<w>=NumberField(x^2-3)
sage: P.<x,y,z>=ProjectiveSpace(K,2)
sage: Q=P([1/w,3,0])
sage: Q.clear_denominators(); Q
(w : 9 : 0)
sage: P.<x,y,z>=ProjectiveSpace(QQ,2)
sage: X=P.subscheme(x^2-y^2);
sage: Q=X([1/2,1/2,1]);
sage: Q.clear_denominators(); Q
(1 : 1 : 2)
normalize_coordinates()

Normalizes self so that the last non-zero coordinate is 1.

OUTPUT: None.

EXAMPLES:

sage: P.<x,y,z>=ProjectiveSpace(GF(5),2)
sage: Q=P.point([1,3,0],false);Q
(1 : 3 : 0)
sage: Q.normalize_coordinates();Q
(2 : 1 : 0)
sage: P.<x,y,z>=ProjectiveSpace(QQ,2)
sage: X=P.subscheme(x^2-y^2);
sage: Q=X.point([23,23,46], false);Q
(23 : 23 : 46)
sage: Q.normalize_coordinates();Q
(1/2 : 1/2 : 1)
class sage.schemes.projective.projective_point.SchemeMorphism_point_projective_finite_field(X, v, check=True)

Bases: sage.schemes.projective.projective_point.SchemeMorphism_point_projective_field

The Python constructor.

See SchemeMorphism_point_projective_ring for details.

This function still normalized points so that the rightmost non-zero coordinate is 1. The is to maintain current functionality with current implementations of curves in projectives space (plane, connic, elliptic, etc). The class:SchemeMorphism_point_projective_ring is for general use.

EXAMPLES:

sage: P = ProjectiveSpace(2, QQ)
sage: P(2, 3/5, 4)
(1/2 : 3/20 : 1)
sage: P = ProjectiveSpace(3, QQ)
sage: P(0,0,0,0)
Traceback (most recent call last):
...
ValueError: [0, 0, 0, 0] does not define a valid point since all entries are 0
sage: P.<x, y, z> = ProjectiveSpace(2, QQ)
sage: X=P.subscheme([x^2-y*z])
sage: X([2,2,2])
(1 : 1 : 1)
orbit_structure(f)

Every points is preperiodic over a finite field. This funtion returns the pair [m,n] where m is the preperiod and n the period of the point P by self.

INPUT:

  • f – a ScemeMorphism_polynomial with self in f.domain()

OUTPUT:

  • a list [m,n] of integers

EXAMPLES:

sage: P.<x,y,z>=ProjectiveSpace(GF(5),2)
sage: H=Hom(P,P)
sage: f=H([x^2+y^2,y^2,z^2 + y*z])
sage: P(1,0,1).orbit_structure(f)
[0, 1]
sage: P.<x,y,z>=ProjectiveSpace(GF(17),2)
sage: X=P.subscheme(x^2-y^2)
sage: H=Hom(X,X)
sage: f=H([x^2,y^2,z^2])
sage: X(1,1,2).orbit_structure(f)
[3, 1]
sage: R.<t> = GF(13^3)
sage: P.<x,y>=ProjectiveSpace(R,1)
sage: H=Hom(P,P)
sage: f=H([x^2-y^2,y^2])
sage: P(t,4).orbit_structure(f)
[11, 6]
class sage.schemes.projective.projective_point.SchemeMorphism_point_projective_ring(X, v, check=True)

Bases: sage.schemes.generic.morphism.SchemeMorphism_point

A rational point of projective space over a ring.

INPUT:

  • X – a homset of a subscheme of an ambient projective space over a field K
  • v – a list or tuple of coordinates in K
  • check – boolean (optional, default:True). Whether to check the input for consistency.

EXAMPLES:

sage: P = ProjectiveSpace(2, ZZ)
sage: P(2,3,4)
(2 : 3 : 4)
dehomogenize(n)

Dehomogenizes at the nth coordinate

INPUT:

  • n – non-negative integer

OUTPUT:

  • SchemeMorphism_point_affine

EXAMPLES:

sage: P.<x,y,z>=ProjectiveSpace(QQ,2)
sage: X=P.subscheme(x^2-y^2);
sage: Q=X(23,23,46)
sage: Q.dehomogenize(2)
(1/2, 1/2)
sage: R.<t>=PolynomialRing(QQ)
sage: S=R.quo(R.ideal(t^3))
sage: P.<x,y,z>=ProjectiveSpace(S,2)
sage: Q=P(t,1,1)
sage: Q.dehomogenize(1)
(tbar, 1)
sage: P.<x,y,z>=ProjectiveSpace(GF(5),2)
sage: Q=P(1,3,1)
sage: Q.dehomogenize(0)
(3, 1)
sage: P.<x,y,z>=ProjectiveSpace(GF(5),2)
sage: Q=P(1,3,0)
sage: Q.dehomogenize(2)
Traceback (most recent call last):
...
ValueError: Can't dehomogenize at 0 coordinate.
normalize_coordinates()

Removes common factors from the coordinates of self (including -1).

OUTPUT:

  • None.

EXAMPLES:

sage: P=ProjectiveSpace(ZZ,2,'x')
sage: p=P([-5,-15,-20])
sage: p.normalize_coordinates(); p
(1 : 3 : 4)
sage: P=ProjectiveSpace(Zp(7),2,'x')
sage: p=P([-5,-15,-2])
sage: p.normalize_coordinates(); p
(5 + O(7^20) : 1 + 2*7 + O(7^20) : 2 + O(7^20))
sage: R.<t>=PolynomialRing(QQ)
sage: P=ProjectiveSpace(R,2,'x')
sage: p=P([3/5*t^3,6*t, t])
sage: p.normalize_coordinates(); p
(3/5*t^2 : 6 : 1)
sage: P.<x,y>=ProjectiveSpace(Zmod(20),1)
sage: Q=P(4,8)
sage: Q.normalize_coordinates()
sage: Q
(1 : 2)
sage: R.<t>=PolynomialRing(QQ,1)
sage: S=R.quotient_ring(R.ideal(t^3))
sage: P.<x,y>=ProjectiveSpace(S,1)
sage: Q=P(t,t^2)
sage: Q.normalize_coordinates()
sage: Q
(1 : t)
nth_iterate(f, n, normalize=False)

For a map self and a point P in self.domain() this function returns the nth iterate of P by self. If normalize==True, then the coordinates are automatically normalized.

INPUT:

  • f – a SchmemMorphism_polynomial with self in f.domain()
  • n – a positive integer.
  • normalize – Boolean (optional Default: False)

OUTPUT:

  • A point in self.codomain()

EXAMPLES:

sage: P.<x,y>=ProjectiveSpace(ZZ,1)
sage: H=Hom(P,P)
sage: f=H([x^2+y^2,2*y^2])
sage: P(1,1).nth_iterate(f,4)
(32768 : 32768)
sage: P.<x,y>=ProjectiveSpace(ZZ,1)
sage: H=Hom(P,P)
sage: f=H([x^2+y^2,2*y^2])
sage: P(1,1).nth_iterate(f,4,1)
(1 : 1)
sage: R.<t>=PolynomialRing(QQ)
sage: P.<x,y,z>=ProjectiveSpace(R,2)
sage: H=Hom(P,P)
sage: f=H([x^2+t*y^2,(2-t)*y^2,z^2])
sage: P(2+t,7,t).nth_iterate(f,2)
(t^4 + 2507*t^3 - 6787*t^2 + 10028*t + 16 : -2401*t^3 + 14406*t^2 -
28812*t + 19208 : t^4)
sage: P.<x,y,z>=ProjectiveSpace(ZZ,2)
sage: X=P.subscheme(x^2-y^2)
sage: H=Hom(X,X)
sage: f=H([x^2,y^2,z^2])
sage: X(2,2,3).nth_iterate(f,3)
(256 : 256 : 6561)

Todo

Is there a more efficient way to do this?

orbit(f, N, **kwds)

Returns the orbit of P by self. If n is an integer it returns [P,self(P),\ldots,self^n(P)]. If n is a list or tuple n=[m,k] it returns [self^m(P),\ldots,self^k(P)]. Automatically normalize the points if normalize=True. Perform the checks on point initialization if check=True

INPUT:

  • f – a SchemeMorphism_polynomial with self in f.domain()
  • N – a non-negative integer or list or tuple of two non-negative integers

kwds:

  • check – boolean (optional - default: True)
  • normalize – boolean (optional - default: False)

OUTPUT:

  • a list of points in self.codomain()

EXAMPLES:

sage: P.<x,y,z>=ProjectiveSpace(ZZ,2)
sage: H=Hom(P,P)
sage: f=H([x^2+y^2,y^2-z^2,2*z^2])
sage: P(1,2,1).orbit(f,3)
[(1 : 2 : 1), (5 : 3 : 2), (34 : 5 : 8), (1181 : -39 : 128)]
sage: P.<x,y,z>=ProjectiveSpace(ZZ,2)
sage: H=Hom(P,P)
sage: f=H([x^2+y^2,y^2-z^2,2*z^2])
sage: P(1,2,1).orbit(f,[2,4])
[(34 : 5 : 8), (1181 : -39 : 128), (1396282 : -14863 : 32768)]
sage: P.<x,y,z>=ProjectiveSpace(ZZ,2)
sage: X=P.subscheme(x^2-y^2)
sage: H=Hom(X,X)
sage: f=H([x^2,y^2,x*z])
sage: X(2,2,3).orbit(f,3,normalize=True)
[(2 : 2 : 3), (2 : 2 : 3), (2 : 2 : 3), (2 : 2 : 3)]
sage: P.<x,y>=ProjectiveSpace(QQ,1)
sage: H=Hom(P,P)
sage: f=H([x^2+y^2,y^2])
sage: P.point([1,2],False).orbit(f,4,check=False)
[(1 : 2), (5 : 4), (41 : 16), (1937 : 256), (3817505 : 65536)]
scale_by(t)

Scale the coordinates of the point self by t. A TypeError occurs if the point is not in the base_ring of the codomain after scaling.

INPUT:

  • t – a ring element

OUTPUT:

  • None.

EXAMPLES:

sage: R.<t>=PolynomialRing(QQ)
sage: P=ProjectiveSpace(R,2,'x')
sage: p=P([3/5*t^3,6*t, t])
sage: p.scale_by(1/t); p
(3/5*t^2 : 6 : 1)
sage: R.<t>=PolynomialRing(QQ)
sage: S=R.quo(R.ideal(t^3))
sage: P.<x,y,z>=ProjectiveSpace(S,2)
sage: Q=P(t,1,1)
sage: Q.scale_by(t);Q
(tbar^2 : tbar : tbar)
sage: P.<x,y,z>=ProjectiveSpace(ZZ,2)
sage: Q=P(2,2,2)
sage: Q.scale_by(1/2);Q
(1 : 1 : 1)

Previous topic

Projective n space over a ring

Next topic

Morphisms on projective varieties

This Page