Curve constructor

Curves are constructed through the curve constructor, after an ambient space is defined either explicitly or implicitly.

EXAMPLES:

sage: A.<x,y> = AffineSpace(QQ, 2)
sage: Curve([y - x^2], A)
Affine Plane Curve over Rational Field defined by -x^2 + y
>>> from sage.all import *
>>> A = AffineSpace(QQ, Integer(2), names=('x', 'y',)); (x, y,) = A._first_ngens(2)
>>> Curve([y - x**Integer(2)], A)
Affine Plane Curve over Rational Field defined by -x^2 + y

sage: P.<x,y,z> = ProjectiveSpace(GF(5), 2)
sage: Curve(y^2*z^7 - x^9 - x*z^8)
Projective Plane Curve over Finite Field of size 5
 defined by -x^9 + y^2*z^7 - x*z^8
>>> from sage.all import *
>>> P = ProjectiveSpace(GF(Integer(5)), Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)
>>> Curve(y**Integer(2)*z**Integer(7) - x**Integer(9) - x*z**Integer(8))
Projective Plane Curve over Finite Field of size 5
 defined by -x^9 + y^2*z^7 - x*z^8

AUTHORS:

  • William Stein (2005-11-13)

  • David Kohel (2006-01)

  • Grayson Jorgenson (2016-06)

sage.schemes.curves.constructor.Curve(F, A=None)[source]

Return the plane or space curve defined by F, where F can be either a multivariate polynomial, a list or tuple of polynomials, or an algebraic scheme.

If no ambient space is passed in for A, and if F is not an algebraic scheme, a new ambient space is constructed.

Also not specifying an ambient space will cause the curve to be defined in either affine or projective space based on properties of F. In particular, if F contains a nonhomogeneous polynomial, the curve is affine, and if F consists of homogeneous polynomials, then the curve is projective.

INPUT:

  • F – a multivariate polynomial, or a list or tuple of polynomials, or an algebraic scheme

  • A – (default: None) an ambient space in which to create the curve

EXAMPLES:

A projective plane curve:

sage: x,y,z = QQ['x,y,z'].gens()
sage: C = Curve(x^3 + y^3 + z^3); C
Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
sage: C.genus()
1
>>> from sage.all import *
>>> x,y,z = QQ['x,y,z'].gens()
>>> C = Curve(x**Integer(3) + y**Integer(3) + z**Integer(3)); C
Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
>>> C.genus()
1

Affine plane curves.

sage: x,y = GF(7)['x,y'].gens()
sage: C = Curve(y^2 + x^3 + x^10); C
Affine Plane Curve over Finite Field of size 7 defined by x^10 + x^3 + y^2
sage: C.genus()
0
sage: x, y = QQ['x,y'].gens()
sage: Curve(x^3 + y^3 + 1)
Affine Plane Curve over Rational Field defined by x^3 + y^3 + 1
>>> from sage.all import *
>>> x,y = GF(Integer(7))['x,y'].gens()
>>> C = Curve(y**Integer(2) + x**Integer(3) + x**Integer(10)); C
Affine Plane Curve over Finite Field of size 7 defined by x^10 + x^3 + y^2
>>> C.genus()
0
>>> x, y = QQ['x,y'].gens()
>>> Curve(x**Integer(3) + y**Integer(3) + Integer(1))
Affine Plane Curve over Rational Field defined by x^3 + y^3 + 1

A projective space curve.

sage: x,y,z,w = QQ['x,y,z,w'].gens()
sage: C = Curve([x^3 + y^3 - z^3 - w^3, x^5 - y*z^4]); C
Projective Curve over Rational Field defined by x^3 + y^3 - z^3 - w^3, x^5 - y*z^4
sage: C.genus()
13
>>> from sage.all import *
>>> x,y,z,w = QQ['x,y,z,w'].gens()
>>> C = Curve([x**Integer(3) + y**Integer(3) - z**Integer(3) - w**Integer(3), x**Integer(5) - y*z**Integer(4)]); C
Projective Curve over Rational Field defined by x^3 + y^3 - z^3 - w^3, x^5 - y*z^4
>>> C.genus()
13

An affine space curve.

sage: x,y,z = QQ['x,y,z'].gens()
sage: C = Curve([y^2 + x^3 + x^10 + z^7,  x^2 + y^2]); C
Affine Curve over Rational Field defined by x^10 + z^7 + x^3 + y^2, x^2 + y^2
sage: C.genus()
47
>>> from sage.all import *
>>> x,y,z = QQ['x,y,z'].gens()
>>> C = Curve([y**Integer(2) + x**Integer(3) + x**Integer(10) + z**Integer(7),  x**Integer(2) + y**Integer(2)]); C
Affine Curve over Rational Field defined by x^10 + z^7 + x^3 + y^2, x^2 + y^2
>>> C.genus()
47

We can also make non-reduced non-irreducible curves.

sage: x,y,z = QQ['x,y,z'].gens()
sage: Curve((x-y)*(x+y))
Projective Conic Curve over Rational Field defined by x^2 - y^2
sage: Curve((x-y)^2*(x+y)^2)
Projective Plane Curve over Rational Field defined by x^4 - 2*x^2*y^2 + y^4
>>> from sage.all import *
>>> x,y,z = QQ['x,y,z'].gens()
>>> Curve((x-y)*(x+y))
Projective Conic Curve over Rational Field defined by x^2 - y^2
>>> Curve((x-y)**Integer(2)*(x+y)**Integer(2))
Projective Plane Curve over Rational Field defined by x^4 - 2*x^2*y^2 + y^4

A union of curves is a curve.

