Closed points of integral curves - Plane and Space Curves

Skip to content
Back to top
View this page
Edit this page

# Closed points of integral curves

A rational point of a curve in Sage is represented by its coordinates. If the curve is defined over finite field and integral, that is reduced and irreducible, then it is empowered by the global function field machinery of Sage. Thus closed points of the curve are computable, as represented by maximal ideals of the coordinate ring of the ambient space.

EXAMPLES:

Sage

    sage: F.<a> = GF(2)
    sage: P.<x,y> = AffineSpace(F, 2)
    sage: C = Curve(y^2 + y - x^3)
    sage: C.closed_points()
    [Point (x, y), Point (x, y + 1)]
    sage: C.closed_points(2)
    [Point (y^2 + y + 1, x + 1),
     Point (y^2 + y + 1, x + y),
     Point (y^2 + y + 1, x + y + 1)]
    sage: C.closed_points(3)
    [Point (x^2 + x + y, x*y + 1, y^2 + x + 1),
     Point (x^2 + x + y + 1, x*y + x + 1, y^2 + x)]

Python

    >>> from sage.all import *
    >>> F = GF(Integer(2), names=('a',)); (a,) = F._first_ngens(1)
    >>> P = AffineSpace(F, Integer(2), names=('x', 'y',)); (x, y,) = P._first_ngens(2)
    >>> C = Curve(y**Integer(2) + y - x**Integer(3))
    >>> C.closed_points()
    [Point (x, y), Point (x, y + 1)]
    >>> C.closed_points(Integer(2))
    [Point (y^2 + y + 1, x + 1),
     Point (y^2 + y + 1, x + y),
     Point (y^2 + y + 1, x + y + 1)]
    >>> C.closed_points(Integer(3))
    [Point (x^2 + x + y, x*y + 1, y^2 + x + 1),
     Point (x^2 + x + y + 1, x*y + x + 1, y^2 + x)]

Closed points of projective curves are represented by homogeneous maximal ideals:

Sage

    sage: F.<a> = GF(2)
    sage: P.<x,y,z> = ProjectiveSpace(F, 2)
    sage: C = Curve(x^3*y + y^3*z + x*z^3)
    sage: C.closed_points()
    [Point (x, z), Point (x, y), Point (y, z)]
    sage: C.closed_points(2)
    [Point (y^2 + y*z + z^2, x + y + z)]
    sage: C.closed_points(3)
    [Point (y^3 + y^2*z + z^3, x + y),
     Point (y^3 + y*z^2 + z^3, x + z),
     Point (x^2 + x*z + y*z + z^2, x*y + x*z + z^2, y^2 + x*z),
     Point (x^2 + y*z, x*y + x*z + z^2, y^2 + x*z + y*z),
     Point (x^3 + x*z^2 + z^3, y + z),
     Point (x^2 + y*z + z^2, x*y + x*z + y*z, y^2 + x*z + y*z + z^2),
     Point (x^2 + y*z + z^2, x*y + z^2, y^2 + x*z + y*z)]

[Python]

    >>> from sage.all import *
    >>> F = GF(Integer(2), names=('a',)); (a,) = F._first_ngens(1)
    >>> P = ProjectiveSpace(F, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)
    >>> C = Curve(x**Integer(3)*y + y**Integer(3)*z + x*z**Integer(3))
    >>> C.closed_points()
    [Point (x, z), Point (x, y), Point (y, z)]
    >>> C.closed_points(Integer(2))
    [Point (y^2 + y*z + z^2, x + y + z)]
    >>> C.closed_points(Integer(3))
    [Point (y^3 + y^2*z + z^3, x + y),
     Point (y^3 + y*z^2 + z^3, x + z),
     Point (x^2 + x*z + y*z + z^2, x*y + x*z + z^2, y^2 + x*z),
     Point (x^2 + y*z, x*y + x*z + z^2, y^2 + x*z + y*z),
     Point (x^3 + x*z^2 + z^3, y + z),
     Point (x^2 + y*z + z^2, x*y + x*z + y*z, y^2 + x*z + y*z + z^2),
     Point (x^2 + y*z + z^2, x*y + z^2, y^2 + x*z + y*z)]

Rational points are easily converted to closed points and vice versa if the closed point is of degree one:

Sage

    sage: F.<a> = GF(2)
    sage: P.<x,y,z> = ProjectiveSpace(F, 2)
    sage: C = Curve(x^3*y + y^3*z + x*z^3)
    sage: p1, p2, p3 = C.closed_points()
    sage: p1.rational_point()
    (0 : 1 : 0)
    sage: p2.rational_point()
    (0 : 0 : 1)
    sage: p3.rational_point()
    (1 : 0 : 0)
    sage: _.closed_point()
    Point (y, z)
    sage: _ == p3
    True

