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

whitneyStratifyPol -- Computes a Whitney stratification of the real and complex varieties.

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).

This function uses an algorithm based on the computation of polar varieties and is probabilisitic (unlike the conormal based whitneyStratify which is deterministic).

There are several options which can be used to change how the polar varieties are computed and which may be faster on some examples.

We demonstrate the method for the Whitney umbrella below. Note that the polar variety method always generates unnecessary strata (which are random) and need not be present in a minimal Whitney stratification.

i1 : R=QQ[x..z]

o1 = R

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

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

o2 : Ideal of R
i3 : WS1=whitneyStratifyPol I

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

o3 : MutableHashTable
i4 : peek WS1

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

Note that since the "extra" strata are random we can generate the minimal stratification by taking the common strata closures which appear in two different calculations (with high probability). We do this as follows:

i5 : WS2=whitneyStratifyPol I

o5 = MutableHashTable{...3...}

o5 : MutableHashTable
i6 : peek WS2

o6 = MutableHashTable{0 => {ideal (z, y, x), ideal (69602258z - 116427849, y, x), ideal (69602258z + 116427849, y, x)}}
                      1 => {ideal (y, x)}
                                   2 2    3    2
                      2 => {ideal(x z  - x  - y )}
i7 : WS=new MutableHashTable from for k in keys WS1 list k=>toList((set(WS1)#k)*(set(WS2)#k))

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

o7 : MutableHashTable
i8 : peek WS

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

There are also several different options to preform the underlying polar variety calculations. The default algorithm uses the M2 saturate command to compute the polar variteies, this option is Algorithm=>. The other options are: Algorithm=>"msolve" and Algorithm=>"M2F4". The Algorithm=>"msolve" only works in versions 1.25.06 and above of Macualay2. The Algorithm=>"M2F4" is mostly beneficial when working over a finite field. Note that over a finite field we can still sometimes obtain useful information about the stratification, but the coefficients appearing in the resulting polynomials may (or likely will) be incorrect.

i9 : WS3=whitneyStratifyPol(I,Algorithm=>"msolve")

o9 = MutableHashTable{...3...}

o9 : MutableHashTable
i10 : peek WS3

o10 = MutableHashTable{0 => {ideal (z, y, x), ideal (8715011z - 19247903, y, x), ideal (8715011z + 19247903, y, x)}}
                       1 => {ideal (y, x)}
                                    2 2    3    2
                       2 => {ideal(x z  - x  - y )}
i11 : R=ZZ/32749[x..z]

o11 = R

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

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

o12 : Ideal of R
i13 : WS3=whitneyStratifyPol(I,Algorithm=>"M2F4")

o13 = MutableHashTable{...3...}

o13 : MutableHashTable

On harder examples the whitneyStratifyPol can be much faster than other methods. The following example, while taking some seconds below, takes many minutes or hours with other methods. In the example below the output is in fact the minimal Whitney stratification (though more often the output Whitney stratification returned by whitneyStratifyPol is not minimal).

i14 : R=QQ[x..z,t]

o14 = R

o14 : PolynomialRing
i15 : I=ideal(z^3+t*y^3*z+y^4*x+x^9)

             9      4    3       3
o15 = ideal(x  + x*y  + y z*t + z )

o15 : Ideal of R
i16 : elapsedTime W=whitneyStratifyPol(I,Algorithm=>"msolve")
 -- 15.8589s elapsed

o16 = MutableHashTable{...4...}

o16 : MutableHashTable
i17 : peek W

o17 = MutableHashTable{1 => {ideal (z, y, x)}                                    }
                       2 => {}
                                                                     12
                       0 => {ideal (t, z, y, x), ideal (z, y, x, 729t   + 65536)}
                                    9      4    3       3
                       3 => {ideal(x  + x*y  + y z*t + z )}

Ways to use whitneyStratifyPol:

  • whitneyStratifyPol(Ideal)

For the programmer

The object whitneyStratifyPol is a method function with options.


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