# Projective Curves

`ProjectiveCurve`

— Type`ProjectiveCurve`

A reduced projective curve, defined as the vanishing locus of a homogeneous (but not necessarily radical) ideal.

**Examples**

```
julia> R, (w, x, y, z) = graded_polynomial_ring(QQ, ["w", "x", "y", "z"]);
julia> M = matrix(R, 2, 3, [w x y; x y z])
[w x y]
[x y z]
julia> V = minors(M, 2)
3-element Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}:
w*y - x^2
w*z - x*y
x*z - y^2
julia> I = ideal(R, V);
julia> TC = projective_curve(I)
Projective curve
in projective 3-space over QQ with coordinates [w, x, y, z]
defined by ideal (w*y - x^2, w*z - x*y, x*z - y^2)
```

`invert_birational_map`

— Function`invert_birational_map(phi::Vector{T}, C::ProjectiveCurve) where {T <: MPolyRingElem}`

Return a dictionary where `image`

represents the image of the birational map given by `phi`

, and `inverse`

represents its inverse, where `phi`

is a birational map of the projective curve `C`

to its image in the projective space of dimension `size(phi) - 1`

. Note that the entries of `inverse`

should be considered as representatives of elements in `R/image`

, where `R`

is the basering.

`invert_birational_map(phi::Vector{T}, C::ProjectivePlaneCurve) where {T <: MPolyRingElem}`

Return a dictionary where `image`

represents the image of the birational map given by `phi`

, and `inverse`

represents its inverse, where `phi`

is a birational map of the projective plane curve `C`

to its image in the projective space of dimension `size(phi) - 1`

. Note that the entries of `inverse`

should be considered as representatives of elements in `R/image`

, where `R`

is the basering.

`geometric_genus`

— Function`geometric_genus(X::AbsProjectiveScheme{<:Field}; algorithm::Symbol=:default) -> Int`

Given a projective curve `X`

return the genus of `X`

, i.e. the integer $p_g = p_a - \delta$ where $p_a$ is the arithmetic genus and `\delta`

the $\delta$-invariant of the curve.

The `algorithm`

keyword can be specified to

`:normalization`

to compute $\delta$ a normalization`:primary_decomposition`

to proceed with a primary decomposition

Normalization is usually slower, but not always.

**Examples**

```
julia> R, (x,y,z) = graded_polynomial_ring(QQ, ["x", "y", "z"]);
julia> C = plane_curve(z*x^2-y^3)
Projective plane curve
defined by 0 = x^2*z - y^3
julia> geometric_genus(C)
0
```