# Divisor -- divisors

## Description

Divisor is a package for working with (Q/R)-Weil divisors on normal affine and projective varieties (equivalently, on commutative, normal and graded rings).

This package introduces a type WeilDivisor which lets the user work with Weil divisors similar to the way one might in algebraic geometry. We highlight a few important functions below.

Useful functions:
• isCartier or isQCartier can let you determine if a divisor is Cartier or if a power is Cartier.
• isVeryAmple lets you check if a divisor is very ample.
• baseLocus lets you compute the base locus of the complete linear system corresponding to a divisor on a projective variety.
• mapToProjectiveSpace returns the map to projective space determined by the complete linear system determined by the divisor.
• canonicalDivisor lets you compute the canonical divisor on some affine or projective variety.
• ramificationDivisor lets you compute the relative canonical divisor of a finite map varieties.

This package also includes some functions for interacting with ideals and modules which might be independently useful.
• embedAsIdeal embeds a rank one module as an ideal.
• reflexify computes the reflexification, Hom(Hom(M, R), R) of a module M or ideal.
• reflexivePower computes the reflexification of a power of an ideal quickly.
• torsionSubmodule find the torsion submodule of a module.

We emphasize once more that the functions in this package might produce unexpected results on non-normal rings.

Acknowledgements:

The authors would like to thank Tommaso de Fernex, David Eisenbud, Daniel Grayson, Anurag Singh, Greg Smith, Mike Stillman and the referee for useful conversations and comments on the development of this package.

## Certification

Version 0.3 of this package was accepted for publication in volume 8 of The Journal of Software for Algebra and Geometry on 31 August 2018, in the article Divisor Package for Macaulay2. That version can be obtained from the journal or from the Macaulay2 source code repository.

## Version

This documentation describes version 0.3 of Divisor.

## Source code

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

## Exports

