The method topWitnessSet constructs an embedding for the given polynomial system with the given dimension, and then computes generic points on the solution set.
The computation of a witness set for the twisted cubic is illustrated below.
i1 : R = CC[x,y,z]; |
i2 : f = { x^2 - y, x^3 - z }; |
i3 : (w,ns) = topWitnessSet(f,1) o3 = (w, {}) o3 : Sequence |
i4 : dim(w) o4 = 1 |
i5 : degree(w) o5 = 3 |
i6 : toString equations(w) o6 = {x^2-y+(.380139-.924929*ii)*zz1, x^3-z+(-.45571+.890128*ii)*zz1, zz1} |
i7 : toString slice(w) o7 = {(-.205377-.978683*ii)*x+(.943327-.331864*ii)*y+(.673112+.739541*ii)*z +(-.911067-.412259*ii)*zz1-.883724+.468009*ii} |
i8 : toString points(w) o8 = VerticalList{Point{...4...}, Point{...4...}, Point{...4...}} |
A witness set for the twisted cubic consists of the embedded system, a random linear hyperplane to slice the space curve, and three generic points. Observe that the value for the last coordinate of all points equals (or is close to) zero. This last coordinate corresponds to the added slack variable zzk. Solutions with a nonzero value for the slack variable are called nonsolutions. In the example above, the list of nonsolutions returned in ns by topWitnessSet was empty.
Often the solution of the embedded system leads to solutions with nonzero slack variables, as illustrated in the next example.
i9 : R = CC[x,y,z]; f = { (x^2-y)*(x-2), (x^3 - z)*(y-2), (x*y - z)*(z-2) } 3 2 3 3 2 o10 = {x - 2x - x*y + 2y, x y - 2x - y*z + 2z, x*y*z - 2x*y - z + 2z} o10 : List |
i11 : (w,ns) = topWitnessSet(f,1); |
i12 : dim(w) o12 = 1 |
i13 : degree(w) o13 = 3 |
i14 : #ns o14 = 10 |
The example is constructed to contain not only the twisted cubic, but also at least one isolated point (2,2,2). This is reflected in the list of nonsolutions.
The nonsolutions may be used as start solutions in a cascade of homotopies to find generic points on lower dimensional components.
The object topWitnessSet is a method function with options.