Annotation of OpenXM/src/kan96xx/Doc/r-interface.sm1.org, Revision 1.1.1.1
1.1 maekawa 1: %% oaku/Restriction/r-interface.sm1 1998, 4/30. 5/8. 5/12, 11/14
2: %% lib/r-interface.sm1
3: %%
4: %% r-interface.sm1 is kept in this directory for the compatibility to
5: %% old demo programs and packages. It is being merged to
6: %% resol0.sm1 cf. tower.sm1, tower-sugar.sm1, restall_s.sm1,
7: %% restall.sm1
8: %%
9: /r-interface.version (2.981105) def
10: /r-interface.verbose 0 def
11: /deRham.verbose 0 def
12: %% /BFnotruncate 1 def Controlled from cohom.sm1
13:
14: r-interface.version [(Version)] system_variable gt
15: { (This package requires the latest version of kan/sm1) message
16: (Please get it from http://www.math.kobe-u.ac.jp/KAN) message
17: error
18: } { } ifelse
19:
20: [(restriction)
21: [
22: ( [[f1 f2 ...] [t1 t2 ...] [vars params] [k0 k1 limitdeg ]] restriction )
23: ( [ 0-th cohomology group, (-1)-th cohomology group, .... ] )
24: ( )
25: ( [[f1 f2 ...] [t1 t2 ...] [vars params] limitdeg] restriction )
26: ( )
27: (This function can be used by loading the experimental package cohom.sm1.)
28: (Restriction of the D-ideal [f1 f2 ...] to t1=0, t2=0, ... is computed. )
29: (vars is a list of the variables and params is a list of parameters. )
30: (k0 is the minimum integral root of the b-function and k1 is the maximum)
31: (integral root of the b-function. If these values are not given and)
32: (they are small, then they are automatically computed. The program returns)
33: ( 0-th, ..., -limitdeg-th cohomology groups.)
34: ([vars params] and [k0 k1 deg] are optional arguments.)
35: (If vars and params are not given, the values of the global variables)
36: (BFvarlist and BFparlist will be used.)
37: ( )
38: (For the algorithm, see math.AG/9805006, http://xxx.langl.gov)
39: ( )
40: (Example 1: cf. math.AG/9801114, Example 1.4 )
41: $ [[(- 2 x Dx - 3 y Dy +1) (3 y Dx^2 - 2 x Dy)] $
42: $ [(x) (y)] [[(x) (y)] [ ]]] restriction :: $
43: $[ [ 0 , [ ] ] , [ 1 , [ ] ] , [ 1 , [ ] ] ] $
44: $ H^0 = 0, H^(-1)= C^1/(no relation), H^(-2)=C^1/(no relation).$
45: (Example 2: )
46: $[[(x Dx-1) (Dy^2)] [(y)] [[(x) (y)] [ ]]] restriction ::$
47: $[ [ 2 , [ -x*Dx+1 , -x*e*Dx+e ] ] , [ 0 , [ ] ] ]$
48: $ H^0=D_1^2/([-x Dx+1,0],[0, -x Dx + 1]), H^(-1) = 0 $
49: $ where e^0, e^1, e^2, ..., e^(m-1) are standard basis vectors of$
50: $ rank m free module (D_1)^m. D_1 is the ring of differential$
51: $ opertors of one variable x.$
52: (Example 3: )
53: $[[(x Dx-1) (Dy^2)] [(y)] [[(x) (y)] [ ]] 0] restriction ::$
54: ]
55: ] putUsages
56:
57: /restriction {
58: /arg1 set
59: [/in-restriction /ppp /verbose /nnn /k0 /k1 /limitdeg
60: /x-vars /params /mmm /zzz /rest.bfunc
61: /gg %% it is not used in restriction, but restall*.sm1 destroys gg.
62: ] pushVariables
63: [(CurrentRingp) (KanGBmessage)] pushEnv
64: [
65: /ppp arg1 def
66: /verbose 1 def
67: ppp
68: (restriction: argument must be an array.)
69: rest.listq pop
70:
71: /nnn ppp length def
72: nnn 2 lt nnn 4 gt or
73: { (restriction: too many or too few arguments) message
74: (restriction) usage error } { } ifelse
75:
76: nnn 3 eq nnn 4 eq or
77: {
78: %% set up global variables.
79: ppp 2 get
80: (restriction: the third argument must be [vars params] or [vars]. For example, [[(x) (y)]].)
81: rest.listq pop
82:
83: ppp 2 get length 2 eq { }
84: { ppp 2 get length 1 eq {
85: ppp 2 << ppp 2 get [ ] append >> put
86: }
87: {
88: (restriction: the third argument must be [vars params]) message
89: error } ifelse
90: } ifelse
91: ppp 2 get 0 get (vars must be an array.) rest.listq
92: { toString} map /x-vars set
93: ppp 2 get 1 get (params must be an array.) rest.listq
94: { toString} map /params set
95: }
96: {/x-vars BFvarlist def /params BFparlist def } ifelse
97:
98:
99:
100: /mmm ppp 0 get def %% module
101: /zzz ppp 1 get def %% algebraic set (zero set)
102: mmm
103: (restriction: the first argument must be list of polynomials)
104: rest.listq pop
105:
106: zzz
107: (restriction: the second argument must be list of polynomials)
108: rest.listq pop
109:
110: [x-vars params join from_records ring_of_differential_operators 0]
111: define_ring
112: mmm { toString . dehomogenize } map /mmm set
113:
114: mmm { toString } map /mmm set
115: zzz { toString } map /zzz set
116:
117: x-vars rest.checkReserved
118: params rest.checkReserved
119:
120: /BFvarlist x-vars def /BFparlist params def
121:
122: [(KanGBmessage) r-interface.verbose] system_variable
123:
124:
125: nnn 2 eq nnn 3 eq or
126: { %% set up k0, k1 and limitdeg by computing b-functions.
127: [mmm zzz] messagen (bfm ) message
128: mmm zzz bfm 0 get /rest.bfunc set
129: (b-function is ) messagen rest.bfunc message
130: rest.bfunc findIntegralRoots /tmp set
131: tmp length 0 eq
132: { (All cohomology groups are zero.) message
133: /arg1 null def
134: /r-interface.sortir goto
135: } { } ifelse
136: tmp 0 get /k0 set
137: tmp << tmp length 1 sub >> get /k1 set
138: /limitdeg zzz length def
139: }
140: {
141: ppp 3 get isInteger
142: {
143: /limitdeg ppp 3 get def
144: [mmm zzz] messagen (bfm ) message
145: mmm zzz bfm 0 get /rest.bfunc set
146: (b-function is ) messagen rest.bfunc message
147: rest.bfunc findIntegralRoots /tmp set
148: tmp length 0 eq
149: { (All cohomology groups are zero.) message
150: /arg1 null def
151: /r-interface.sortir goto
152: } { } ifelse
153: tmp 0 get /k0 set
154: tmp << tmp length 1 sub >> get /k1 set
155: } {
156: ppp 3 get
157: (restriction: the fourth argument must be [k0 k1 limitdeg])
158: rest.listq pop
159:
160: ppp 3 get length 3 eq { }
161: { (restriction: the fourth argument must be [k0 k1 limitdeg]) message
162: error } ifelse
163: ppp 3 get 0 get /k0 set
164: ppp 3 get 1 get /k1 set
165: ppp 3 get 2 get /limitdeg set
166: }ifelse
167: } ifelse
168:
169: BFnotruncate {
170: [mmm zzz k1 limitdeg] messagen ( restall1_s ) message
171: mmm zzz k1 limitdeg restall1_s /arg1 set
172: } {
173: [mmm zzz k0 k1 limitdeg] messagen ( restall_s ) message
174: mmm zzz k0 k1 limitdeg restall_s /arg1 set
175: } ifelse
176: /r-interface.sortir
177: ] pop
178: popEnv
179: popVariables
180: arg1
181: } def
182:
183: /rest.listq {
184: /arg2 set /arg1 set
185: [/in-rest.listq /sss /aaa] pushVariables
186: [
187: /aaa arg1 def /sss arg2 def
188: aaa isArray { }
189: { sss message
190: error
191: } ifelse
192: /arg1 aaa def
193: ]pop
194: popVariables
195: arg1
196: } def
197:
198: /rest.checkReserved {
199: % check if s is used.
200: /arg1 set
201: [/in-rest.checkReserved /vlist /tmp] pushVariables
202: [ /vlist arg1 def
203: vlist (s) position /tmp set
204: tmp -1 gt
205: { (s is the reserved variable.) message error }
206: { } ifelse
207: ] pop
208: popVariables
209: } def
210:
211: [(integration)
212: [
213: ( [[f1 f2 ...] [t1 t2 ...] [vars params] [k0 k1 limitdeg ]] integration )
214: ( [ 0-th cohomology group, (-1)-th cohomology group, .... ] )
215: ( )
216: ( [[f1 f2 ...] [t1 t2 ...] [vars params] limitdeg] integration )
217: ( )
218: (This function can be used by loading the experimental package cohom.sm1.)
219: (Integration of the D-ideal [f1 f2 ...] to t1=0, t2=0, ... is computed. )
220: (vars is a list of the variables and params is a list of parameters. )
221: (k0 is the minimum integral root of the b-function and k1 is the maximum)
222: (integral root of the b-function. If these values are not given and)
223: (they are small, then they are automatically computed. The program returns)
224: ( 0-th, ..., -limitdeg-th cohomology groups.)
225: ([vars params] and [k0 k1 deg] are optional arguments.)
226: (If vars and params are not given, the values of the global variables)
227: (BFvarlist and BFparlist will be used.)
228: (The operator restriciton will be used after the laplace transformation.)
229: ( )
230: (For the algorithm, see math.AG/9805006, http://xxx.langl.gov)
231: ( )
232: (Example 1: )
233: $[[(x (x-1)) (x) ] annfs 0 get
234: [(x)] [[(x)] [ ]]] integration ::$
235: (Example 2: )
236: $[ [(Dt - (3 t^2-x)) (Dx + t)] [(t)]
237: [[(t) (x)] [ ]] 0] integration ::$
238: ]
239: ] putUsages
240:
241: /integration {
242: /arg1 set
243: [/in-integration /intvars /intvarsD /vars /params /inputs /aaa] pushVariables
244: [
245: /aaa arg1 def
246: /inputs aaa 0 get def
247: /intvars aaa 1 get def
248: /vars aaa 2 get 0 get def
249: /params aaa 2 get 1 get def
250: [ vars params join from_records ring_of_differential_operators 0]
251: define_ring pop
252: inputs { toString . dehomogenize } map /inputs set
253: /intvarsD intvars { @@@.Dsymbol 2 1 roll 2 cat_n } map def
254: inputs { intvars intvarsD join laplace0 } map /inputs set
255:
256: aaa 0 get messagen ( ==> ) messagen inputs message
257: aaa 0 inputs put
258: aaa restriction /arg1 set
259:
260: ] pop
261: arg1
262: } def
263:
264:
265: [(deRham)
266: [([f v] deRham c)
267: (string f; string v; f is a polynomial given by a string.)
268: (This function can be used by loading the experimental package cohom.sm1. )
269: (The dimensions of the deRham cohomology groups H^i(C^n - V(f),C) i=0, i=1, ..)
270: (.., n are returned in c.)
271: (For example, if c=[1 4 6 4], then it means that dim H^0(C^3-V(f),C) = 1,)
272: (dim H^1(C^3-V(f),C) = 4, and so on.)
273: (For the algorithm, see "An algorithm for de Rham cohomology groups of the)
274: (complement of an affine variety via D-module computation", to appear in)
275: (Journal of pure and applied algebra, 1998. math.AG/9801114)
276: ( )
277: (Example 0: [(x (x-1) (x-2)) (x)] deRham )
278: (Example 1: [(x y (x+y-1)(x-2)) (x,y)] deRham )
279: (Example 2: [(x^3-y^2) (x,y)] deRham )
280: (Example 3: [(x^3-y^2 z^2) (x,y,z)] deRham )
281: (Example 4: [(x y z (x+y+z-1)) (x,y,z)] deRham )
282: ]] putUsages
283: %% [(x+y+z) (x,y,z)] deRham ---> error in bfm, 1998, 11/27
284: /deRham {
285: /arg1 set
286: [/in-deRham /f /v /vlist /vlist0 /ff0 /ff2 /ttt
287: /r-interface.verbose /tower.verbose /fs.verbose /ans
288: ] pushVariables
289: [
290: /r-interface.verbose deRham.verbose def
291: /tower.verbose deRham.verbose def
292: /fs.verbose deRham.verbose def
293: /f arg1 0 get def
294: /v arg1 1 get def
295: /vlist0 [v to_records pop] def
296: /vlist [v to_records pop] dup { /ttt set @@@.Dsymbol ttt 2 cat_n } map
297: join def
298: [f v] annfs 0 get /ff0 set
299:
300: ff0 { vlist laplace0 } map /ff2 set
301: [ff2 vlist0 [vlist0 [ ]]] restriction /ans set
302: /arg1 ans {deRham.simp} map reverse def
303: ] pop
304: popVariables
305: arg1
306: } def
307:
308: %% [3 , [1, e]] ==> 1
309: /deRham.simp {
310: /arg1 set
311: [/in-deRham.simp /gg /kk] pushVariables
312: [(KanGBmessage)] pushEnv
313: [
314: /kk arg1 0 get def
315: /gg arg1 1 get def
316: [(KanGBmessage) r-interface.verbose] system_variable
317: gg length 0 eq { }
318: {
319: kk [gg] groebner_sugar 0 get length sub /kk set
320: } ifelse
321: /arg1 kk def
322: ] pop
323: popEnv
324: popVariables
325: arg1
326: } def
327:
328:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>