sage: x,y,z = QQ['x,y,z'].gens()
sage: C = Curve(x^3 + y^3 + z^3)
sage: D = Curve(x^4 + y^4 + z^4)
sage: C.union(D)
Projective Plane Curve over Rational Field defined by
x^7 + x^4*y^3 + x^3*y^4 + y^7 + x^4*z^3 + y^4*z^3 + x^3*z^4 + y^3*z^4 + z^7
>>> from sage.all import *
>>> x,y,z = QQ['x,y,z'].gens()
>>> C = Curve(x**Integer(3) + y**Integer(3) + z**Integer(3))
>>> D = Curve(x**Integer(4) + y**Integer(4) + z**Integer(4))
>>> C.union(D)
Projective Plane Curve over Rational Field defined by
x^7 + x^4*y^3 + x^3*y^4 + y^7 + x^4*z^3 + y^4*z^3 + x^3*z^4 + y^3*z^4 + z^7

The intersection is not a curve, though it is a scheme.

sage: X = C.intersection(D); X
Closed subscheme of Projective Space of dimension 2 over Rational Field
 defined by: x^3 + y^3 + z^3,
             x^4 + y^4 + z^4
>>> from sage.all import *
>>> X = C.intersection(D); X
Closed subscheme of Projective Space of dimension 2 over Rational Field
 defined by: x^3 + y^3 + z^3,
             x^4 + y^4 + z^4

Note that the intersection has dimension 0.

sage: X.dimension()
0
sage: I = X.defining_ideal(); I
Ideal (x^3 + y^3 + z^3, x^4 + y^4 + z^4) of
 Multivariate Polynomial Ring in x, y, z over Rational Field
>>> from sage.all import *
>>> X.dimension()
0
>>> I = X.defining_ideal(); I
Ideal (x^3 + y^3 + z^3, x^4 + y^4 + z^4) of
 Multivariate Polynomial Ring in x, y, z over Rational Field

If only a polynomial in three variables is given, then it must be homogeneous such that a projective curve is constructed.

sage: x,y,z = QQ['x,y,z'].gens()
sage: Curve(x^2 + y^2)
Projective Conic Curve over Rational Field defined by x^2 + y^2
sage: Curve(x^2 + y^2 + z)
Traceback (most recent call last):
...
TypeError: x^2 + y^2 + z is not a homogeneous polynomial
>>> from sage.all import *
>>> x,y,z = QQ['x,y,z'].gens()
>>> Curve(x**Integer(2) + y**Integer(2))
Projective Conic Curve over Rational Field defined by x^2 + y^2
>>> Curve(x**Integer(2) + y**Integer(2) + z)
Traceback (most recent call last):
...
TypeError: x^2 + y^2 + z is not a homogeneous polynomial

An ambient space can be specified to construct a space curve in an affine or a projective space.

sage: A.<x,y,z> = AffineSpace(QQ, 3)
sage: C = Curve([y - x^2, z - x^3], A)
sage: C
Affine Curve over Rational Field defined by -x^2 + y, -x^3 + z
sage: A == C.ambient_space()
True
>>> from sage.all import *
>>> A = AffineSpace(QQ, Integer(3), names=('x', 'y', 'z',)); (x, y, z,) = A._first_ngens(3)
>>> C = Curve([y - x**Integer(2), z - x**Integer(3)], A)
>>> C
Affine Curve over Rational Field defined by -x^2 + y, -x^3 + z
>>> A == C.ambient_space()
True

The defining polynomial must be nonzero unless the ambient space itself is of dimension 1.

sage: P1.<x,y> = ProjectiveSpace(1, GF(5))
sage: S = P1.coordinate_ring()
sage: Curve(S(0), P1)
Projective Line over Finite Field of size 5
sage: Curve(P1)
Projective Line over Finite Field of size 5
>>> from sage.all import *
>>> P1 = ProjectiveSpace(Integer(1), GF(Integer(5)), names=('x', 'y',)); (x, y,) = P1._first_ngens(2)
>>> S = P1.coordinate_ring()
>>> Curve(S(Integer(0)), P1)
Projective Line over Finite Field of size 5
>>> Curve(P1)
Projective Line over Finite Field of size 5

An affine line:

sage: A1.<x> = AffineSpace(1, QQ)
sage: R = A1.coordinate_ring()
sage: Curve(R(0), A1)
Affine Line over Rational Field
sage: Curve(A1)
Affine Line over Rational Field
>>> from sage.all import *
>>> A1 = AffineSpace(Integer(1), QQ, names=('x',)); (x,) = A1._first_ngens(1)
>>> R = A1.coordinate_ring()
>>> Curve(R(Integer(0)), A1)
Affine Line over Rational Field
>>> Curve(A1)
Affine Line over Rational Field

A projective line:

sage: R.<x> = QQ[]
sage: N.<a> = NumberField(x^2 + 1)
sage: P1.<x,y> = ProjectiveSpace(N, 1)
sage: C = Curve(P1)
sage: C
Projective Line over Number Field in a with defining polynomial x^2 + 1
sage: C.geometric_genus()
0
sage: C.arithmetic_genus()
0
>>> from sage.all import *
>>> R = QQ['x']; (x,) = R._first_ngens(1)
>>> N = NumberField(x**Integer(2) + Integer(1), names=('a',)); (a,) = N._first_ngens(1)
>>> P1 = ProjectiveSpace(N, Integer(1), names=('x', 'y',)); (x, y,) = P1._first_ngens(2)
>>> C = Curve(P1)
>>> C
Projective Line over Number Field in a with defining polynomial x^2 + 1
>>> C.geometric_genus()
0
>>> C.arithmetic_genus()
0