# SpaceCurves -- generation of space curves

## Description

SpaceCurves is a package dedicated to generation of curves in P3. The 1.0 version of the package generates smooth curves of a given degree and genus, ACM curves of a given Hilbert function as well as minimal curves in biliaison class with a given Rao-module.

The method smoothDivisors produces a list of Divisor of a given degree on a given surface. The method curve(Divisor) produces a random curve in a given divisor class. For a given degree, as one varies the input surface from a smooth quadric, a smooth cubic and a rational quartic surface with a double line, all obtainable genus of a smooth curve will occur (save that of a plane curve). The methods to create the said surfaces are: quadricSurface(Ring), cubicSurface(Ring) and quarticSurfaceRational(Ring).

 i1 : R = ZZ/101[x,y,z,w]; i2 : X = quadricSurface(R); i3 : Y = cubicSurface(R); i4 : Z = quarticSurfaceRational(R); i5 : LD = smoothDivisors(4,X) | smoothDivisors(4,Y) | smoothDivisors(4,Z) o5 = {{1, 3}, {2, 2}, {2, 2, 0, 0, 0, 0, 0}, {2, 1, 1, 0, 0, 0, 0}, {3, 1, 1, ------------------------------------------------------------------------ 1, 1, 1, 0}, {2, 0, 1, 1, 1, 1, 0, 0, 0, 0}, {3, 1, 1, 1, 1, 1, 1, 1, 0, ------------------------------------------------------------------------ 0}} o5 : List i6 : LC = apply(LD,D->curve D);

The method curve(ZZ,ZZ) generates a random curve with the specified degree and genus.

 i7 : C = curve(5,2); i8 : degree C, genus C, isPrime C, isSmooth C o8 = (5, 2, true, true) o8 : Sequence

The postulation character of a curve is defined to be the negative of the third numerical difference of its Hilbert function, and gives equivalent information as the Hilbert function. The method function positiveChars(ZZ) generates all possible postulation characters of an ACM curve of a given degree. The method allACMBetti(List) generates all Betti tables of ACM curves with a given postulation character. The method function degreeMatrix(BettiTally) converts the Betti table of an ACM curve to its Hilbert-Burch degree matrix. Finally randomDeterminantalIdeal(Ring,Matrix) generates a random determinantal ideal in a given ring with specified degree format. Combining all three methods we can generate ACM curves of any degree d, exhausting all possibilities of Betti tables.

 i9 : G = positiveChars(8); i10 : L = G / allACMBetti; i11 : netList L +------------+------------+ | 0 1 2| | o11 = |total: 1 3 2| | | 0: 1 . .| | | 1: . 2 1| | | 2: . . .| | | 3: . . .| | | 4: . . .| | | 5: . . .| | | 6: . 1 1| | +------------+------------+ | 0 1 2| | |total: 1 3 2| | | 0: 1 . .| | | 1: . 1 .| | | 2: . 1 1| | | 3: . . .| | | 4: . . .| | | 5: . 1 1| | +------------+------------+ | 0 1 2| 0 1 2| |total: 1 2 1|total: 1 3 2| | 0: 1 . .| 0: 1 . .| | 1: . 1 .| 1: . 1 .| | 2: . . .| 2: . . .| | 3: . 1 .| 3: . 1 1| | 4: . . 1| 4: . 1 1| +------------+------------+ | 0 1 2| | |total: 1 4 3| | | 0: 1 . .| | | 1: . . .| | | 2: . 3 2| | | 3: . . .| | | 4: . 1 1| | +------------+------------+ | 0 1 2| 0 1 2| |total: 1 3 2|total: 1 4 3| | 0: 1 . .| 0: 1 . .| | 1: . . .| 1: . . .| | 2: . 2 .| 2: . 2 1| | 3: . 1 2| 3: . 2 2| +------------+------------+ i12 : apply(L, g -> apply(g, B -> randomDeterminantalIdeal(ZZ/101[x,y,z,w], degreeMatrix B)));

