# 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
```
```sage: P.<x,y,z> = ProjectiveSpace(GF(5), 2)                                         # optional - sage.rings.finite_rings
sage: Curve(y^2*z^7 - x^9 - x*z^8)                                                  # optional - sage.rings.finite_rings
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)#

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
```

Affine plane curves.

```sage: x,y = GF(7)['x,y'].gens()                                                 # optional - sage.rings.finite_rings
sage: C = Curve(y^2 + x^3 + x^10); C                                            # optional - sage.rings.finite_rings
Affine Plane Curve over Finite Field of size 7 defined by x^10 + x^3 + y^2
sage: C.genus()                                                                 # optional - sage.rings.finite_rings
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
```

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
```

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
```

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
```

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
```

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
```

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
```

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
```

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
```

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

```sage: P1.<x,y> = ProjectiveSpace(1, GF(5))                                      # optional - sage.rings.finite_rings
sage: S = P1.coordinate_ring()                                                  # optional - sage.rings.finite_rings
sage: Curve(S(0), P1)                                                           # optional - sage.rings.finite_rings
Projective Line over Finite Field of size 5
sage: Curve(P1)                                                                 # optional - sage.rings.finite_rings
Projective Line over Finite Field of size 5
```
```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
```