Python

    >>> from sage.all import *
    >>> F = GF(Integer(2), names=('a',)); (a,) = F._first_ngens(1)
    >>> P = ProjectiveSpace(F, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)
    >>> C = Curve(x**Integer(3)*y + y**Integer(3)*z + x*z**Integer(3))
    >>> p1, p2, p3 = C.closed_points()
    >>> p1.rational_point()
    (0 : 1 : 0)
    >>> p2.rational_point()
    (0 : 0 : 1)
    >>> p3.rational_point()
    (1 : 0 : 0)
    >>> _.closed_point()
    Point (y, z)
    >>> _ == p3
    True

AUTHORS:

- Kwankyu Lee (2019-03): initial version

class sage.schemes.curves.closed_point.CurveClosedPoint(S, P, check=False)

  Bases: `SchemeTopologicalPoint_prime_ideal`

  Base class of closed points of curves.

class sage.schemes.curves.closed_point.IntegralAffineCurveClosedPoint(curve, prime_ideal, degree)

  Bases: `IntegralCurveClosedPoint`

  Closed points of affine curves.

  projective(i=0)

    Return the point in the projective closure of the curve, of which this curve is the `i`-th affine patch.

    INPUT:

    - `i` – integer

    EXAMPLES:

    Sage

        sage: F.<a> = GF(2)
        sage: A.<x,y> = AffineSpace(F, 2)
        sage: C = Curve(y^2 + y - x^3, A)
        sage: p1, p2 = C.closed_points()
        sage: p1
        Point (x, y)
        sage: p2
        Point (x, y + 1)
        sage: p1.projective()
        Point (x1, x2)
        sage: p2.projective(0)
        Point (x1, x0 + x2)
        sage: p2.projective(1)
        Point (x0, x1 + x2)
        sage: p2.projective(2)
        Point (x0, x1 + x2)

    Python

        >>> from sage.all import *
        >>> F = GF(Integer(2), names=('a',)); (a,) = F._first_ngens(1)
        >>> A = AffineSpace(F, Integer(2), names=('x', 'y',)); (x, y,) = A._first_ngens(2)
        >>> C = Curve(y**Integer(2) + y - x**Integer(3), A)
        >>> p1, p2 = C.closed_points()
        >>> p1
        Point (x, y)
        >>> p2
        Point (x, y + 1)
        >>> p1.projective()
        Point (x1, x2)
        >>> p2.projective(Integer(0))
        Point (x1, x0 + x2)
        >>> p2.projective(Integer(1))
        Point (x0, x1 + x2)
        >>> p2.projective(Integer(2))
        Point (x0, x1 + x2)

  rational_point()

    Return the rational point if this closed point is of degree \(1\).

    EXAMPLES:

    Sage

        sage: # needs sage.rings.finite_rings
        sage: A.<x,y> = AffineSpace(GF(3^2), 2)
        sage: C = Curve(y^2 - x^5 - x^4 - 2*x^3 - 2*x - 2)
        sage: C.closed_points()
        [Point (x, y + (z2 + 1)),
         Point (x, y + (-z2 - 1)),
         Point (x + (z2 + 1), y + (z2 - 1)),
         Point (x + (z2 + 1), y + (-z2 + 1)),
         Point (x - 1, y + (z2 + 1)),
         Point (x - 1, y + (-z2 - 1)),
         Point (x + (-z2 - 1), y + z2),
         Point (x + (-z2 - 1), y + (-z2)),
         Point (x + 1, y + 1),
         Point (x + 1, y - 1)]
        sage: [p.rational_point() for p in _]
        [(0, 2*z2 + 2),
         (0, z2 + 1),
         (2*z2 + 2, 2*z2 + 1),
         (2*z2 + 2, z2 + 2),
         (1, 2*z2 + 2),
         (1, z2 + 1),
         (z2 + 1, 2*z2),
         (z2 + 1, z2),
         (2, 2),
         (2, 1)]
        sage: set(_) == set(C.rational_points())
        True

    Python

        >>> from sage.all import *
        >>> # needs sage.rings.finite_rings
        >>> A = AffineSpace(GF(Integer(3)**Integer(2)), Integer(2), names=('x', 'y',)); (x, y,) = A._first_ngens(2)
        >>> C = Curve(y**Integer(2) - x**Integer(5) - x**Integer(4) - Integer(2)*x**Integer(3) - Integer(2)*x - Integer(2))
        >>> C.closed_points()
        [Point (x, y + (z2 + 1)),
         Point (x, y + (-z2 - 1)),
         Point (x + (z2 + 1), y + (z2 - 1)),
         Point (x + (z2 + 1), y + (-z2 + 1)),
         Point (x - 1, y + (z2 + 1)),
         Point (x - 1, y + (-z2 - 1)),
         Point (x + (-z2 - 1), y + z2),
         Point (x + (-z2 - 1), y + (-z2)),
         Point (x + 1, y + 1),
         Point (x + 1, y - 1)]
        >>> [p.rational_point() for p in _]
        [(0, 2*z2 + 2),
         (0, z2 + 1),
         (2*z2 + 2, 2*z2 + 1),
         (2*z2 + 2, z2 + 2),
         (1, 2*z2 + 2),
         (1, z2 + 1),
         (z2 + 1, 2*z2),
         (z2 + 1, z2),
         (2, 2),
         (2, 1)]
        >>> set(_) == set(C.rational_points())
        True