The method minimalCurve(Module) produces a minimal curve in the biliaison class specified by the finite length module. The method minimalCurve(Ideal) produces a random minimal curve in the biliaison class of a given curve.

 i13 : I = monomialCurveIdeal(R,{1,3,4}) 3 2 2 2 3 2 o13 = ideal (y*z - x*w, z - y*w , x*z - y w, y - x z) o13 : Ideal of R i14 : M = raoModule(I) o14 = cokernel {1} | w -z y -x | 1 o14 : R-module, quotient of R i15 : J = minimalCurve M; o15 : Ideal of R i16 : betti res J 0 1 2 3 o16 = total: 1 4 4 1 0: 1 . . . 1: . 4 4 1 o16 : BettiTally

## Curves

• Curve -- type of HashTable
• curve -- generates a random curve
• isSmooth -- checks smoothness of an ideal or of a Curve

## Minimal curves

• minimalCurve -- generates a minimal curve in the biliaison class
• raoModule -- computes the Rao module of a curve

## ACM Curves

• positiveChars -- generates all positive characters of a given degree
• generalACMBetti -- the most general Betti table of an ACM curve with a given Hilbert function
• specializeACMBetti -- lists all 1-specialization of a Betti table of an ACM curve
• allACMBetti -- lists all Betti tables of ACM curves with a given Hilbert function
• isACMBetti -- checks whether a Betti table is that of an ACM curve
• isSmoothACMBetti -- checks whether a Betti table is that of a smooth ACM curve
• degreeMatrix -- computes the Hilbert-Burch degree matrix from a Betti table of ACM curves
• randomDeterminantalIdeal -- produces a random determinantal ideal

## Certification Version 1.0 of this package was accepted for publication in volume 8 of The Journal of Software for Algebra and Geometry on 18 May 2018, in the article The SpaceCurves package in Macaulay2. That version can be obtained from the journal or from the Macaulay2 source code repository.

## Version

This documentation describes version 1.0 of SpaceCurves.

## Source code

The source code from which this documentation is derived is in the file SpaceCurves.m2.

## Exports

