# isHHolonomic -- test whether a hypersurface is H-holonomic

## Synopsis

• Usage:
b=isHHolonomic(H)
• Inputs:
• H, , a nonzero function defining a hypersurface
• Outputs:
• b, , whether the hypersurface is H-holonomic

## Description

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 http://dx.doi.org/10.2140/gt.2014.18.911 or http://arxiv.org/abs/1201.1579.

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 | 3 o3 : R-module, submodule of R i4 : derlogH(f) o4 = image | ab a2 | | b2 -3ab+4b2 | | -4bc+4a 4ac-12bc+8a | 3 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

## Caveat

See the warnings in isFiniteStratification.

• isHolonomic -- test whether an algebraic set is holonomic
• isFiniteStratification -- checks if a stratification by integral submanifolds is finite
• derlog -- compute the logarithmic (tangent) vector fields to an ideal
• derlogH -- compute the logarithmic (tangent) vector fields to an ideal
• stratifyByRank -- compute ideals describing where the vector fields have a particular rank
• VectorFields -- a package for manipulating polynomial vector fields

## Ways to use isHHolonomic :

• "isHHolonomic(RingElement)"

## For the programmer

The object isHHolonomic is .