File: WSet-deflation.m2

package info (click to toggle)
macaulay2 1.24.11%2Bds-5
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 171,648 kB
  • sloc: cpp: 107,850; ansic: 16,307; javascript: 4,188; makefile: 3,947; lisp: 682; yacc: 604; sh: 476; xml: 177; perl: 114; lex: 65; python: 33
file content (71 lines) | stat: -rw-r--r-- 2,251 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71



-*
deflate(WSet, AbstractPoint) := o -> (W,P) -> deflate(W,jacobianRank(polySystem W,P),{P},o)
deflate(WSet, ZZ) := o -> (W,r) -> deflate(W,r,points W,o)
deflate(WSet, ZZ, List) := o -> (W,r,pts) -> (
    F := polySystem W;
    F0 := deflate(F,r);
    pts0 := apply(pts, P->liftPointToDeflation(P,F,r));
    S0 := liftSliceToDeflation(slicingVariety W,F,r);
    W0 := witnessSet(F0,S0,pts0);
    M := coordinateProjection(ambient F, ambient F0);
    proxyWSet(W0,M,slicingVariety W)
    )
deflate(ProxyWSet, ZZ) := o -> (W,r) -> deflate(polySystem W,r,o)
deflate(ProxyWSet, AbstractPoint) := o -> (W,P) -> (
    D := deflate(proxyWSet W,P,o);
    proxyWSet(upWSet D,compose(map W, map D),slicingVariety W)
    )
*-

--deflationSequence = method()
--deflationSequence (WSet,P) 

jacobianRank = method()
jacobianRank(PolySystem, AbstractPoint) := (F,P) -> (
    J := evaluate(jacobian F, P);
    numericalRank J
    )

deflatedWSet = method()
-- IN: 
-- F, Ideal 
-- S, Ideal defining a slice
-- m, local dimension of V(F) at pts
-- pts, witness points
-- OUT:
-- List of ProxyWitnessSet's 
deflatedWSet(Ideal,Ideal,ZZ,List) := (F,S,m,pts) -> (
    P := partitionViaDeflationSequence(pts,polySystem(F_*|S_*));
    -- TO DO: make the above robust... precondition, refine when lifting, ???
    --        Is there a way to detect an incorrectly computed numerical rank?
    for wpts in P list (
	F0 := (first wpts).cache.LiftedSystem;
	wpts0 := apply(wpts, p->p.cache.LiftedPoint);
	W0 := witnessSet(ideal F0,S,wpts0);
	A := affineSpace ring F;
	--M := coordinateProjection(ambient F, ambient F0);
	M := rationalMap matrix{take(gens ring F0, numgens ring F)}; 
	S0 := slicingVariety(A, rationalMap transpose gens S);
	proxyWSet(W0,M,S0)
	-- TO DO: create a ProxyWSet using wpts and the end-of-the-chain LiftedSystem in th chain of deflations
	-- (this chain should be the same for all wpts) 
	)
    )

TEST ///
debug needsPackage "NumericalAlgebraicGeometry"
CC[x_0..x_3]
A = matrix{{x_0,x_1,x_2},{x_1,x_2,x_3},{x_2,x_3,0}}
I = minors(2,A_{0,1}^{0,1}) + det A
Icubic = minors(2,A_{0,1})
cubic = witnessSet(Icubic,2)
peek cubic
errorDepth = 0
W = first deflatedWSet(I, ideal slice cubic, 2, points cubic)  
peek W
W' = W#"upstairs WSet"
equations W'
///