class sage.schemes.curves.closed_point.IntegralCurveClosedPoint(curve, prime_ideal, degree)

  Bases: `CurveClosedPoint`

  Closed points of integral curves.

  INPUT:

  - `curve` – the curve to which the closed point belongs

  - `prime_ideal` – a prime ideal

  - `degree` – degree of the closed point

  EXAMPLES:

  Sage

      sage: # needs sage.rings.finite_rings
      sage: F.<a> = GF(4)
      sage: P.<x,y> = AffineSpace(F, 2)
      sage: C = Curve(y^2 + y - x^3)
      sage: C.closed_points()
      [Point (x, y),
       Point (x, y + 1),
       Point (x + a, y + a),
       Point (x + a, y + (a + 1)),
       Point (x + (a + 1), y + a),
       Point (x + (a + 1), y + (a + 1)),
       Point (x + 1, y + a),
       Point (x + 1, y + (a + 1))]

  Python

      >>> from sage.all import *
      >>> # needs sage.rings.finite_rings
      >>> F = GF(Integer(4), names=('a',)); (a,) = F._first_ngens(1)
      >>> P = AffineSpace(F, Integer(2), names=('x', 'y',)); (x, y,) = P._first_ngens(2)
      >>> C = Curve(y**Integer(2) + y - x**Integer(3))
      >>> C.closed_points()
      [Point (x, y),
       Point (x, y + 1),
       Point (x + a, y + a),
       Point (x + a, y + (a + 1)),
       Point (x + (a + 1), y + a),
       Point (x + (a + 1), y + (a + 1)),
       Point (x + 1, y + a),
       Point (x + 1, y + (a + 1))]

  curve()

    Return the curve to which this point belongs.

    EXAMPLES:

    Sage

        sage: # needs sage.rings.finite_rings
        sage: F.<a> = GF(4)
        sage: P.<x,y> = AffineSpace(F, 2)
        sage: C = Curve(y^2 + y - x^3)
        sage: pts = C.closed_points()
        sage: p = pts[0]
        sage: p.curve()
        Affine Plane Curve over Finite Field in a of size 2^2 defined by x^3 + y^2 + y

    Python

        >>> from sage.all import *
        >>> # needs sage.rings.finite_rings
        >>> F = GF(Integer(4), names=('a',)); (a,) = F._first_ngens(1)
        >>> P = AffineSpace(F, Integer(2), names=('x', 'y',)); (x, y,) = P._first_ngens(2)
        >>> C = Curve(y**Integer(2) + y - x**Integer(3))
        >>> pts = C.closed_points()
        >>> p = pts[Integer(0)]
        >>> p.curve()
        Affine Plane Curve over Finite Field in a of size 2^2 defined by x^3 + y^2 + y

  degree()

    Return the degree of the point.

    EXAMPLES:

    Sage

        sage: # needs sage.rings.finite_rings
        sage: F.<a> = GF(4)
        sage: P.<x,y> = AffineSpace(F, 2)
        sage: C = Curve(y^2 + y - x^3)
        sage: pts = C.closed_points()
        sage: p = pts[0]
        sage: p.degree()
        1

    Python

        >>> from sage.all import *
        >>> # needs sage.rings.finite_rings
        >>> F = GF(Integer(4), names=('a',)); (a,) = F._first_ngens(1)
        >>> P = AffineSpace(F, Integer(2), names=('x', 'y',)); (x, y,) = P._first_ngens(2)
        >>> C = Curve(y**Integer(2) + y - x**Integer(3))
        >>> pts = C.closed_points()
        >>> p = pts[Integer(0)]
        >>> p.degree()
        1

  place()

    Return a place on this closed point.

    If there are more than one, arbitrary one is chosen.

    EXAMPLES:

    Sage

        sage: # needs sage.rings.finite_rings
        sage: F.<a> = GF(4)
        sage: P.<x,y> = AffineSpace(F, 2)
        sage: C = Curve(y^2 + y - x^3)
        sage: pts = C.closed_points()
        sage: p = pts[0]
        sage: p.place()
        Place (x, y)

    Python

        >>> from sage.all import *
        >>> # needs sage.rings.finite_rings
        >>> F = GF(Integer(4), names=('a',)); (a,) = F._first_ngens(1)
        >>> P = AffineSpace(F, Integer(2), names=('x', 'y',)); (x, y,) = P._first_ngens(2)
        >>> C = Curve(y**Integer(2) + y - x**Integer(3))
        >>> pts = C.closed_points()
        >>> p = pts[Integer(0)]
        >>> p.place()
        Place (x, y)

  places()

    Return all places on this closed point.

    EXAMPLES:

    Sage

        sage: # needs sage.rings.finite_rings
        sage: F.<a> = GF(4)
        sage: P.<x,y> = AffineSpace(F, 2)
        sage: C = Curve(y^2 + y - x^3)
        sage: pts = C.closed_points()
        sage: p = pts[0]
        sage: p.places()
        [Place (x, y)]

    Python

        >>> from sage.all import *
        >>> # needs sage.rings.finite_rings
        >>> F = GF(Integer(4), names=('a',)); (a,) = F._first_ngens(1)
        >>> P = AffineSpace(F, Integer(2), names=('x', 'y',)); (x, y,) = P._first_ngens(2)
        >>> C = Curve(y**Integer(2) + y - x**Integer(3))
        >>> pts = C.closed_points()
        >>> p = pts[Integer(0)]
        >>> p.places()
        [Place (x, y)]

