Skip to content

Commit

Permalink
Parametrizing rational plane curves (#846)
Browse files Browse the repository at this point in the history
Co-authored-by: Daniel Schultz <tthsqe12@gmail.com>
  • Loading branch information
wdecker and tthsqe12 committed Dec 3, 2021
1 parent 2da2cc4 commit 8792057
Show file tree
Hide file tree
Showing 11 changed files with 408 additions and 56 deletions.
6 changes: 4 additions & 2 deletions docs/doc.main
Original file line number Diff line number Diff line change
Expand Up @@ -122,13 +122,15 @@
],

"Algebraic Geometry" => [
# "Curves" => [
"AlgebraicGeometry/intro.md",
"Curves" => [
# "Experimental/introduction.md",
# "Experimental/plane_curves.md",
# "Experimental/divisors.md",
# "Experimental/elliptic_curves.md",
# "Experimental/non_plane_curves.md",
# ],
"AlgebraicGeometry/para_rational_curves.md",
],
"Toric Varieties" => [
"ToricVarieties/intro.md",
"ToricVarieties/NormalToricVarieties.md",
Expand Down
20 changes: 20 additions & 0 deletions docs/oscar_references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,18 @@ @Article{BDEPS04
url = {https://doi.org/10.1093/qjmath/55.3.237}
}

@InCollection{BDLP17,
author = {Böhm, Janko and Decker, Wolfram and Laplagne, Santiago
and Pfister, Gerhard},
title = {Local to global algorithms for the Gorenstein adjoint
ideal of a curve},
booktitle = {Algorithmic and experimental methods in algebra, geometry,
and number theory},
pages = {51--96},
publisher = {Springer, Cham},
year = {2017}
}

@InProceedings{BDLP19,
title = {Computing integral bases via localization and Hensel
lifting},
Expand Down Expand Up @@ -66,6 +78,14 @@ @Article{BKR20
url = {https://doi.org/10.1090/mcom/3546}
}

@MastersThesis{Bhm99,
author = {Böhm, Janko},
title = {Parametrisierung rationaler Kurven},
school = {Universität Bayreuth},
type = {Diploma Thesis},
year = {1999}
}

@Book{CLS11,
author = {David A. {Cox} and John B. {Little} and Henry K.
{Schenck}},
Expand Down
21 changes: 21 additions & 0 deletions docs/src/AlgebraicGeometry/intro.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
```@meta
CurrentModule = Oscar
```

```@setup oscar
using Oscar
```

```@contents
Pages = ["intro.md"]
```

# Introduction

In this chapter, we introduce structures and functionality for dealing with varieties, sheaves, and schemes.

This part of Oscar is at the very beginning of its development.

We refer to the individual sections for references which provide details on theory and algorithms.


95 changes: 95 additions & 0 deletions docs/src/AlgebraicGeometry/para_rational_curves.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
```@meta
CurrentModule = Oscar
```

```@setup oscar
using Oscar
```

```@contents
Pages = ["para_rational_curves.md"]
```

# Rational Parametrizations of Rational Plane Curves

!!! note
In this section, $C$ will denote a complex projective plane curve, defined by an absolutely irreducible,
homogeneous polynomial in three variables, with coeffients in $\mathbb Q$. Moreover, we will write $n = \deg C$.

Recall that the curve $C$ is *rational* if it is birationally equivalent to the projective line $\mathbb P^1(\mathbb C)$.
In other words, there exists a *rational parametrization* of $C$, that is, a birational map $\mathbb P^1(\mathbb C)\dashrightarrow C$.
Note that such a parametrization is given by three homogeneous polynomials of the same degree in the homogeneous coordinates on
$\mathbb P^1(\mathbb C)$.

!!! note
The curve $C$ is rational iff its geometric genus is zero.

Based on work of Max Noether on adjoint curves, Hilbert und Hurwitz showed that if
$C$ is rational, then there is a birational map $C \dashrightarrow D$ defined over $\mathbb Q$ such
that $D = \mathbb P^1(\mathbb C)$ if $n$ is odd, and $D\subset\mathbb P^2(\mathbb C)$ is a conic if $n$ is even.

!!! note
If a conic $D$ contains a rational point, then there exists a parametrization of $D$ defined over $\mathbb Q$;
otherwise, there exists a parametrization of $D$ defined over a quadratic field extension of $\mathbb Q$.

The approach of Hilbert und Hurwitz is constructive and allows one, in principle, to find rational parametrizations.
The resulting algorithm is not very practical, however, as the approach asks to compute adjoint curves repeatedly,
at each of a number of reduction steps.

The algorithm implemented in OSCAR relies on reduction steps of a different type and requires the computation of adjoint
curves only once. Its individual steps are interesting in their own right:

- Assure that the curve $C$ is rational by checking that its geometric genus is zero;
- compute a basis of the adjoint curves of $C$ of degree ${n-2}$; each such basis defines a birational map $C \dashrightarrow C_{n-2},$
where $C_{n-2}$ is a rational normal curve in $\mathbb P^{n-2}(\mathbb C)$;
- the anticanonical linear system on $C_{n-2}$ defines a birational map $C_{n-2}\dashrightarrow C_{n-4}$, where $C_{n-4}$ is a rational normal curve in in $\mathbb P^{n-4}(\mathbb C)$;
- iterate the previous step to obtain a birational map $C_{n-2} \dashrightarrow \dots \dashrightarrow D$,
where $D = \mathbb P^1(\mathbb C)$ if $n$ is odd, and $D\subset\mathbb P^2(\mathbb C)$ is a conic if $n$ is even;
- invert the birational map $C \dashrightarrow C_{n-2} \dashrightarrow \dots \dashrightarrow D$;
- if $n$ is even, compute a parametrization of the conic $D$ and compose it with the inverted map above.

!!! note
The defining property of an adjoint curve is that it passes with “sufficiently high” multiplicity through the singularities of $C$.
There are several concepts of making this precise. For each such concept, there is a corresponding *adjoint ideal* of $C$,
namely the homogeneous ideal formed by the defining polynomials of the adjoint curves. In OSCAR, we follow
the concept of Gorenstein which leads to the largest possible adjoint ideal.

See [Bhm99](@cite) and [BDLP17](@cite) for details and further references.

## Creating Projective Plane Curves

The data structures for algebraic curves in OSCAR are still under development
and subject to change. Here is the current constructor for projective plane curves:

```@docs
ProjPlaneCurve(f::MPolyElem{T}) where {T <: FieldElem}
```

## The Genus of a Plane Curve

```@docs
geometric_genus(C::ProjectivePlaneCurve{T}) where T <: FieldElem
```

## Adjoint Ideals of Plane Curves

```@docs
adjoint_ideal(C::ProjPlaneCurve{fmpq})
```

## Rational Points on Conics

```@docs
rational_point_conic(D::ProjPlaneCurve{fmpq})
```
## Parametrizing Rational Plane Curves

```@docs
parametrization_plane_curve(C::ProjPlaneCurve{fmpq})
```






12 changes: 6 additions & 6 deletions experimental/PlaneCurve/AffinePlaneCurve.jl
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ julia> D = Oscar.AffinePlaneCurve(x*(x+y)*(x-y))
Affine plane curve defined by x^3 - x*y^2
julia> Oscar.common_components(C, D)
1-element Vector{Oscar.PlaneCurveModule.AffinePlaneCurve{fmpq}}:
1-element Vector{AffinePlaneCurve{fmpq}}:
Affine plane curve defined by x^2 + x*y
```
"""
Expand Down Expand Up @@ -141,8 +141,8 @@ Affine plane curve defined by x^2 - x*y - 2*x + 2*y
julia> Oscar.curve_intersect(C, D)
2-element Vector{Vector{T} where T}:
Oscar.PlaneCurveModule.AffinePlaneCurve[]
Oscar.PlaneCurveModule.Point{fmpq}[Point with coordinates fmpq[0, 0], Point with coordinates fmpq[2, -2]]
AffinePlaneCurve[]
Point{fmpq}[Point with coordinates fmpq[0, 0], Point with coordinates fmpq[2, -2]]
```
"""
function curve_intersect(C::AffinePlaneCurve{S}, D::AffinePlaneCurve{S}) where S <: FieldElem
Expand Down Expand Up @@ -231,8 +231,8 @@ Affine plane curve defined by -x^5 - x^4*y + x^3*y^3 + x^2*y^4
julia> Oscar.curve_singular_locus(C)
2-element Vector{Vector{T} where T}:
Oscar.PlaneCurveModule.AffinePlaneCurve[Affine plane curve defined by x]
Oscar.PlaneCurveModule.Point[Point with coordinates fmpq[-1, 1], Point with coordinates fmpq[0, 0]]
AffinePlaneCurve[Affine plane curve defined by x]
Point[Point with coordinates fmpq[-1, 1], Point with coordinates fmpq[0, 0]]
```
"""
function curve_singular_locus(C::AffinePlaneCurve)
Expand Down Expand Up @@ -355,7 +355,7 @@ julia> P = Oscar.Point([QQ(0), QQ(0)])
Point with coordinates fmpq[0, 0]
julia> Oscar.tangent_lines(C, P)
Dict{Oscar.PlaneCurveModule.AffinePlaneCurve{fmpq}, Int64} with 2 entries:
Dict{AffinePlaneCurve{fmpq}, Int64} with 2 entries:
x => 4
x + y => 1
```
Expand Down
Loading

0 comments on commit 8792057

Please sign in to comment.