• Types
• Functions and commands
• Methods
• "allACMBetti(List)" -- see allACMBetti -- lists all Betti tables of ACM curves with a given Hilbert function
• "cubicSurface(Ring)" -- see cubicSurface -- creates a cubicSurface
• "curve(Divisor)" -- see curve -- generates a random curve
• "curve(ZZ,ZZ)" -- see curve -- generates a random curve
• "curve(ZZ,ZZ,Ring)" -- see curve -- generates a random curve
• degree(Curve) -- computes the degree of a Curve
• degree(Divisor) -- computes the degree of a Divisor
• "degreeMatrix(BettiTally)" -- see degreeMatrix -- computes the Hilbert-Burch degree matrix from a Betti table of ACM curves
• "dgTable(List)" -- see dgTable -- prints the table of (degree,genus) pairs
• "divisor(List,CubicSurface)" -- see divisor -- creates a Divisor
• "divisor(List,QuadricSurface)" -- see divisor -- creates a Divisor
• "divisor(List,QuarticSurfaceRational)" -- see divisor -- creates a Divisor
• Divisor * Divisor -- intersection number of two Divisors
• Divisor + Divisor -- sum of two Divisors
• Divisor - Divisor -- difference of two Divisors
• divisor(Curve) -- extracts the Divisor of a Curve
• "generalACMBetti(List)" -- see generalACMBetti -- the most general Betti table of an ACM curve with a given Hilbert function
• genus(Curve) -- computes the genus of a Curve
• genus(Divisor) -- computes the genus of a Divisor
• ideal(Curve) -- extracts the ideal of a Curve
• "ideal(CubicSurface)" -- see ideal(QuadricSurface) -- extracts the ideal of a surface
• ideal(QuadricSurface) -- extracts the ideal of a surface
• "ideal(QuarticSurfaceRational)" -- see ideal(QuadricSurface) -- extracts the ideal of a surface
• "isACMBetti(BettiTally)" -- see isACMBetti -- checks whether a Betti table is that of an ACM curve
• isPrime(Curve) -- checks if the ideal of a Curve is prime
• "isSmooth(Curve)" -- see isSmooth -- checks smoothness of an ideal or of a Curve
• "isSmooth(Ideal)" -- see isSmooth -- checks smoothness of an ideal or of a Curve
• "isSmoothACMBetti(BettiTally)" -- see isSmoothACMBetti -- checks whether a Betti table is that of a smooth ACM curve
• "minimalCurve(Curve)" -- see minimalCurve -- generates a minimal curve in the biliaison class
• "minimalCurve(Ideal)" -- see minimalCurve -- generates a minimal curve in the biliaison class
• "minimalCurve(Module)" -- see minimalCurve -- generates a minimal curve in the biliaison class
• "minimalCurveBetti(Curve)" -- see minimalCurveBetti -- computes the Betti diagram of the minimal curve
• "minimalCurveBetti(Ideal)" -- see minimalCurveBetti -- computes the Betti diagram of the minimal curve
• "minimalCurveBetti(Module)" -- see minimalCurveBetti -- computes the Betti diagram of the minimal curve
• net(CubicSurface) -- displays the ideal of the CubicSurface
• net(Curve) -- displays the ideal of the curve
• net(Divisor) -- displays the coordinates of the Divisor
• net(QuarticSurfaceRational) -- displays the ideal of the QuarticSurfaceRational
• "positiveChars(ZZ)" -- see positiveChars -- generates all positive characters of a given degree
• "positiveChars(ZZ,ZZ)" -- see positiveChars -- generates all positive characters of a given degree
• "quarticSurfaceRational(Ring)" -- see quarticSurfaceRational -- creates a QuarticSurfaceRational
• "randomDeterminantalIdeal(Ring,Matrix)" -- see randomDeterminantalIdeal -- produces a random determinantal ideal
• "raoModule(Curve)" -- see raoModule -- computes the Rao module of a curve
• "raoModule(Ideal)" -- see raoModule -- computes the Rao module of a curve
• "smoothDivisors(ZZ,CubicSurface)" -- see smoothDivisors -- produces a list of smooth divisors of a given degree on a surface
• "smoothDivisors(ZZ,QuadricSurface)" -- see smoothDivisors -- produces a list of smooth divisors of a given degree on a surface
• "smoothDivisors(ZZ,QuarticSurfaceRational)" -- see smoothDivisors -- produces a list of smooth divisors of a given degree on a surface
• smoothDivisors(ZZ,ZZ) -- produces a list of smooth divisors of given degree and genus
• "smoothDivisors(ZZ,ZZ,Ring)" -- see smoothDivisors(ZZ,ZZ) -- produces a list of smooth divisors of given degree and genus
• "specializeACMBetti(BettiTally)" -- see specializeACMBetti -- lists all 1-specialization of a Betti table of an ACM curve
• "surface(Curve)" -- see surface -- the surface key of a Divisor or a Curve
• "surface(Divisor)" -- see surface -- the surface key of a Divisor or a Curve
• ZZ * Divisor -- multiply a Divisor by an integer
• Symbols
• BlowUpPoints -- key for CubicSurface and QuarticSurfaceRational
• CanonicalClass -- key for QuadricSurface, CubicSurface and QuarticSurfaceRational
• Coordinate -- key of Divisor
• HyperplaneClass -- key for QuadricSurface, CubicSurface and QuarticSurfaceRational
• IntersectionPairing -- key for QuadricSurface, CubicSurface and QuarticSurfaceRational
• MapToP3 -- key for CubicSurface and QuarticSurfaceRational
• Surface -- key of Divisor

## For the programmer

The object SpaceCurves is .