class sage.schemes.curves.closed_point.IntegralProjectiveCurveClosedPoint(curve, prime_ideal, degree)

  Bases: `IntegralCurveClosedPoint`

  Closed points of projective plane curves.

  affine(i=None)

    Return the point in the `i`-th affine patch of the curve.

    INPUT:

    - `i` – integer; if not specified, it is chosen automatically

    EXAMPLES:

    Sage

        sage: F.<a> = GF(2)
        sage: P.<x,y,z> = ProjectiveSpace(F, 2)
        sage: C = Curve(x^3*y + y^3*z + x*z^3)
        sage: p1, p2, p3 = C.closed_points()
        sage: p1.affine()
        Point (x, z)
        sage: p2.affine()
        Point (x, y)
        sage: p3.affine()
        Point (y, z)
        sage: p3.affine(0)
        Point (y, z)
        sage: p3.affine(1)
        Traceback (most recent call last):
        ...
        ValueError: not in the affine patch

    Python

        >>> from sage.all import *
        >>> F = GF(Integer(2), names=('a',)); (a,) = F._first_ngens(1)
        >>> P = ProjectiveSpace(F, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)
        >>> C = Curve(x**Integer(3)*y + y**Integer(3)*z + x*z**Integer(3))
        >>> p1, p2, p3 = C.closed_points()
        >>> p1.affine()
        Point (x, z)
        >>> p2.affine()
        Point (x, y)
        >>> p3.affine()
        Point (y, z)
        >>> p3.affine(Integer(0))
        Point (y, z)
        >>> p3.affine(Integer(1))
        Traceback (most recent call last):
        ...
        ValueError: not in the affine patch

  rational_point()

    Return the rational point if this closed point is of degree \(1\).

    EXAMPLES:

    Sage

        sage: # needs sage.rings.finite_rings
        sage: F.<a> = GF(4)
        sage: P.<x,y,z> = ProjectiveSpace(F, 2)
        sage: C = Curve(x^3*y + y^3*z + x*z^3)
        sage: C.closed_points()
        [Point (x, z),
         Point (x, y),
         Point (y, z),
         Point (x + a*z, y + (a + 1)*z),
         Point (x + (a + 1)*z, y + a*z)]
        sage: [p.rational_point() for p in _]
        [(0 : 1 : 0), (0 : 0 : 1), (1 : 0 : 0), (a : a + 1 : 1), (a + 1 : a : 1)]
        sage: set(_) == set(C.rational_points())
        True

    Python

        >>> from sage.all import *
        >>> # needs sage.rings.finite_rings
        >>> F = GF(Integer(4), names=('a',)); (a,) = F._first_ngens(1)
        >>> P = ProjectiveSpace(F, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)
        >>> C = Curve(x**Integer(3)*y + y**Integer(3)*z + x*z**Integer(3))
        >>> C.closed_points()
        [Point (x, z),
         Point (x, y),
         Point (y, z),
         Point (x + a*z, y + (a + 1)*z),
         Point (x + (a + 1)*z, y + a*z)]
        >>> [p.rational_point() for p in _]
        [(0 : 1 : 0), (0 : 0 : 1), (1 : 0 : 0), (a : a + 1 : 1), (a + 1 : a : 1)]
        >>> set(_) == set(C.rational_points())
        True