-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathexample.m2
168 lines (162 loc) · 6.51 KB
/
example.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
-- example: Koszul complex
restart
needsPackage "BuchsbaumEisenbudMultipliers"
A=QQ[x,y,z]
K=koszul vars A
-- get last multiplier with full rank computation
elapsedTime aMultiplier(1,K,ComputeRanks=>true)
-- remove cache
remove(K.cache,aMultiplier)
-- get last multiplier finding rank with Buchsbaum-Eisenbud
elapsedTime aMultiplier(1,K)
-- other multipliers
aMultiplier(3,K)
aMultiplier(2,K)
-- let's check the first structure theorem
E2=exteriorPower(rank K_2,K_2)
exteriorPower(rank K.dd_2,K.dd_2) == aMultiplier(2,K) * ((dual aMultiplier(3,K))**E2) * exteriorDuality(rank K.dd_2,K_2)
E1=exteriorPower(rank K_1,K_1)
exteriorPower(rank K.dd_1,K.dd_1) == aMultiplier(1,K) * ((dual aMultiplier(2,K))**E1) * exteriorDuality(rank K.dd_1,K_1)
-- let's compute all lower order multipliers
aMultiplier(0,1,K)
cMultiplier(0,1,K)
aMultiplier(0,2,K)
cMultiplier(0,2,K)
aMultiplier(0,3,K)
cMultiplier(0,3,K)
aMultiplier(1,3,K)
cMultiplier(1,3,K)
-- let's check the second structure theorem
j=0,k=1
E=exteriorPower(rank K_(k-1),K_(k-1))
exteriorPower(rank(k-1,K)-j,K.dd_(k-1)) == cMultiplier(j,k,K) * ((dual aMultiplier(j,k,K))**E) * exteriorDuality(rank(k-1,K)-j,K_(k-1))
j=0,k=2
E=exteriorPower(rank K_(k-1),K_(k-1))
exteriorPower(rank(k-1,K)-j,K.dd_(k-1)) == cMultiplier(j,k,K) * ((dual aMultiplier(j,k,K))**E) * exteriorDuality(rank(k-1,K)-j,K_(k-1))
j=0,k=3
E=exteriorPower(rank K_(k-1),K_(k-1))
exteriorPower(rank(k-1,K)-j,K.dd_(k-1)) == cMultiplier(j,k,K) * ((dual aMultiplier(j,k,K))**E) * exteriorDuality(rank(k-1,K)-j,K_(k-1))
j=1,k=3
E=exteriorPower(rank K_(k-1),K_(k-1))
exteriorPower(rank(k-1,K)-j,K.dd_(k-1)) == cMultiplier(j,k,K) * ((dual aMultiplier(j,k,K))**E) * exteriorDuality(rank(k-1,K)-j,K_(k-1))
-- example: Eagon-Northcott of 2x4 matrix
restart
needsPackage "BuchsbaumEisenbudMultipliers"
A=QQ[x_(1,1)..x_(2,4)]
G=transpose genericMatrix(A,4,2)
I=minors(2,G)
RI=res I
-- get last multiplier with full rank computation
elapsedTime aMultiplier(1,RI,ComputeRanks=>true)
-- remove cache
remove(RI.cache,aMultiplier)
-- get last multiplier finding rank with Buchsbaum-Eisenbud
elapsedTime aMultiplier(1,RI)
-- other multipliers
aMultiplier(3,RI)
aMultiplier(2,RI)
-- let's check the structure theorem
E2=exteriorPower(rank RI_2,RI_2)
exteriorPower(rank RI.dd_2,RI.dd_2) == aMultiplier(2,RI) * ((dual aMultiplier(3,RI))**E2) * exteriorDuality(rank RI.dd_2,RI_2)
E1=exteriorPower(rank RI_1,RI_1)
exteriorPower(rank RI.dd_1,RI.dd_1) == aMultiplier(1,RI) * ((dual aMultiplier(2,RI))**E1) * exteriorDuality(rank RI.dd_1,RI_1)
-- let's compute all lower order multipliers
aMultiplier(0,1,RI)
cMultiplier(0,1,RI)
aMultiplier(0,2,RI)
cMultiplier(0,2,RI)
aMultiplier(0,3,RI)
cMultiplier(0,3,RI)
aMultiplier(1,3,RI)
cMultiplier(1,3,RI)
-- let's check the second structure theorem
j=0,k=1
E=exteriorPower(rank RI_(k-1),RI_(k-1))
exteriorPower(rank(k-1,RI)-j,RI.dd_(k-1)) == cMultiplier(j,k,RI) * ((dual aMultiplier(j,k,RI))**E) * exteriorDuality(rank(k-1,RI)-j,RI_(k-1))
j=0,k=2
E=exteriorPower(rank RI_(k-1),RI_(k-1))
exteriorPower(rank(k-1,RI)-j,RI.dd_(k-1)) == cMultiplier(j,k,RI) * ((dual aMultiplier(j,k,RI))**E) * exteriorDuality(rank(k-1,RI)-j,RI_(k-1))
j=0,k=3
E=exteriorPower(rank RI_(k-1),RI_(k-1))
exteriorPower(rank(k-1,RI)-j,RI.dd_(k-1)) == cMultiplier(j,k,RI) * ((dual aMultiplier(j,k,RI))**E) * exteriorDuality(rank(k-1,RI)-j,RI_(k-1))
j=1,k=3
E=exteriorPower(rank RI_(k-1),RI_(k-1))
exteriorPower(rank(k-1,RI)-j,RI.dd_(k-1)) == cMultiplier(j,k,RI) * ((dual aMultiplier(j,k,RI))**E) * exteriorDuality(rank(k-1,RI)-j,RI_(k-1))
-- example: all squarefree monomials of degree 2
restart
needsPackage "BuchsbaumEisenbudMultipliers"
A=QQ[x_1..x_4]
I=ideal(subsets(gens A,2)/product)
RI=res I
-- get last multiplier with full rank computation
elapsedTime aMultiplier(1,RI,ComputeRanks=>true)
-- remove cache
remove(RI.cache,aMultiplier)
-- get last multiplier finding rank with Buchsbaum-Eisenbud
elapsedTime aMultiplier(1,RI)
-- other multipliers
aMultiplier(3,RI)
aMultiplier(2,RI)
-- let's check the structure theorem
E2=exteriorPower(rank RI_2,RI_2)
exteriorPower(rank RI.dd_2,RI.dd_2) == aMultiplier(2,RI) * ((dual aMultiplier(3,RI))**E2) * exteriorDuality(rank RI.dd_2,RI_2)
E1=exteriorPower(rank RI_1,RI_1)
exteriorPower(rank RI.dd_1,RI.dd_1) == aMultiplier(1,RI) * ((dual aMultiplier(2,RI))**E1) * exteriorDuality(rank RI.dd_1,RI_1)
-- example: B-E's resolution of 6x6 pfaffians of 7x7 skew matrix
restart
needsPackage "BuchsbaumEisenbudMultipliers"
A=QQ[x_(1,2)..x_(1,7),x_(2,3)..x_(2,7),x_(3,4)..x_(3,7),
x_(4,5)..x_(4,7),x_(5,6)..x_(5,7),x_(6,7)]
G=genericSkewMatrix(A,7)
I=pfaffians(6,G);
RI=res I
-- get last multiplier with full rank computation
elapsedTime aMultiplier(1,RI,ComputeRanks=>true)
-- remove cache
remove(RI.cache,aMultiplier)
-- get last multiplier finding rank with Buchsbaum-Eisenbud
elapsedTime aMultiplier(1,RI)
-- other multipliers
aMultiplier(3,RI)
aMultiplier(2,RI)
-- let's check the structure theorem
E2=exteriorPower(rank RI_2,RI_2)
exteriorPower(rank RI.dd_2,RI.dd_2) == aMultiplier(2,RI) * ((dual aMultiplier(3,RI))**E2) * exteriorDuality(rank RI.dd_2,RI_2)
E1=exteriorPower(rank RI_1,RI_1)
exteriorPower(rank RI.dd_1,RI.dd_1) == aMultiplier(1,RI) * ((dual aMultiplier(2,RI))**E1) * exteriorDuality(rank RI.dd_1,RI_1)
-- let's compute all lower order multipliers
aMultiplier(0,1,RI)
cMultiplier(0,1,RI)
aMultiplier(0,2,RI)
cMultiplier(0,2,RI)
aMultiplier(0,3,RI)
cMultiplier(0,3,RI)
aMultiplier(1,3,RI)
cMultiplier(1,3,RI)
-- let's check the second structure theorem
j=0,k=1
E=exteriorPower(rank RI_(k-1),RI_(k-1))
exteriorPower(rank(k-1,RI)-j,RI.dd_(k-1)) == cMultiplier(j,k,RI) * ((dual aMultiplier(j,k,RI))**E) * exteriorDuality(rank(k-1,RI)-j,RI_(k-1))
j=0,k=2
E=exteriorPower(rank RI_(k-1),RI_(k-1))
exteriorPower(rank(k-1,RI)-j,RI.dd_(k-1)) == cMultiplier(j,k,RI) * ((dual aMultiplier(j,k,RI))**E) * exteriorDuality(rank(k-1,RI)-j,RI_(k-1))
j=0,k=3
E=exteriorPower(rank RI_(k-1),RI_(k-1))
exteriorPower(rank(k-1,RI)-j,RI.dd_(k-1)) == cMultiplier(j,k,RI) * ((dual aMultiplier(j,k,RI))**E) * exteriorDuality(rank(k-1,RI)-j,RI_(k-1))
j=1,k=3
E=exteriorPower(rank RI_(k-1),RI_(k-1))
exteriorPower(rank(k-1,RI)-j,RI.dd_(k-1)) == cMultiplier(j,k,RI) * ((dual aMultiplier(j,k,RI))**E) * exteriorDuality(rank(k-1,RI)-j,RI_(k-1))
-- example: bigger Koszul complex
restart
needsPackage "BuchsbaumEisenbudMultipliers"
A=QQ[x_1..x_4]
K=koszul vars A
-- compute multipliers, returns a list
a=bem(K)
-- can also see individual ones
bem(2,K)
-- let's check the structure theorem
exteriorPower(rank K.dd_2,K.dd_2) ==
bem(2,K) * dualMultiplier(3,K)
exteriorPower(rank K.dd_1,K.dd_1) ==
bem(1,K) * dualMultiplier(2,K)