• Types
• Functions and commands
• applyToCoefficients -- apply a function to the coefficients of a divisor
• baseLocus -- compute the locus where a graded module (or O(D) of a Weil divisor) is not globally generated
• canonicalDivisor -- compute a canonical divisor of a ring
• cleanSupport -- removes primes with coefficient zero from a divisor
• clearCache -- creates a new divisor with most entries from the cache removed
• divisor -- constructor for (Weil/Q/R)-divisors
• dualize -- finds an ideal or module isomorphic to Hom(M, R)
• embedAsIdeal -- embed a module as an ideal of a ring
• findElementOfDegree -- find an element of a specified degree
• gbs -- get the list of Groebner bases corresponding to the height-one primes in the support of a divisor
• getLinearDiophantineSolution -- find a solution of the linear Diophantine equation Ax = b
• getPrimeCount -- get the number of height-one primes in the support of the divisor
• getPrimeDivisors -- get the list of prime divisors of a given divisor
• idealPower -- compute the ideal generated by the generators of the ideal raised to a power
• isCartier -- whether a Weil divisor is Cartier
• isDomain -- whether a ring is a domain
• isEffective -- whether a divisor is effective
• isLinearEquivalent -- whether two Weil divisors are linearly equivalent
• isPrincipal -- whether a Weil divisor is globally principal
• isQCartier -- whether m times a divisor is Cartier for any m from 1 to a fixed positive integer n1.
• isQLinearEquivalent -- whether two Q-divisors are linearly equivalent
• isReduced -- whether a divisor is reduced
• isReflexive -- whether an ideal or module is reflexive
• isSmooth -- whether R mod the ideal is smooth
• isSNC -- whether the divisor is simple normal crossings
• isVeryAmple -- whether a divisor is very ample.
• isWeilDivisor -- whether a rational/real divisor is in actuality a Weil divisor
• isZeroDivisor -- whether the divisor is the zero divisor
• mapToProjectiveSpace -- compute the map to projective space associated with the global sections of a Cartier divisor
• nonCartierLocus -- the non-Cartier locus of a Weil divisor
• "negativePart" -- see positivePart -- get the effective part or anti-effective part of a divisor
• positivePart -- get the effective part or anti-effective part of a divisor
• primes -- get the list of height-one primes in the support of a divisor
• pullback -- pullback a divisor under a ring map
• ramificationDivisor -- compute the ramification divisor of a finite inclusion of normal domains or a blowup over a smooth base
• reflexify -- calculate the double dual of an ideal or module Hom(Hom(M, R), R)
• reflexivePower -- computes a reflexive power of an ideal in a normal domain
• toQWeilDivisor -- create a Q-Weil divisor from a Weil divisor
• torsionSubmodule -- create the torsion submodule of a module
• toRWeilDivisor -- create a R-divisor from a Q or Weil divisor
• toWeilDivisor -- create a Weil divisor from a Q or R-divisor
• zeroDivisor -- constructs the zero Weil divisor for the ring
• Methods
• "applyToCoefficients(BasicDivisor,Function)" -- see applyToCoefficients -- apply a function to the coefficients of a divisor
• "baseLocus(Module)" -- see baseLocus -- compute the locus where a graded module (or O(D) of a Weil divisor) is not globally generated
• "baseLocus(WeilDivisor)" -- see baseLocus -- compute the locus where a graded module (or O(D) of a Weil divisor) is not globally generated
• "- BasicDivisor" -- see BasicDivisor + BasicDivisor -- add or subtract two divisors, or negate a divisor
• BasicDivisor + BasicDivisor -- add or subtract two divisors, or negate a divisor
• "BasicDivisor - BasicDivisor" -- see BasicDivisor + BasicDivisor -- add or subtract two divisors, or negate a divisor
• "canonicalDivisor(Ring)" -- see canonicalDivisor -- compute a canonical divisor of a ring
• ceiling(RWeilDivisor) -- produce a WeilDivisor whose coefficients are ceilings or floors of the divisor
• "floor(RWeilDivisor)" -- see ceiling(RWeilDivisor) -- produce a WeilDivisor whose coefficients are ceilings or floors of the divisor
• "cleanSupport(BasicDivisor)" -- see cleanSupport -- removes primes with coefficient zero from a divisor
• "clearCache(BasicDivisor)" -- see clearCache -- creates a new divisor with most entries from the cache removed
• coefficient(BasicList,BasicDivisor) -- get the coefficient of an ideal for a fixed divisor
• coefficient(Ideal,BasicDivisor) -- get the coefficient of an ideal for a fixed divisor
• coefficients(BasicDivisor) -- get the list of coefficients of a divisor
• "divisor(BasicList)" -- see divisor -- constructor for (Weil/Q/R)-divisors
• "divisor(BasicList,BasicList)" -- see divisor -- constructor for (Weil/Q/R)-divisors
• "divisor(Ideal)" -- see divisor -- constructor for (Weil/Q/R)-divisors
• "divisor(Matrix)" -- see divisor -- constructor for (Weil/Q/R)-divisors
• "divisor(Module)" -- see divisor -- constructor for (Weil/Q/R)-divisors
• "divisor(RingElement)" -- see divisor -- constructor for (Weil/Q/R)-divisors
• "dualize(Ideal)" -- see dualize -- finds an ideal or module isomorphic to Hom(M, R)
• "dualize(Module)" -- see dualize -- finds an ideal or module isomorphic to Hom(M, R)
• "embedAsIdeal(Matrix)" -- see embedAsIdeal -- embed a module as an ideal of a ring
• "embedAsIdeal(Module)" -- see embedAsIdeal -- embed a module as an ideal of a ring
• "embedAsIdeal(Ring,Matrix)" -- see embedAsIdeal -- embed a module as an ideal of a ring
• "embedAsIdeal(Ring,Module)" -- see embedAsIdeal -- embed a module as an ideal of a ring
• "findElementOfDegree(BasicList,Ring)" -- see findElementOfDegree -- find an element of a specified degree
• "findElementOfDegree(ZZ,Ring)" -- see findElementOfDegree -- find an element of a specified degree
• "gbs(BasicDivisor)" -- see gbs -- get the list of Groebner bases corresponding to the height-one primes in the support of a divisor
• "getLinearDiophantineSolution(BasicList,BasicList)" -- see getLinearDiophantineSolution -- find a solution of the linear Diophantine equation Ax = b
• "getLinearDiophantineSolution(BasicList,Matrix)" -- see getLinearDiophantineSolution -- find a solution of the linear Diophantine equation Ax = b
• "getPrimeCount(BasicDivisor)" -- see getPrimeCount -- get the number of height-one primes in the support of the divisor
• "getPrimeDivisors(BasicDivisor)" -- see getPrimeDivisors -- get the list of prime divisors of a given divisor
• "ideal(QWeilDivisor)" -- see ideal(RWeilDivisor) -- calculate the corresponding module of a divisor and represent it as an ideal
• ideal(RWeilDivisor) -- calculate the corresponding module of a divisor and represent it as an ideal
• "ideal(WeilDivisor)" -- see ideal(RWeilDivisor) -- calculate the corresponding module of a divisor and represent it as an ideal
• "idealPower(ZZ,Ideal)" -- see idealPower -- compute the ideal generated by the generators of the ideal raised to a power
• "isCartier(WeilDivisor)" -- see isCartier -- whether a Weil divisor is Cartier
• "isDomain(Ring)" -- see isDomain -- whether a ring is a domain
• "isEffective(BasicDivisor)" -- see isEffective -- whether a divisor is effective
• isHomogeneous(BasicDivisor) -- whether the divisor is graded (homogeneous)
• "isLinearEquivalent(WeilDivisor,WeilDivisor)" -- see isLinearEquivalent -- whether two Weil divisors are linearly equivalent
• isPrime(BasicDivisor) -- whether a divisor is prime
• "isPrincipal(WeilDivisor)" -- see isPrincipal -- whether a Weil divisor is globally principal
• "isQCartier(ZZ,QWeilDivisor)" -- see isQCartier -- whether m times a divisor is Cartier for any m from 1 to a fixed positive integer n1.
• "isQCartier(ZZ,WeilDivisor)" -- see isQCartier -- whether m times a divisor is Cartier for any m from 1 to a fixed positive integer n1.
• "isQLinearEquivalent(ZZ,QWeilDivisor,QWeilDivisor)" -- see isQLinearEquivalent -- whether two Q-divisors are linearly equivalent
• "isReduced(BasicDivisor)" -- see isReduced -- whether a divisor is reduced
• "isReflexive(Ideal)" -- see isReflexive -- whether an ideal or module is reflexive
• "isReflexive(Module)" -- see isReflexive -- whether an ideal or module is reflexive
• "isSmooth(Ideal)" -- see isSmooth -- whether R mod the ideal is smooth
• "isSNC(BasicDivisor)" -- see isSNC -- whether the divisor is simple normal crossings
• "isVeryAmple(WeilDivisor)" -- see isVeryAmple -- whether a divisor is very ample.
• "isWeilDivisor(RWeilDivisor)" -- see isWeilDivisor -- whether a rational/real divisor is in actuality a Weil divisor
• isWellDefined(BasicDivisor) -- whether a divisor is valid
• "isZeroDivisor(BasicDivisor)" -- see isZeroDivisor -- whether the divisor is the zero divisor
• "mapToProjectiveSpace(WeilDivisor)" -- see mapToProjectiveSpace -- compute the map to projective space associated with the global sections of a Cartier divisor
• "nonCartierLocus(WeilDivisor)" -- see nonCartierLocus -- the non-Cartier locus of a Weil divisor
• Number * BasicDivisor -- multiply a divisor by a number
• "QQ * RWeilDivisor" -- see Number * BasicDivisor -- multiply a divisor by a number
• "QQ * WeilDivisor" -- see Number * BasicDivisor -- multiply a divisor by a number
• "RR * QWeilDivisor" -- see Number * BasicDivisor -- multiply a divisor by a number
• "RR * RWeilDivisor" -- see Number * BasicDivisor -- multiply a divisor by a number
• OO RWeilDivisor -- calculate module corresponding to divisor
• "negativePart(RWeilDivisor)" -- see positivePart -- get the effective part or anti-effective part of a divisor
• "positivePart(RWeilDivisor)" -- see positivePart -- get the effective part or anti-effective part of a divisor
• "primes(BasicDivisor)" -- see primes -- get the list of height-one primes in the support of a divisor
• "pullback(RingMap,RWeilDivisor)" -- see pullback -- pullback a divisor under a ring map
• "ramificationDivisor(RingMap)" -- see ramificationDivisor -- compute the ramification divisor of a finite inclusion of normal domains or a blowup over a smooth base
• "reflexify(Ideal)" -- see reflexify -- calculate the double dual of an ideal or module Hom(Hom(M, R), R)
• "reflexify(Module)" -- see reflexify -- calculate the double dual of an ideal or module Hom(Hom(M, R), R)
• "reflexivePower(ZZ,Ideal)" -- see reflexivePower -- computes a reflexive power of an ideal in a normal domain
• ring(BasicDivisor) -- get the ambient ring of a divisor
• RWeilDivisor == RWeilDivisor -- whether two divisors are equal
• "toQWeilDivisor(QWeilDivisor)" -- see toQWeilDivisor -- create a Q-Weil divisor from a Weil divisor
• "toQWeilDivisor(WeilDivisor)" -- see toQWeilDivisor -- create a Q-Weil divisor from a Weil divisor
• "torsionSubmodule(Module)" -- see torsionSubmodule -- create the torsion submodule of a module
• "toRWeilDivisor(QWeilDivisor)" -- see toRWeilDivisor -- create a R-divisor from a Q or Weil divisor
• "toRWeilDivisor(RWeilDivisor)" -- see toRWeilDivisor -- create a R-divisor from a Q or Weil divisor
• "toRWeilDivisor(WeilDivisor)" -- see toRWeilDivisor -- create a R-divisor from a Q or Weil divisor
• "toWeilDivisor(RWeilDivisor)" -- see toWeilDivisor -- create a Weil divisor from a Q or R-divisor
• trim(BasicDivisor) -- trims the ideals displayed to the user and removes primes with coefficient zero
• "zeroDivisor(Ring)" -- see zeroDivisor -- constructs the zero Weil divisor for the ring
• Symbols
• AmbientRing -- an option used to tell divisor construction that a particular ambient ring is expected.
• CoefficientType -- an option used to tell divisor construction that a particular type of coefficients are expected.
• ideals -- a symbol used as a key within the divisor cache
• IdealStrategy -- a valid value for the Strategy option in dualize or reflexify
• "ModuleStrategy" -- see IdealStrategy -- a valid value for the Strategy option in dualize or reflexify
• "NoStrategy" -- see IdealStrategy -- a valid value for the Strategy option in dualize or reflexify
• IsGraded -- an option used by numerous functions which tells it to treat the divisors as if we were working on the Proj of the ambient ring.
• KnownCartier -- an option used to specify to certain functions that we know that the divisor is Cartier
• KnownDomain -- an option used to specify to certain functions that we know that the ring is a domain
• MTries -- an option used by embedAsIdeal how many times to try embedding the module as an ideal in a random way.
• Primes -- a value for the option Strategy for the pullback method
• ReturnMap -- an option for embedAsIdeal
• Safe -- an option used to tell functions whether not to do checks.
• Section -- an option used in a number of functions
• Sheaves -- a value for the option Strategy for the pullback method

## For the programmer

The object Divisor is .