next | previous | forward | backward | up | top | index | toc | Macaulay2 website
VectorFields :: isFreeDivisor

isFreeDivisor -- check if the provided information is associated with a free divisor



Determine whether the given object is associated to a free divisor, using a variety of methods. A free divisor is a hypersurface germ $X$ for which the associated module of logarithmic vector fields (see derlog) is free.

When given a RingElement f, this tests whether f=0 is a free divisor by computing derlog(ideal (f)) and then testing if this is a free module by computing a partial resolution. This method may give false negatives if the resolution computed is not minimal; use with caution.

When given a Matrix M, this tests whether the given vector fields are a free set of generators of the module of logarithmic vector fields for a free divisor. A criterion of Kyoji Saito is used: if the number of vector fields provided equals the dimension of the ambient space (i.e., M is square), the vector fields generate a Lie algebra, and the determinant of the matrix is reduced (square-free), then the provided vector fields are a free basis of the free module derlog(ideal det(M)), and det(M)=0 defines a free divisor. This method may give false negatives if redundant generators are provided.

When given a Module, this tests whether the module is the module of logarithmic vector fields of a free divisor. The method applies the Matrix version of the command to the generators given by gens(m). If the generators provided by generators are not minimal, then this may give false negatives; use trim first.

For example, this is not a free divisor:

i1 : R=QQ[a,b,c];
i2 : f=a*c-b^2;
i3 : M=derlog(ideal (f))

o3 = image | 2b a  0  0  |
           | c  0  b  a  |
           | 0  -c 2c 2b |

o3 : R-module, submodule of R
i4 : isFreeDivisor(gens M)

o4 = false
i5 : isFreeDivisor(M)

o5 = false
i6 : isFreeDivisor(f)

o6 = false

This is a free divisor:

i7 : f=a*(a*c-b^2);
i8 : M=derlog(ideal (f))

o8 = image | a  0  0  |
           | 0  b  a  |
           | -c 2c 2b |

o8 : R-module, submodule of R
i9 : isFreeDivisor(gens M)

o9 = true
i10 : isFreeDivisor(M)

o10 = true
i11 : isFreeDivisor(f)

o11 = true

This is a free divisor:

i12 : f=a;
i13 : D=derlog(ideal (f))

o13 = image | 0 0 a |
            | 1 0 0 |
            | 0 1 0 |

o13 : R-module, submodule of R
i14 : isFreeDivisor(f)

o14 = true
i15 : isFreeDivisor(D)

o15 = true

but the vector fields in M are not a generating set of the logarithmic vector fields:

i16 : M=matrix {{a,0,0},{0,a,0},{0,0,1}};

              3       3
o16 : Matrix R  <--- R
i17 : isSubset(image M,D)

o17 = true
i18 : isFreeDivisor(M)

o18 = false

False negatives can occur with a set of generators that is not minimal:

i19 : isFreeDivisor((gens D)|M)

o19 = false
i20 : isFreeDivisor(trim image ((gens D)|M))

o20 = true

See also

Ways to use isFreeDivisor :

For the programmer

The object isFreeDivisor is a method function.