# isHolonomic -- test whether an algebraic set is holonomic

## Synopsis

• Usage:
b=isHolonomic(I)
b=isHolonomic(f)
• Inputs:
• I, an ideal, defining an algebraic set
• f, , a nonzero function defining a hypersurface
• Outputs:
• b, , whether the algebraic set is holonomic

## Description

Test if $X$, the algebraic set defined by I or f, is holonomic. Let $D$ be the module of logarithmic vector fields for I. Then $X$ is called 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 maximal integral submanifolds of $D$ equal the the canonical Whitney stratification of $X$ (except that the complement of $X$ forms additional integral submanifold(s)).

The algorithm used amounts to computing isFiniteStratification(stratifyByRank(derlog(I))) (see isFiniteStratification, stratifyByRank, derlog). 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. The basic idea, however, is present in (3.13) of Kyoji Saito. Theory of logarithmic differential forms and logarithmic vector fields. J. Fac. Sci. Univ. Tokyo Sect. IA Math., 27: 265-291, 1980''.

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

This hypersurface is not holonomic, since gens(D) has rank 0 on the $1$-dimensional space $a=b=0$:

 i2 : f=a*b*(a-b)*(a-c*b); i3 : D=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 : isHolonomic(f) isFiniteStratification: Component ideal(b,a) has dim 1 but should be of dim <1 to have a finite stratification. o4 = false

This is holonomic; the stratification consists of the origin, and the rest of the surface $ac-b^2=0$:

 i5 : f=a*c-b^2; i6 : D=derlog(ideal (f)) o6 = image | 2b a 0 0 | | c 0 b a | | 0 -c 2c 2b | 3 o6 : R-module, submodule of R i7 : isHolonomic(f) o7 = true i8 : S=stratifyByRank(D); i9 : S#1 o9 = ideal (a, b, c) o9 : Ideal of R i10 : S#2 o10 = ideal (a, b, c) o10 : Ideal of R i11 : S#3 2 o11 = ideal(b - a*c) o11 : Ideal of R

The Whitney Umbrella is also holonomic; the stratification consists of the origin, the rest of the line $a=b=0$, and the rest of the surface:

 i12 : f=a^2-b^2*c; i13 : D=derlog(ideal (f)); i14 : isHolonomic(f) o14 = true i15 : S=stratifyByRank(D); i16 : S#1 o16 = ideal (a, b, c) o16 : Ideal of R i17 : S#2 o17 = ideal (a, b) o17 : Ideal of R i18 : S#3 2 2 o18 = ideal(b c - a ) o18 : Ideal of R

## Caveat

See the warnings in isFiniteStratification.

Also, this usage of holonomic originates with Kyoji Saito and may vary from other meanings of the word, particularly in D-module theory.

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

## Ways to use isHolonomic :

• "isHolonomic(Ideal)"
• "isHolonomic(RingElement)"

## For the programmer

The object isHolonomic is .