-
Notifications
You must be signed in to change notification settings - Fork 1
/
Example5.4_BCY.m2
84 lines (66 loc) · 2.87 KB
/
Example5.4_BCY.m2
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
72
73
74
75
76
77
78
79
80
81
82
83
84
-- Authors: Nida Obatake, Elise Walker
-- Last Updated: Jan 2, 2022
-- This code is supplemental to the paper:
-- "Newton-Okounkov bodies of chemical reaction systems"
--
-- Example 5.4
-- From Example 4.2 in Boros, Craciun, Yu (2019)
-- This computes the birationally invariant self-intersection index for Example 4.2
------------------------------------------------------------------------------------------
restart
needsPackage "SubalgebraBases"
needsPackage "Polyhedra"
needsPackage "Cremona"
needsPackage "PHCpack"
needs "./Procedures.m2"
-- Chemical reaction network in Example 4.2
-------------------------------------------
R = QQ[x, y, s]
p1 = x^2*y^2 + x^2 + y^2 + 1 -5*x*y;
p2 = 1;
p3 = x*y;
p4 = x;
p5 = y;
system = {p1*(p2-p3), p1*(p4-p5)}
-----Computing a Newton-Okounkov Body-----
------------------------------------------
-- Choose a vector space basis such that each polynomial 'system' is in the vector space
-- Here, 's' is a grading variable
basisV = {s*p1*p2, s*p1*p3, s*p1*p4, s*p1*p5}
-- In this case, 'basisV' is a SAGBI basis already, which we verify in the following:
(verifySagbi basisV)#"isSAGBI"
-- Next we compute the Newton-Okounkov body as the convex hull of the semigroup generators
semigroupGenerators = for i in basisV list flatten exponents leadTerm i
semigroupGenerators = for i in semigroupGenerators list drop(i/(last i), -1)
P = convexHull transpose matrix semigroupGenerators
-- The volume of the Newton-Okounkov body P is 1
NObodyVol = volume P
-----Computing the Degree of the Kodaira Map-----
-------------------------------------------------
-- Homogenize polynomials so grading is captured by total degree
dehomBasisV = for i in basisV list sub(i, s=>1_R);
basisVHomToSameDegree = homToSameDegree(dehomBasisV, s)
-- Create Kodaira map
S = QQ[z_1..z_(#dehomBasisV)]
phi = map(R, S, basisVHomToSameDegree)
kodairaDegree = degreeMap phi --returns 1
-----Computing the Index of the Lattice-----
--------------------------------------------
latticeIndex = computeIndexSNF(basisV) -- returns 1
-----Computing the Birationally Invariant Self-Intersection Index-----
----------------------------------------------------------------------
2! * kodairaDegree * NObodyVol / latticeIndex -- biii of 2
-----Computing the Base Locus-----
----------------------------------
complexR = CC[drop(gens R, -1)];
complexBasisV = for i in basisV list sub(sub(i, s=>1_R), complexR);
baseLocus = solveSystem(complexBasisV)
#baseLocus
-----Comparing to Mixed Volume-----
-----------------------------------
-- The mixed volume of a general system pulled from vector space V is:
generalSystem = makeRandomSystem(complexBasisV);
mixedVolume(generalSystem) --returns 18
-- The mixed volume of our original system is:
mixedVolume(for i in system list sub(sub(i, s=>1_R), complexR)) --returns 18
------------------------------------------------------------------------------------------