Annotation of OpenXM/src/kan96xx/Doc/gkz.sm1, Revision 1.3
1.2 takayama 1: %% gkz.sm1, 1998, 11/6, 11/8, 2007-06-03
2: /gkz.version (3.000000) def
1.1 maekawa 3: gkz.version [(Version)] system_variable gt
4: { (This package requires the latest version of kan/sm1) message
5: (Please get it from http://www.math.kobe-u.ac.jp/KAN) message
6: error
7: } { } ifelse
8:
1.2 takayama 9: $gkz.sm1 generates gkz, mgkz systems (C) N.Takayama, 1998-2007, cf. rrank in hol.sm1 $ message-quiet
1.1 maekawa 10: /gkz.verbose 0 def
11: /gkz.A [[1 1 1 1] [0 1 2 3]] def
12: /gkz.b [3 5] def
13:
14:
15: /gkz {
16: /arg1 set
17: [/in-gkz /aa /typev /setarg /A /b /vx /vy /vyi /w /n /k
18: /vvv /www /At /i /ff /ttt /vxd /ttt2 /ttt /i /vxrule
19: ] pushVariables
20: [(CurrentRingp) (KanGBmessage)] pushEnv %% push current global environment.
21: [
22: /aa arg1 def
23: aa isArray { } { (array gkz) message (gkz) usage error } ifelse
24: /setarg 0 def
25: aa { tag } map /typev set
26: typev [ ArrayP ArrayP ] eq
27: { /A aa 0 get def
28: /b aa 1 get def
29: /setarg 1 def
30: } { } ifelse
31: typev [ ] eq
32: {
33: /A gkz.A def
34: /b gkz.b def
35: /setarg 1 def
36: } { } ifelse
37: typev [ ArrayP ] eq
38: { /A aa 0 get def
39: /b [ 1 1 A length { pop 0 } for ] def
40: /setarg 1 def
41: } { } ifelse
42: setarg { } { (Argument mismatch) message error } ifelse
43:
44: [(KanGBmessage) gkz.verbose] system_variable
45: b length /k set
46: A 0 get length /n set
47:
48: %% vy = [ (y1) (y2)] , vyi = [(yi1) (yi2)], vx = [(x1) (x2) (x3) (x4)]
49: [ 1 1 k { } for ] { (y) 2 1 roll gensym } map /vy set
50: [ 1 1 k { } for ] { (yi) 2 1 roll gensym } map /vyi set
51: [ 1 1 n { } for ] { (x) 2 1 roll gensym } map /vx set
52:
53: %% vvv = [(y1) (y2) (yi1) (yi2) (x1) (x2) (x3) (x4)]
54: /vvv vy vyi join vx join def
55: %% www = [(y1) 1 (y2) 1 (yi1) 1 (yi2) 1]
56: /www vy vyi join { 1 } map def
57: [ vvv from_records ring_of_polynomials
58: [www] weight_vector 0] define_ring
59:
60: /At A transpose def
61: %% ff = [ x1 - y1 , x2 - y1 y2, x3 - y1 y2^2 , x4 - y1 y2^3 ]
62: [
63: 1 1 n {
64: /i set
65: (x) i gensym . vy vyi << At i 1 sub get >> gkz.prod sub
66: } for
67: 1 1 k {
68: /i set
69: (1). (y) i gensym . (yi) i gensym . mul sub %% 1- y_i yi_i
70: } for
71: ] /ff set
72: gkz.verbose { ff message } { } ifelse
73: [ff] groebner_sugar 0 get
74: vy vyi join eliminatev /ttt set
75: ttt { toString } map /ttt set
76: %%% ttt <== toric ideal
77:
78: [ vx from_records ring_of_differential_operators 0] define_ring
79: %%D-clean /vvv [ 1 1 n { /i set [(x) i gensym . (Dx) i gensym . mul] } for ] def
80: /vvv [ 1 1 n { /i set [(x) i gensym . [@@@.Dsymbol (x)] cat i gensym . mul] } for ] def
81: A { {(universalNumber) dc} map } map vvv mul transpose 0 get /ff set
82:
83: ff b {(universalNumber) dc} map sub {toString} map /ff set
84: %%% ff <== linear equations.
85:
86: %%% vxd = [(Dx1) ... (Dx4)]
87: /vxd vx {@@@.Dsymbol 2 1 roll 2 cat_n} map def
88: %% fix 1999, 3/3 for non-homogeneous toric ideal.
89: /vxrule [ 0 1 vx length 1 sub {
90: /i set
91: [vx i get . vxd i get .] } for
92: ] def
93: %% ttt { . vx vxd join laplace0 toString } map /ttt2 set
94: ttt { . vxrule replace toString } map /ttt2 set
95:
96: /arg1 [ << ff ttt2 join >> vx ] def
97: ] pop
98: popEnv
99: popVariables
100: arg1
101: } def
102:
103:
104: %% \prod y_j^{v_j}
105: %% [(y1) (y2)] [(yi1) (yi2)] [ 1 3] gkz.prod ==> y1 y2^3
106: /gkz.prod {
107: /arg3 set
108: /arg2 set
109: /arg1 set
110: [/in-gkz.prod /yy /yyi /vec /ans /i /mm] pushVariables
111: [
112: /yy arg1 def
113: /yyi arg2 def
114: /vec arg3 def
115: /ans (1). def
116: 0 1 << vec length 1 sub >> {
117: /i set
118: << vec i get >> 0 lt {
119: /mm yyi i get . << 0 vec i get sub >> npower def
120: }
121: { /mm yy i get . << vec i get >> npower def }
122: ifelse
123: /ans ans mm mul def
124: } for
125: /arg1 ans def
126: ] pop
127: popVariables
128: arg1
129: } def
130: (gkz ) messagen-quiet
131:
132: [(gkz)
133: [([ A b] gkz [eq v])
134: ([ A ] gkz [eq v])
135: ([ ] gkz [eq v])
136: (array of array of integer A; array of integer b;)
137: (eq is the GKZ system defined by the matrix A and the parameter b.)
138: (v is the list of variables.)
139: (Default values of A and b are in gkz.A and gkz.b)
140: (For details, see Functional analysis and its applications, 23, 1989, 94--106.)
141: ( Grobner deformations of hypergeometric differential equations, Springer, 1999)
142: (Example 1: [ [[1 1 1 1] [0 1 3 4]] [1 2]] gkz rrank :: )
143: (Example 2: [ [[1 1 1 1] [0 1 3 4]] [0 0]] gkz rrank :: )
144: ]
145: ] putUsages
146:
1.2 takayama 147:
148: /mgkz.A [[1 1 1 1] [0 1 2 3]] def
149: /mgkz.w [4 0 0 2] def
150: /mgkz.b [3 5] def
151:
152:
153: /mgkz {
154: /arg1 set
155: [/in-mgkz /aa /typev /setarg /A /b /vx /vy /vyi /w /n /k
156: /vvv /www /At /i /ff /ttt /vxd /ttt2 /ttt /i /vxrule
157: /w /mrulex /mruled
158: ] pushVariables
159: [(CurrentRingp) (KanGBmessage)] pushEnv %% push current global environment.
160: [
161: /aa arg1 def
162: aa isArray { } { (array mgkz) message (mgkz) usage error } ifelse
163: /setarg 0 def
164: aa { tag } map /typev set
165: typev [ ArrayP ArrayP ArrayP] eq
166: { /A aa 0 get def
167: /w aa 1 get def
168: /b aa 2 get def
169: /setarg 1 def
170: } { } ifelse
171: typev [ ] eq
172: {
173: /A mgkz.A def
174: /w mgkz.w def
175: /b mgkz.b def
176: /setarg 1 def
177: } { } ifelse
178: setarg { } { (Argument mismatch) message error } ifelse
179:
180: b [0] join /b set
181: [(KanGBmessage) gkz.verbose] system_variable
182: b length /k set
183: A w append /A set
184: A transpose , [ 2 1 k { pop 0 } for 1] append /A set
185: A transpose /A set
186: A 0 get length /n set
187:
188: %% vy = [ (y1) (y2) (y3)] , vyi = [(yi1) (yi2) (yi3)],
189: %% vx = [(x1) (x2) (x3) (x4) (x5)]
190: [ 1 1 k { } for ] { (y) 2 1 roll gensym } map /vy set
191: [ 1 1 k { } for ] { (yi) 2 1 roll gensym } map /vyi set
192: [ 1 1 n { } for ] { (x) 2 1 roll gensym } map /vx set
193:
194: %% vvv = [(y1) (y2) (y3) (yi1) (yi2) (yi3) (x1) (x2) (x3) (x4) (x5)]
195: /vvv vy vyi join vx join def
196: %% www = [(y1) 1 (y2) 1 (y3) 1 (yi1) 1 (yi2) 1 (yi3) 1]
197: /www vy vyi join { 1 } map def
198: [ vvv from_records ring_of_polynomials
199: [www] weight_vector 0] define_ring
200:
201: /At A transpose def
202: %% Apply an algorithm to get the toric ideal.
203: %% Negative components are accepted. yi1=y1^(-1), ...
204: [
205: 1 1 n {
206: /i set
207: (x) i gensym . vy vyi << At i 1 sub get >> gkz.prod sub
208: } for
209: 1 1 k {
210: /i set
211: (1). (y) i gensym . (yi) i gensym . mul sub %% 1- y_i yi_i
212: } for
213: ] /ff set
214: gkz.verbose { ff message } { } ifelse
215: [ff] groebner_sugar 0 get
216: vy vyi join eliminatev /ttt set
217: ttt { toString } map /ttt set
218: %%% ttt <== toric ideal
219:
220: [ vx from_records ring_of_differential_operators 0] define_ring
221: %%D-clean /vvv [ 1 1 n { /i set [(x) i gensym . (Dx) i gensym . mul] } for ] def
222: /vvv [ 1 1 n { /i set [(x) i gensym . [@@@.Dsymbol (x)] cat i gensym . mul] } for ] def
223: A { {(universalNumber) dc} map } map vvv mul transpose 0 get /ff set
224:
225: ff b {(universalNumber) dc} map sub /ff set
226:
227: /mrulex vx , n 1 sub , get . /mrulex set
228: [[mrulex , (0). mrulex sub]] /mrulex set
229: %%% [[(x5). (-x5).]] mrulex
230: ff {mrulex replace} map {toString} map /ff set
231: %%% ff <== linear equations.
232:
233: %%% vxd = [(Dx1) ... (Dx4) (Dx5)]
234: /vxd vx {@@@.Dsymbol 2 1 roll 2 cat_n} map def
235:
236: [[vxd , n 1 sub , get .
237: vx , n 1 sub , get .]] /mruled set
238:
239: %% fix 1999, 3/3 for non-homogeneous toric ideal.
240: /vxrule [ 0 1 vx length 1 sub {
241: /i set
242: [vx i get . vxd i get .] } for
243: ] def
244: %% ttt { . vx vxd join laplace0 toString } map /ttt2 set
245: ttt { . vxrule replace , mruled replace , toString } map /ttt2 set
246:
247: /arg1 [ << ff ttt2 join >> vx ] def
248: ] pop
249: popEnv
250: popVariables
251: arg1
252: } def
253:
254: [(mgkz)
255: [([A w b] gkz [eq v])
256: ([ ] gkz [eq v])
257: (array of array of integer A; array of integer w, b;)
258: (eq is the modified GKZ system defined by the matrix A, weight w, )
259: (and the parameter b.)
260: (v is the list of variables. The last variable is the deformation variable.)
261: (Default values of A and b are in gkz.A and gkz.b)
1.3 ! takayama 262: (For details, see the paper Modified A-hypergeometric system, N.Takayama)
! 263: (http://arxiv.org/abs/0707.0043)
1.2 takayama 264: (Example : [ [[1 2 3]] [1 2 1] [0]] mgkz rank :: )
265: (Example : [ [[1 2 3]] [0]] gkz rank :: )
266: (Example : [ [[1 1 1] [1 2 3]] [1 2 1] [1 0]] mgkz message )
267: ]
268: ] putUsages
269:
270:
1.1 maekawa 271: ( ) message-quiet ;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>