Macaulay2 » Documentation
Packages » VectorFields :: isHHolonomic
next | previous | forward | backward | up | index | toc

isHHolonomic -- test whether a hypersurface is H-holonomic



Test if $X$, the algebraic set defined by H, is H-holonomic. Let $D$ be the module of vector fields annihilating $H$ (see derlogH), a submodule of the module of logarithmic vector fields for $H$. Then $X$ is called H-holonomic if at any point $p$ in $X$, the generators of $D$ evaluated at $p$ span the tangent space of the stratum containing $p$ of the canonical Whitney stratification of $X$; equivalently, the collection of maximal integral submanifolds of $D$ that are contained in $X$ will equal the canonical Whitney stratification of $X$. The ``H'' in H-holonomic refers to the name of the function.

The algorithm used essentially checks the dimensions of the components of the sets given by stratifyByRank(derlog(ideal (H))) (see isHolonomic and isFiniteStratification) and then compares these sets with those given by stratifyByRank(derlogH(H)). Details may be found in section 4.3 of ``James Damon and Brian Pike. Solvable groups, free divisors and nonisolated matrix singularities II: Vanishing topology. Geom. Topol., 18(2):911-962, 2014'', available at or

To display progress reports, set debugLevel>0.

i1 : R=QQ[a,b,c];

This hypersurface is not even holonomic, as the logarithmic vector fields have rank 0 on $a=b=0$:

i2 : f=a*b*(a-b)*(a-c*b);
i3 : derlog(ideal (f))

o3 = image | a 0    0     |
           | b 0    ab-b2 |
           | 0 bc-a -ac+a |

o3 : R-module, submodule of R
i4 : derlogH(f)

o4 = image | ab      a2          |
           | b2      -3ab+4b2    |
           | -4bc+4a 4ac-12bc+8a |

o4 : R-module, submodule of R
i5 : isHHolonomic(f)
isFiniteStratification: Component ideal(b,a) has dim 1 but should be of dim <1 to have a finite stratification.

o5 = false
i6 : isHolonomic(f)
isFiniteStratification: Component ideal(b,a) has dim 1 but should be of dim <1 to have a finite stratification.

o6 = false

This hypersurface is H-Holonomic, although the generators of D are linearly dependent everywhere:

i7 : f=a*c-b^2;
i8 : D=gens derlogH(f)

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

             3      3
o8 : Matrix R  <-- R
i9 : det(D)

o9 = 0

o9 : R
i10 : isHHolonomic(f)

o10 = true
i11 : S=stratifyByRank(D)

o11 = StratificationByRank{1 => ideal (a, b, c)}
                           2 => ideal (a, b, c)
                           3 => ideal ()

o11 : StratificationByRank
i12 : S#1

o12 = ideal (a, b, c)

o12 : Ideal of R
i13 : S#2

o13 = ideal (a, b, c)

o13 : Ideal of R
i14 : S#3

o14 = ideal ()

o14 : Ideal of R

The Whitney Umbrella is also H-Holonomic:

i15 : f=a^2-b^2*c;
i16 : isHHolonomic(f)

o16 = true


See the warnings in isFiniteStratification.

See also

Ways to use isHHolonomic :

For the programmer

The object isHHolonomic is a method function.