Macaulay2 » Documentation
Packages » WhitneyStratifications :: whitneyStratify
next | previous | forward | backward | up | index | toc

whitneyStratify -- Computes a Whitney stratification of the real and complex varieties using conormal methods.

Description

For a variety $X$ this command computes a Whitney stratification WS where WS#i is a list of strata closures in (complex) dimension $i$; for a prime ideal $P$ in WS#i the associated open (connected) strata is given by the connected components of $V(P)-Z$ where $Z$ is the union of the varieties defined by the entries of WS#(i-1). We demonstrate the method for the Whitney umbrella below.

i1 : R=QQ[x..z]

o1 = R

o1 : PolynomialRing
i2 : I=ideal(y^2*z-x^2)

            2     2
o2 = ideal(y z - x )

o2 : Ideal of R
i3 : WS=whitneyStratify I

o3 = MutableHashTable{...3...}

o3 : MutableHashTable
i4 : peek WS

o4 = MutableHashTable{0 => {ideal (z, y, x)}}
                      1 => {ideal (y, x)}
                                   2     2
                      2 => {ideal(y z - x )}

Now the projective version; using the option Projective=>true will treat the input as a projective variety. If this option is omitted the input is treated as an affine cone over the projective variety.

i5 : S=QQ[x..z,w]

o5 = S

o5 : PolynomialRing
i6 : I=ideal(y^2*z-x^2*w)

            2     2
o6 = ideal(y z - x w)

o6 : Ideal of S
i7 : WS=whitneyStratify(I,Projective=>true)

o7 = MutableHashTable{...3...}

o7 : MutableHashTable
i8 : peek WS

o8 = MutableHashTable{0 => {ideal (z, y, x), ideal (w, y, x)}}
                      1 => {ideal (y, x)}
                                   2     2
                      2 => {ideal(y z - x w)}

Another projective example.

i9 : R=QQ[a_0..a_4]

o9 = R

o9 : PolynomialRing
i10 : I=ideal(a_0^2*a_4-a_1*a_2^2+a_3^3-a_3*a_0^2-a_4^2*a_3)

                 2    2      3    2        2
o10 = ideal(- a a  - a a  + a  + a a  - a a )
               1 2    0 3    3    0 4    3 4

o10 : Ideal of R
i11 : V=whitneyStratify(I,Projective=>true)

o11 = MutableHashTable{...4...}

o11 : MutableHashTable
i12 : peek V

o12 = MutableHashTable{2 => {}                                                         }
                                                      2     2
                       0 => {ideal (a  - a , a , a , a  - 2a ), ideal (a , a , a , a )}
                                     3    4   2   1   0     4           4   3   2   0
                                                  2     2
                       1 => {ideal (a  - a , a , a  - 2a )}
                                     3    4   2   0     4
                                      2    2      3    2        2
                       3 => {ideal(a a  + a a  - a  - a a  + a a )}
                                    1 2    0 3    3    0 4    3 4

Note that as with the Whitney umbrella simply taking successive singular loci will not yield the correct stratification, in particular one would miss the two points defined by the second entry of V#0.

i13 : J=radical (I+minors(codim I, jacobian I))

                           2     2
o13 = ideal (a  - a , a , a  - 2a )
              3    4   2   0     4

o13 : Ideal of R
i14 : J2=radical (J+minors(codim J, jacobian J))

o14 = ideal (a , a , a , a )
              4   3   2   0

o14 : Ideal of R

By default whitneyStratify will use the algorithm of [1] (Martin Helmer and Vidit Nanda. "Conormal Spaces and Whitney Stratifications", Foundations of Computational Mathematics, DOI: 10.1007/s10208-022-09574-8), which as a step requires the computation of the associated primes of a certain ideal arising from a conormal variety. This can in practice be very costly. The algorithm of [4] (Martin Helmer and Rafael Mohr. A New Algorithm for Whitney Stratification of Varieties . Arxiv: 2406.1712) also uses conormal varieties but avoids the need to compute associated primes. This algorithm is often much faster (though it is slightly more likely to produce non-minimal Whitney stratifications, it is accessed with the option AssocPrimes=>false. Both algorithms are deterministic and are guaranteed to produce a correct Whitney stratification (though not necessarily the unique minimal one).

i15 : R=QQ[x..z]

o15 = R

o15 : PolynomialRing
i16 : I=ideal(y^2+x^3-x^2*z^2)

               2 2    3    2
o16 = ideal(- x z  + x  + y )

o16 : Ideal of R
i17 : WS=whitneyStratify(I,AssocPrimes=>false)

o17 = MutableHashTable{...3...}

o17 : MutableHashTable
i18 : peek WS

o18 = MutableHashTable{0 => {ideal (z, y, x)}      }
                       1 => {ideal (y, x)}
                                    2 2    3    2
                       2 => {ideal(x z  - x  - y )}

Ways to use whitneyStratify:

  • whitneyStratify(Ideal)
  • whitneyStratify(Ideal,ZZ) (missing documentation)
  • whitneyStratify(Ideal,ZZ,ZZ) (missing documentation)

For the programmer

The object whitneyStratify is a method function with options.


The source of this document is in WhitneyStratifications.m2:1665:0.