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
, whereF
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 ifF
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, ifF
contains a nonhomogeneous polynomial, the curve is affine, and ifF
consists of homogeneous polynomials, then the curve is projective.INPUT:
F
– a multivariate polynomial, or a list or tuple of polynomials, or an algebraic schemeA
– (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