next | previous | forward | backward | up | index | toc

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

Synopsis

• Usage:
whitneyStratify(I)
• Inputs:
• I, an ideal, an ideal defining a closed subvariety of affine or projective space over a field.
• Optional inputs:
• Print (missing documentation) => ..., default value false,
• Projective (missing documentation) => ..., default value false,
• Outputs:
• WS, , a hash table indexed by (complex) dimension, with the entry of (complex) dimension $i$ consisting of a list of prime ideals. The strata of $V(I)$ are the connected components of the difference between the variety defined by WS#i and that defined by WS#(i-1).

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 vareity. If this option is omitted the input is treated as an affine cone over the projective vareity.

 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

Ways to use whitneyStratify :

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

For the programmer

The object whitneyStratify is .