Annotation of OpenXM/src/kan96xx/Doc/intw.sm1, Revision 1.1
1.1 ! maekawa 1: %% When you use wIntegration0, you need oxasir.sm1.
! 2: %% Load this package after you have loaded cohom.sm1.
! 3: %% Annihilating ideal, 0-th integral and restriction with weight vector.
! 4: %% 1998, 11/6, 11/9, 11/18
! 5: %% 1999, 1/25, 6/5.
! 6: %% It was at gbhg3/Int/intw.sm1 <-- s linked from lib/intw.sm1
! 7: %% This file is error clean.
! 8: /intw.verbose 0 def
! 9: /intw.stat 0 def %% statistics.
! 10:
! 11: %% cf. gbhg3/Demo/ann.sm1
! 12: /intw.version (2.981105) def
! 13: (lib/intw.sm1, Version 1999, 6/13. Package for integration with a generic weight.) message
! 14: oxasir.ccc tag 0 eq {
! 15: (Warning: The functions *wbfRoots, wdeRham0, wIntegration0 does not work without oxasir.) message
! 16: ( This package requires oxasir.sm1 and ox_asir server.) message
! 17: } { } ifelse
! 18: cohom.sm1.loaded tag 0 eq {
! 19: (Warning: This package requires cohom.sm1 ) message
! 20: } { } ifelse
! 21: oxasir.sm1.loaded tag 0 eq {
! 22: (Warning: This package requires oxasir.sm1 ) message
! 23: } { } ifelse
! 24:
! 25: intw.version [(Version)] system_variable gt
! 26: { [(This package requires the latest version of kan/sm1) nl
! 27: (Please get it from http://www.math.kobe-u.ac.jp/KAN) ] cat
! 28: error
! 29: } { } ifelse
! 30:
! 31:
! 32: [(integral-k1)
! 33: [([[f1 ... fm] [v1 ... vn] [v1 w1 ... vp wp] k1] integral0 )
! 34: ( [[g1 ... gq],[e1,...,er]])
! 35: (poly|string f1 ...fm; string v1 ... vn;)
! 36: (string v1 ... vp; integer w1 ... wp;)
! 37: (integer k1;)
! 38: (poly g1 ... gq; poly e1, ..., er;)
! 39: (f1 ... fm are annihilors, v1 ... vn are variables,)
! 40: (w1 is the weight of the variable v1, ...)
! 41: (k1 is the maximal degree of the filtration: maximal integral root)
! 42: (of b-function. cf. intwbf)
! 43: (g1, ..., gq are integral. e1, ..., er are basis of the free module to which)
! 44: (the g1, ..., gq belong.)
! 45: (THE ORDERS OF INTEGRAL VARIABLES MUST BE SAME BOTH IN THE SECOND AND)
! 46: (THE THIRD ARGUMENTS. INTEGRAL VARIABLES MUST APPEAR FIRST.)
! 47: $Example 1: [[(x-y) (Dx+Dy)] [(y) (x)] [(y) -1 (Dy) 1] 1] integral-k1$
! 48: $Example 2: [[(x (x-1)) (x)] annfs 0 get [(x)] [(x) -1 (Dx) 1] 1] integral-k1$
! 49: ]
! 50: ] putUsages (integral-k1 ) messagen
! 51: /integral-k1 {
! 52: /arg1 set
! 53: [/in-integral0 /ff /vv /ww /gg1 /gg2 /ord-vec
! 54: /dt-list /nn /ii /dt-ii /mm /jj /xvars /dvars /ans1 /k1 /kk /ans2
! 55: /vec-input /vec-length
! 56: ] pushVariables
! 57: [(CurrentRingp) (KanGBmessage)] pushEnv
! 58: [
! 59: /ff arg1 0 get def
! 60: /vv arg1 1 get def
! 61: /ww arg1 2 get def
! 62: /k1 arg1 3 get def
! 63: /vec-length 1 def
! 64: intw.verbose
! 65: { [ff vv ww k1] messagen ( is the input. ) message } { } ifelse
! 66: ff 0 get isArray {
! 67: ff { {toString} map } map /ff set
! 68: /vec-input 1 def
! 69: %% Compute the length of the input vector
! 70: ff { length dup vec-length gt { /vec-length set } { pop } ifelse } map
! 71: }{
! 72: ff {toString} map /ff set
! 73: /vec-input 0 def
! 74: } ifelse
! 75: /vv vv { (,) 2 cat_n } map aload length cat_n def
! 76: intw.verbose { vv message } { } ifelse
! 77: [(KanGBmessage) intw.verbose] system_variable
! 78: [vv ring_of_differential_operators
! 79: [ww] weight_vector 0] define_ring
! 80: ww getxvars2 /xvars set
! 81: ww getdvars2 /dvars set
! 82: intw.verbose {
! 83: (xvars = ) messagen xvars message
! 84: (dvars = ) messagen dvars message
! 85: } { } ifelse
! 86: %% ww = [(x) -1 (Dx) 1 (z) -1 (Dz) 1]
! 87: %% dvars = [[(Dx) (Dz)] [(Dx) 1 (Dz) 1]]
! 88: %% xvars = [(x) (z)]
! 89: /integral0.ff ff def %% keep variable for debug.
! 90:
! 91: vec-input {
! 92: ff { { . [[(h). (1).]] replace ww laplace0} map homogenize } map /ff set
! 93: } {
! 94: ff { . [[(h). (1).]] replace ww laplace0 homogenize } map /ff set
! 95: %% recompute the lenth of the vector. For e input.
! 96: ff { @@@.esymbol . degree 1 add dup vec-length gt
! 97: { /vec-length set } { pop } ifelse } map
! 98:
! 99: } ifelse
! 100:
! 101: intw.verbose {
! 102: (Computing Groebner basis with the weight vector ) messagen
! 103: ww message
! 104: } { } ifelse
! 105: [ff] groebner 0 get {[[(h). (1).]] replace} map /gg1 set
! 106: intw.verbose {
! 107: gg1 message %% keep variable for debug.
! 108: } { } ifelse
! 109: %% gg1 is the (-w,w)-adapted basis.
! 110: /integral0.gg1 gg1 def
! 111:
! 112:
! 113: intw.verbose {
! 114: (Computing gr 0-k1 of I in D v^0 + D v^1 + ... + D v^{k1} : shifting)
! 115: message
! 116: } { } ifelse
! 117: /ans1 [ ] def
! 118: 0 1 k1 {
! 119: /kk set
! 120: intw.verbose {
! 121: (kk = ) messagen kk message
! 122: } { } ifelse
! 123: /ord-vec gg1 { ww ord_w kk sub} map def
! 124: intw.verbose { ord-vec message } { } ifelse
! 125: %% ww = [(x) -1 (Dx) 1], kk == 0
! 126: %% gg1 = [ (x Dx). (y Dx). (x).]
! 127: %% ord-vec = [ 0 1 -1 ]
! 128: %% dt-list = [ [ 1] [ 0 ] [ (Dx^1).] ]
! 129: ord-vec { 0 2 1 roll sub } map
! 130: {
! 131: dvars 0 get { . } map %% [(Dx). (Dz).]
! 132: dvars 1 get { dup (type?) dc 5 eq { pop } { } ifelse } map %% [1 1]
! 133: 3 -1 roll ip1
! 134: } map /dt-list set
! 135: %% dt-list [ [ 1 ] [ ] [ (Dx^1).] ]
! 136: dt-list { dup length 0 eq { pop [ (0). ] } { } ifelse } map /dt-list set
! 137: intw.verbose {
! 138: (dt-list = ) messagen dt-list message
! 139: } { } ifelse
! 140: %%% t1, -1 ; t2 , -1;
! 141: %% dt-list = [ [ (Dt1). (Dt2). ] [ (1). ] ]
! 142: %% gg1 = [ (t1+t2). (t1 Dt2). ]
! 143: /nn gg1 length def
! 144: [
! 145: 0 1 nn 1 sub {
! 146: /ii set
! 147: dt-list ii get /dt-ii set
! 148: /mm dt-ii length def
! 149: 0 1 mm 1 sub {
! 150: /jj set
! 151: dt-ii jj get
! 152: gg1 ii get mul
! 153: [[(h). (1).]] replace
! 154: xvars { [ 2 1 roll . (0). ] } map replace ww laplace0
! 155: } for
! 156: } for
! 157: ] ans1 join /ans1 set
! 158: } for
! 159: intw.verbose {
! 160: ( ans1 = [ degree-k1, ..., degree-0] = ) messagen
! 161: ans1 message
! 162: } { } ifelse
! 163:
! 164: intw.verbose
! 165: { (Eliminating xvars (variable of integration.) ) message }
! 166: { } ifelse
! 167: ans1 { dup (0). eq { pop } { } ifelse } map /ans1 set
! 168: ans1 [ ] eq
! 169: { [ $There is no relation. It means that there are ($
! 170: k1 1 add
! 171: $)*(length-of-the-input-vector) free basis.$
! 172: ] {toString messagen} map
! 173: ( ) message
! 174: /ans2 [ ] def /integral-k1.L1 goto
! 175: } { } ifelse
! 176: [vv ring_of_differential_operators
! 177: %% elimination order.
! 178: [ xvars { 1 } map ] weight_vector 0] define_ring
! 179: [(NN)
! 180: [(NN)] system_variable xvars length sub
! 181: ] system_variable
! 182: %%%% xvars are regarded as vector index by this trick!!
! 183: %%%% NN should be recovered to the original value or
! 184: %%%% Each ring should have a flag --- <<the constant might be changed(rw)>>
! 185: %%%% In a future version of sm1, when setUpRing is called, sm1 looks for
! 186: %%%% ring data base and if it finds the same ring and the flag of the ring
! 187: %%%% is (ro), then it does not generate a new ring structure. 1998, 11/19.
! 188: (isSameComponent) (xd) switch_function %% for test.
! 189:
! 190: [ ans1 { toString . } map ] groebner_sugar 0 get /ans2 set
! 191: /integral0.ans ans2 def
! 192:
! 193: intw.stat
! 194: { (Size of GB integral0.gg1 is ) messagen integral0.gg1 length message
! 195: (Size of the generators of the submodule integral0.ans is ) messagen
! 196: integral0.ans length message
! 197: } { } ifelse
! 198:
! 199: /integral-k1.L1
! 200: %%%% Compute the vector space basis
! 201: %%% /www2 /vbase /ebase /vbase2
! 202: %% xvars = [(x) (z)], www2 = [1 1], k1=2, vec-length=2
! 203: %% [1 e] [1, x, z, x^2, x z, z^2]
! 204: /www2 dvars 1 get { dup isString { pop } { } ifelse } map def
! 205: [xvars www2 k1] ip1a /vbase set
! 206: vbase { toString . } map /vbase set
! 207: [0 1 vec-length 1 sub { @@@.esymbol . 2 1 roll npower } for] /ebase set
! 208: /vbase2 [ ] def ebase { vbase mul vbase2 join /vbase2 set} map
! 209: intw.verbose {
! 210: (base is ) messagen vbase2 message
! 211: } { } ifelse
! 212:
! 213: /arg1 [ans2 vbase2] def
! 214: ] pop
! 215: popEnv
! 216: popVariables
! 217: arg1
! 218: } def
! 219:
! 220: /homogenize2 {
! 221: /arg1 set
! 222: [/in-homogenize2 /f /ans] pushVariables
! 223: [
! 224: /f arg1 def
! 225: f isArray {
! 226: f { homogenize } map /ans set
! 227: }
! 228: { /ans f homogenize def
! 229: } ifelse
! 230: /arg1 ans def
! 231: ] pop
! 232: popVariables
! 233: arg1
! 234: } def
! 235:
! 236:
! 237: %%% aux functions.
! 238: %% ww = [(x) -1 (Dx) 1 (z) -1 (Dz) 1]
! 239: %% getdvars2 ==> dvars = [[(Dx) (Dz)] [(Dx) 1 (Dz) 1]]
! 240: %% getxvars2 ==> xvars = [(x) (z)]
! 241: /getxvars2 {
! 242: /arg1 set
! 243: [/in-getxvars2 /ww /vv /ans /ii /nn /ans] pushVariables
! 244: [ /ww arg1 def
! 245: /ans [ ] def
! 246: /nn ww length def
! 247: 0 1 nn 1 sub {
! 248: /ii set
! 249: ww ii get (type?) dc 1 eq
! 250: { } % skip, may be weight [(x) 2 ] is OK.
! 251: {
! 252: /vv ww ii get (string) dc def
! 253: vv (array) dc 0 get
! 254: @@@.Dsymbol (array) dc 0 get
! 255: eq %% If the first character is D?
! 256: { } % skip
! 257: { ans [ vv ] join /ans set }
! 258: ifelse
! 259: } ifelse
! 260: } for
! 261: /arg1 ans def
! 262: ] pop
! 263: popVariables
! 264: arg1
! 265: } def
! 266: %% ww = [(x) -1 (Dx) 1 (z) -1 (Dz) 1]
! 267: %% dvars = [[(Dx) (Dz)] [(Dx) 1 (Dz) 1]]
! 268: %% xvars = [(x) (z)]
! 269: /getdvars2 {
! 270: /arg1 set
! 271: [/in-getdvars2 /ww /vv /ans /ii /nn /ans1 /ans2] pushVariables
! 272: [ /ww arg1 def
! 273: /ans1 [ ] def /ans2 [ ] def
! 274: /nn ww length def
! 275: 0 1 nn 1 sub {
! 276: /ii set
! 277: ww ii get (type?) dc 1 eq
! 278: { } % skip, may be weight [(x) 2 ] is OK.
! 279: {
! 280: /vv ww ii get (string) dc def
! 281: vv (array) dc 0 get
! 282: @@@.Dsymbol (array) dc 0 get
! 283: eq %% If the first character is D?
! 284: { ans1 [ vv ] join /ans1 set
! 285: ans2 [ vv ww ii 1 add get ] join /ans2 set
! 286: }
! 287: { } %% skip
! 288: ifelse
! 289: } ifelse
! 290: } for
! 291: /arg1 [ans1 ans2] def
! 292: ] pop
! 293: popVariables
! 294: arg1
! 295: } def
! 296:
! 297: [(wbf)
! 298: [([[f1 ... fm] [v1 ... vn] [v1 w1 ... vp wp]] wbf [g1 ... gq])
! 299: (<poly>|<string> f1 ...fm; <string> v1 ... vn;)
! 300: (<string> v1 ... vp; <integer> w1 ... wp;)
! 301: (<poly> g1 ... gq;)
! 302: (f1 ... fm are generators, v1 ... vn are variables,)
! 303: (w1 is the weight of the variable v1, ...)
! 304: (THE ORDERS OF INTEGRAL VARIABLES MUST BE SAME BOTH IN THE SECOND AND)
! 305: (THE THIRD ARGUMENTS. INTEGRAL VARIABLES MUST APPEAR FIRST.)
! 306: (If the weight is not generic, then the function exits with error.)
! 307: (cf. bf-111 for w=(1 1 1 1 ...) )
! 308: $Example 1: [[(x-y) (Dx+Dy)] [(y) (x)] [(y) -1 (Dy) 1]] wbf$
! 309: $ restrict only for y.$
! 310: $Example 2: [[(-3 x^2 Dy-2 y Dx) (2 x Dx+3 y Dy+6)] [(x) (y)]$
! 311: $ [(x) -1 (Dx) 1 (y) -2 (Dy) 2]] wbf$
! 312: $Example 3: [[[(0) (x^2 Dx+x)] [(Dx^2+x Dx^3) (0)]] [(x)]$
! 313: $ [(x) -1 (Dx) 1]] wbf$
! 314: ]
! 315: ] putUsages ( wbf ) messagen
! 316: /wbf {
! 317: /arg1 set
! 318: [/in-wbf /aaa] pushVariables
! 319: [ /aaa arg1 def
! 320: aaa [1] join intwbf /arg1 set
! 321: ] pop
! 322: popVariables
! 323: arg1
! 324: } def
! 325:
! 326: [(intwbf)
! 327: [([[f1 ... fm] [v1 ... vn] [v1 w1 ... vp wp]] intwbf [g1 ... gq])
! 328: (<poly>|<string> f1 ...fm; <string> v1 ... vn;)
! 329: (<string> v1 ... vp; <integer> w1 ... wp;)
! 330: (<poly> g1 ... gq;)
! 331: (f1 ... fm are generators, v1 ... vn are variables,)
! 332: (w1 is the weight of the variable v1, ...)
! 333: (THE ORDERS OF INTEGRAL VARIABLES MUST BE SAME BOTH IN THE SECOND AND)
! 334: (THE THIRD ARGUMENTS. INTEGRAL VARIABLES MUST APPEAR FIRST.)
! 335: (If the weight is not generic, then the function exits with error.)
! 336: $Example 1: [[(x-y) (Dx+Dy)] [(y) (x)] [(y) -1 (Dy) 1]] intwbf$
! 337: $ integrate only for y.$
! 338: $Example 2: [[(-3 x^2 Dy-2 y Dx) (2 x Dx+3 y Dy+6)] [(x) (y)]$
! 339: $ [(x) -1 (Dx) 1 (y) -2 (Dy) 2]] intwbf$
! 340: $Example 3: [[[(0) (x^2 Dx+x)] [(Dx^2+x Dx^3) (0)]] [(x)]$
! 341: $ [(x) -1 (Dx) 1]] intwbf$
! 342: ]
! 343: ] putUsages ( intwbf ) messagen
! 344:
! 345: /intwbf {
! 346: /arg1 set
! 347: [/in-integral0 /ff /vv /ww /gg1 /gg2 /ord-vec
! 348: /dt-list /nn /ii /dt-ii /mm /jj /xvars /dvars /ans1 /k1 /kk /ans2
! 349: /vec-input /gg1.init /gg1.init2 /complementxvars /gg1.init3
! 350: /rest-bf
! 351: ] pushVariables
! 352: [(CurrentRingp) (KanGBmessage)] pushEnv
! 353: [
! 354: /ff arg1 0 get def
! 355: /vv arg1 1 get def
! 356: /ww arg1 2 get def
! 357: arg1 length 4 eq {
! 358: /rest-bf 1 def
! 359: intw.verbose { (bf for restriction.) message } { } ifelse
! 360: } {
! 361: /rest-bf 0 def
! 362: intw.verbose { (bf for integration.) message } { } ifelse
! 363: } ifelse
! 364: intw.verbose
! 365: { [ff vv ww ] messagen ( is the input. ) message } { } ifelse
! 366: ff 0 get isArray {
! 367: ff { {toString} map } map /ff set
! 368: /vec-input 1 def
! 369: }{
! 370: ff {toString} map /ff set
! 371: /vec-input 0 def
! 372: } ifelse
! 373: /vv vv { (,) 2 cat_n } map aload length cat_n def
! 374: intw.verbose { vv message } { } ifelse
! 375: [(KanGBmessage) intw.verbose] system_variable
! 376: [vv ring_of_differential_operators
! 377: [ww] weight_vector 0] define_ring
! 378: ww getxvars2 /xvars set
! 379: ww getdvars2 /dvars set
! 380: intw.verbose {
! 381: (xvars = ) messagen xvars message
! 382: (dvars = ) messagen dvars message
! 383: } { } ifelse
! 384: %% ww = [(x) -1 (Dx) 1 (z) -1 (Dz) 1]
! 385: %% dvars = [[(Dx) (Dz)] [(Dx) 1 (Dz) 1]]
! 386: %% xvars = [(x) (z)]
! 387: /integral0.ff ff def %% keep variable for debug.
! 388:
! 389: rest-bf {
! 390: %% No Laplace transform for the restriction.
! 391: vec-input {
! 392: ff { { . [[(h). (1).]] replace } map homogenize } map /ff set
! 393: } {
! 394: ff { . [[(h). (1).]] replace homogenize } map /ff set
! 395: } ifelse
! 396: }{
! 397: vec-input {
! 398: ff { { . [[(h). (1).]] replace ww laplace0} map homogenize } map /ff set
! 399: } {
! 400: ff { . [[(h). (1).]] replace ww laplace0 homogenize } map /ff set
! 401: } ifelse
! 402: } ifelse
! 403:
! 404: intw.verbose {
! 405: (Computing Groebner basis with the weight vector ) messagen
! 406: ww message
! 407: } { } ifelse
! 408: [ff] groebner 0 get {[[(h). (1).]] replace} map /gg1 set
! 409: intw.verbose {
! 410: gg1 message %% keep variable for debug.
! 411: } { } ifelse
! 412: %% gg1 is the (-w,w)-adapted basis.
! 413: /integral0.gg1 gg1 def
! 414: %%% The above code is as same as that of integral-k1
! 415:
! 416: intwbf.aux1
! 417: /arg1 set
! 418: ] pop
! 419: popEnv
! 420: popVariables
! 421: arg1
! 422: } def
! 423:
! 424: /intwbf.aux1 {
! 425: [/gg1.init /gg1.init2 /complementxvars /gg1.init3] pushVariables
! 426: [(CurrentRingp)] pushEnv
! 427: [
! 428: %%% It uses local variables in intwbf or integral-k1
! 429: %%%%%%% Let's compute the b-function. It only works for full integration
! 430: %%%%%%% and generic weight vector.
! 431: %% order must be defined by (1) www and (2) [@@@.esymbol 1]
! 432: %% (x Dx^2 e + Dx e + x e + Dx) -->x Dx^2 e + Dx e + Dx --> (x Dx^2 + Dx)e
! 433: intw.verbose {
! 434: [(-------------- computing the b-ideal for generic initial. ---------)
! 435: $-------- if the output is [(e f_1(x,y)) (e f_2(x,y)) g_1(x,y) g_2(x,y) --$
! 436: $-------- then (f_1,f_2) cap (g_1,g_2) would be the b-ideal. $
! 437: ]{message} map
! 438: } { } ifelse
! 439: /complementxvars xvars [vv to_records pop] complement def
! 440: intw.verbose {
! 441: (vv = ) messagen vv message
! 442: (step1. complementxvars = ) messagen complementxvars message
! 443: } { } ifelse
! 444: complementxvars { dup @@@.Dsymbol 2 1 roll 2 cat_n } map
! 445: /complementxvars set
! 446: intw.verbose {
! 447: (step2. complementxvars = ) messagen complementxvars message
! 448: } { } ifelse
! 449: %% vv = (x,y,z)
! 450: %% xvars = [(x) (z)]
! 451: %% complementxvars = [(y) (Dy)]
! 452:
! 453: gg1 {ww weightv init [@@@.esymbol 1] weightv init} map /gg1.init set
! 454: intw.verbose {
! 455: gg1.init message
! 456: } { } ifelse
! 457: gg1.init { xvars {.} map dvars 0 get {.} map xvars {.} map
! 458: distraction2 } map /gg1.init2 set
! 459: %% remove 0
! 460: gg1.init2 { dup (0). eq { pop } { } ifelse } map /gg1.init2 set
! 461:
! 462: %% Let's eliminate complementxvars
! 463: complementxvars [ ] eq { }
! 464: {
! 465: [vv ring_of_differential_operators
! 466: [ complementxvars { 1 } map ] weight_vector 0] define_ring
! 467: [gg1.init2 { dehomogenize toString . } map] groebner_sugar
! 468: 0 get /gg1.init3 set
! 469: gg1.init3 complementxvars eliminatev /gg1.init2 set
! 470: } ifelse
! 471:
! 472: intw.verbose {
! 473: (b-ideal is --------) message
! 474: gg1.init2 message
! 475: } { } ifelse
! 476:
! 477: gg1.init2 /arg1 set
! 478: ] pop
! 479: popEnv
! 480: popVariables
! 481: arg1
! 482: } def
! 483:
! 484: %%% see, gbhg3/Int/int1.sm1
! 485:
! 486:
! 487: [(ip1a)
! 488: [([vlist wlist k] ip1a slist)
! 489: ( x^i ; i_1 w_1 + ... + i_p w_p <= k )
! 490: (Example 1: [[(x) (y) (z)] [1 1 1] 3] ip1a )
! 491: (Example 2: [[(x)] [1] 4] ip1a )
! 492: ]] putUsages
! 493: /ip1a {
! 494: /arg1 set
! 495: [/in-ip1a /vlist /wlist /kk /ans /i] pushVariables
! 496: [(CurrentRingp)] pushEnv
! 497: [
! 498: /vlist arg1 0 get def
! 499: /wlist arg1 1 get def
! 500: /kk arg1 2 get def
! 501:
! 502: [vlist from_records ring_of_polynomials 0] define_ring
! 503: vlist { toString . } map /vlist set
! 504: /ans [ ] def
! 505: 0 1 kk {
! 506: /i set
! 507: vlist wlist i ip1 ans join /ans set
! 508: } for
! 509: ans /arg1 set
! 510: ] pop
! 511: popEnv
! 512: popVariables
! 513: arg1
! 514: } def
! 515:
! 516:
! 517: %% [(x1) (x2)] typeL [ [[(Dx1) (Dx1+D_z1)] [(Dx2) (Dx2+D_z2)]]
! 518: %% [(_z1) (_z2)] ]
! 519: /typeL {
! 520: /arg1 set
! 521: [/in-typeL /xvars /n /zlist /i /tmpr] pushVariables
! 522: [
! 523: /xvars arg1 def
! 524: xvars length /n set
! 525: [ 1 1 n { toString } for ] /zlist set
! 526: zlist { (_z) 2 1 roll 2 cat_n } map /zlist set
! 527: %% [(_z1) (_z2) ... ]
! 528: /rule [ 1 1 n { pop 0 } for ] def
! 529: 0 1 n 1 sub {
! 530: /i set
! 531: [ @@@.Dsymbol xvars i get 2 cat_n
! 532: [@@@.Dsymbol xvars i get
! 533: (+)
! 534: @@@.Dsymbol zlist i get
! 535: ] cat
! 536: ] /tmpr set
! 537: rule i tmpr put
! 538: } for
! 539: /arg1 [rule zlist] def
! 540: ] pop
! 541: popVariables
! 542: arg1
! 543: } def
! 544:
! 545: %% [(x1) (x2)] typeR [ [[(x1) (x1-_z1)] [(x2) (x2-_z2)]
! 546: %% [(Dx1) (-D_z1)] [(Dx2) (-D_z2)]]
! 547: %% [(_z1) (_z2)] ]
! 548: /typeR {
! 549: /arg1 set
! 550: [/in-typeL /xvars /n /zlist /i /tmpr] pushVariables
! 551: [
! 552: /xvars arg1 def
! 553: xvars length /n set
! 554: [ 1 1 n { toString } for ] /zlist set
! 555: zlist { (_z) 2 1 roll 2 cat_n } map /zlist set
! 556: %% [(_z1) (_z2) ... ]
! 557: /rule [ 1 1 n 2 mul { pop 0 } for ] def
! 558: 0 1 n 1 sub {
! 559: /i set
! 560: [ @@@.Dsymbol xvars i get 2 cat_n
! 561: [
! 562: (-)
! 563: @@@.Dsymbol zlist i get
! 564: ] cat
! 565: ] /tmpr set
! 566: rule << i n add >> tmpr put
! 567: [ xvars i get
! 568: [ xvars i get
! 569: (-)
! 570: zlist i get
! 571: ] cat
! 572: ] /tmpr set
! 573: rule i tmpr put
! 574: } for
! 575: /arg1 [rule zlist] def
! 576: ] pop
! 577: popVariables
! 578: arg1
! 579: } def
! 580:
! 581: /tensor0 {
! 582: /arg1 set
! 583: [/in-tensor0 /vlist
! 584: /vlist2 /exteriorTensor /aaa /ans
! 585: ] pushVariables
! 586: [
! 587: arg1 tensor0.aux /aaa set
! 588: /exteriorTensor aaa 0 get def
! 589: /vlist aaa 1 get def
! 590: /vlist2 aaa 2 get def
! 591: [exteriorTensor vlist2 [ vlist vlist2 join [ ]] 0] message
! 592: [exteriorTensor vlist2 [ vlist vlist2 join [ ]] 0] restriction
! 593: /ans set
! 594: ans 0 get toVectors2 /arg1 set
! 595: ]pop
! 596: popVariables
! 597: arg1
! 598: } def
! 599:
! 600: /tensor1 {
! 601: /arg1 set
! 602: [/in-tensor0 /vlist
! 603: /vlist2 /exteriorTensor /aaa /ans
! 604: ] pushVariables
! 605: [
! 606: arg1 tensor0.aux /aaa set
! 607: /exteriorTensor aaa 0 get def
! 608: /vlist aaa 1 get def
! 609: /vlist2 aaa 2 get def
! 610: [exteriorTensor vlist2 [ vlist vlist2 join [ ]]] message
! 611: [exteriorTensor vlist2 [ vlist vlist2 join [ ]]] restriction
! 612: /ans set
! 613: ans {toVectors2} map /arg1 set
! 614: ]pop
! 615: popVariables
! 616: arg1
! 617: } def
! 618:
! 619:
! 620:
! 621: /tensor0.aux {
! 622: /arg1 set
! 623: [/in-tensor0.aux /mLeft /mRight /vlist
! 624: /ruleL /ruleR /vlist2 /exteriorTensor
! 625: ] pushVariables
! 626: [(CurrentRingp)] pushEnv
! 627: [
! 628: /mLeft arg1 0 get def
! 629: /mRight arg1 1 get def
! 630: /vlist arg1 2 get def
! 631:
! 632: mLeft {toString} map /mLeft set
! 633: mRight {toString} map /mRight set
! 634: vlist isString {
! 635: [vlist to_records pop ] /vlist set
! 636: } { } ifelse
! 637:
! 638: /ruleL vlist typeL 0 get def
! 639: /ruleR vlist typeR 0 get def
! 640: /vlist2 vlist typeL 1 get def
! 641:
! 642: [vlist vlist2 join from_records
! 643: ring_of_differential_operators 0] define_ring
! 644: ruleL { { . } map } map /ruleL set
! 645: ruleR { { . } map } map /ruleR set
! 646:
! 647: mLeft { . ruleL replace dehomogenize } map /mLeft set
! 648: mRight { . ruleR replace dehomogenize } map /mRight set
! 649:
! 650: /exteriorTensor mLeft mRight join { toString } map def
! 651:
! 652: /arg1 [exteriorTensor vlist vlist2] def
! 653: ] pop
! 654: popEnv
! 655: popVariables
! 656: arg1
! 657: } def
! 658:
! 659: [(tensor0)
! 660: [( [F G vlist] tensor0 )
! 661: (This function requires the package cohom.sm1.)
! 662: (Example 1:)
! 663: ( [[(2 x Dx - 1)] [(2 x Dx - 3)] (x)] tensor0 )
! 664: (Example 2:)
! 665: ( [[(-x*Dx^2+x-Dx+1)] [((x Dx + x +1)(Dx-1))] (x)] tensor0 )
! 666: (Example 3:)
! 667: ( [[(x Dx -1) (y Dy -4)] [(Dx + Dy) (Dx-Dy^2)] (x,y)] tensor0 )
! 668: ]] putUsages
! 669: (tensor0 ) messagen
! 670:
! 671: /wTensor0 {
! 672: /arg1 set
! 673: [/in-wTensor0 /vlist
! 674: /vlist2 /exteriorTensor /aaa /ans /weight /i /wlist
! 675: ] pushVariables
! 676: [
! 677: arg1 /aaa set
! 678: aaa 3 get /wlist set
! 679: [aaa 0 get aaa 1 get aaa 2 get] tensor0.aux /aaa set
! 680: /exteriorTensor aaa 0 get def
! 681: /vlist aaa 1 get def
! 682: /vlist2 aaa 2 get def
! 683:
! 684: [
! 685: 0 1 wlist length 1 sub {
! 686: /i set
! 687: vlist2 i get
! 688: 0 wlist i get sub
! 689: [@@@.Dsymbol vlist2 i get] cat
! 690: wlist i get
! 691: } for
! 692: ] /weight set
! 693: [exteriorTensor vlist vlist2 join weight] message
! 694: [exteriorTensor vlist vlist2 join weight] wRestriction0
! 695: /ans set
! 696: ans 0 get toVectors2 /arg1 set
! 697: ]pop
! 698: popVariables
! 699: arg1
! 700: } def
! 701: (wTensor0 ) messagen
! 702: [(wTensor0)
! 703: [([F G v weight] wTensor0)
! 704: (See tensor0)
! 705: (It calls wRestriction0 instead of restriction.)
! 706: (Example 1:)
! 707: ( [[(x Dx -1) (y Dy -4)] [(Dx + Dy) (Dx-Dy^2)] (x,y) [1 2]] wTensor0 )
! 708: ]] putUsages
! 709:
! 710: %% analyzing a given b-ideal.
! 711: /integralRoots001 {
! 712: /arg1 set
! 713: [/in-integralRoots00 /R /ff /n /i /j
! 714: /ans /ans2
! 715: ] pushVariables
! 716: [(CurrentRingp)] pushEnv
! 717: [
! 718: /ff arg1 def
! 719: /R ff 0 get (ring) dc def
! 720: [(CurrentRingp) R] system_variable
! 721:
! 722: ff toVectors /ff set
! 723: /n 0 def
! 724: 0 1 ff length 1 sub {
! 725: /i set
! 726: ff i get length n gt
! 727: { /n ff i get length def }
! 728: { } ifelse
! 729: } for %% n is the maximal length.
! 730:
! 731: [ 1 1 n { } for ] /ans set
! 732: 1 1 n {
! 733: /i set
! 734: /ans2 [ ] def
! 735: 0 1 ff length 1 sub {
! 736: /j set
! 737: ff j get length i eq {
! 738: ans2 [ ff j get i 1 sub get ] join /ans2 set
! 739: } { } ifelse
! 740: } for
! 741: ans << i 1 sub >> ans2 put
! 742: } for
! 743: /arg1 ans def
! 744: ] pop
! 745: popEnv
! 746: popVariables
! 747: arg1
! 748: } def
! 749:
! 750: /intwbfRoots {
! 751: /arg1 set
! 752: [/in-intwbfRoots /aaa /ggg /vvv /www] pushVariables
! 753: [
! 754: /aaa arg1 def
! 755: aaa 2 get getxvars2 { toString } map /vvv set
! 756: aaa 2 get getdvars2 1 get
! 757: { dup isString { pop } { } ifelse } map /www set
! 758: (vvv=) messagen vvv message
! 759: (www=) messagen www message
! 760: aaa length 3 {
! 761: %% integration.
! 762: aaa intwbf
! 763: /intwbf.bideal set %% global var
! 764: } {
! 765: %% restriction
! 766: aaa wbf
! 767: /intwbf.bideal set %% global var
! 768: } ifelse
! 769: intwbf.bideal integralRoots001
! 770: /intwbf.bideal2 set %% global var
! 771: (b-ideal is ) messagen intwbf.bideal2 message
! 772: (It is in the global variable intwbf.bideal2.) message
! 773: intwbf.bideal2
! 774: { /ggg set
! 775: %% [ggg vvv www] { { (type?) dc } map } map message error
! 776: [ggg vvv www] rationalRoots2
! 777: } map
! 778: /ggg set
! 779:
! 780: %% Integer 0 is returned as a null by ox_asir.
! 781: ggg {{ dup tag 0 eq { pop 0 } { } ifelse } map} map /ggg set
! 782:
! 783: (vvv = ) messagen vvv message
! 784: (www = ) messagen www message
! 785: (Roots are ) messagen ggg message
! 786:
! 787:
! 788: [-intInfinity] ggg flatten join shell rest /arg1 set
! 789: ] pop
! 790: popVariables
! 791: arg1
! 792: } def
! 793:
! 794: [(intwbfRoots)
! 795: [(This function needs oxasir --- rationalRoots2)
! 796: $This function is defined in intw.sm1 and requires oxasir.sm1 and ox_asir server.$
! 797: $Example 1: [[(-3 x^2 Dy-2 y Dx) (2 x Dx+3 y Dy+6)] [(x) (y)] $
! 798: $ [(x) -1 (Dx) 1 (y) -2 (Dy) 2]] intwbfRoots $
! 799: $Example 2: [[[(0) (x^2 Dx+x)] [(Dx^2+x Dx^3) (0)]] [(x)] $
! 800: $ [(x) -1 (Dx) 1]] intwbfRoots $
! 801: ]] putUsages
! 802: (intwbfRoots ) messagen
! 803:
! 804: /wbfRoots {
! 805: /arg1 set
! 806: [/in-wbfRoots /aaa ]pushVariables
! 807: [
! 808: /aaa arg1 def
! 809: aaa [1] join intwbfRoots /arg1 set
! 810: ] pop
! 811: popVariables
! 812: arg1
! 813: } def
! 814: [(wbfRoots)
! 815: [(This function needs oxasir --- rationalRoots2)
! 816: $This function is defined in intw.sm1 and requires oxasir.sm1 and ox_asir server.$
! 817: $Example 1: [[(-3 x^2 Dy-2 y Dx) (2 x Dx+3 y Dy+6)] [(x) (y)] $
! 818: $ [(x) -1 (Dx) 1 (y) -2 (Dy) 2]] wbfRoots $
! 819: $Example 2: [[[(0) (x^2 Dx+x)] [(Dx^2+x Dx^3) (0)]] [(x)] $
! 820: $ [(x) -1 (Dx) 1]] wbfRoots $
! 821: ]] putUsages
! 822: (wbfRoots ) messagen
! 823:
! 824:
! 825:
! 826: /wIntegration0 {
! 827: /arg1 set
! 828: [/in-wIntegration /aaa /rrr /k1 /ans] pushVariables
! 829: [
! 830: /aaa arg1 def
! 831: aaa intwbfRoots /rrr set
! 832: rrr << rrr length 1 sub >> get /k1 set
! 833: k1 0 lt {
! 834: /ans [ ] def
! 835: } {
! 836: aaa [k1] join integral-k1 /ans set
! 837: } ifelse
! 838: (k1 = ) messagen k1 message
! 839: /arg1 ans def
! 840: ] pop
! 841: popVariables
! 842: arg1
! 843: } def
! 844:
! 845: (wIntegration0 ) message
! 846: [(wIntegration0)
! 847: [( [gg vlist weight] wIntegration0 [ igg bb] )
! 848: (list of strings gg; list of strings vlist;)
! 849: (list weight;)
! 850: (integer k1;)
! 851: (list of polys igg; list of polys base;)
! 852: (gg are input ideal or submodule.)
! 853: (igg are relations and bb are bases. They give the integral.)
! 854: (This function fails when weight is not generic.)
! 855: (cf. intwbf, intwbfRoots, integral-k1. )
! 856: $This function is defined in intw.sm1 and requires oxasir.sm1 and ox_asir server.$
! 857: $See Grobner Deformations of Hypergeometric Differential Equations, Springer$
! 858: $ Section 5.5 for the algorithm.$
! 859: $Example 1: [ [(Dt - (3 t^2-x)) (Dx + t)] [(t) (x)] [(t) -1 (Dt) 1]] $
! 860: $ wIntegration0 $
! 861: $Example 2: [[(-3 x^2 Dy-2 y Dx) (2 x Dx+3 y Dy+6)] [(x) (y)] $
! 862: $ [(x) -1 (Dx) 1 (y) -2 (Dy) 2]] wIntegration0 $
! 863: $ The output [[-x, 1] [x,1]] implies the integral is $
! 864: $ (K x + K 1)/(K (-x) + K 1) = 0 where K is the base field and$
! 865: $ x and 1 is the vector space basis.$
! 866: $ Note that the order of weight and the order of the variables$
! 867: $ must be the same. Note also that the next of (x) must be (Dx)$
! 868: $ and so on.$
! 869: ]] putUsages
! 870:
! 871: /wRestriction0 {
! 872: /arg1 set
! 873: [/in-wRestriction0 /gg /vlist /v0 /vv /b /aaa /ans] pushVariables
! 874: [(CurrentRingp)] pushEnv
! 875: [
! 876: /aaa arg1 def
! 877: /gg aaa 0 get def
! 878: /vlist aaa 1 get def
! 879: vlist isArray
! 880: { vlist from_records /v0 set }
! 881: { /v0 vlist def vlist to_records /vlist set } ifelse
! 882: /vv vlist vlist { /b set [@@@.Dsymbol b] cat } map join def
! 883: [v0 ring_of_differential_operators 0] define_ring pop
! 884: gg 0 get isArray {
! 885: gg { { toString . vv laplace0 toString } map } map /gg set
! 886: }
! 887: {
! 888: gg { toString . vv laplace0 toString } map /gg set
! 889: } ifelse
! 890: /ans [gg] aaa rest join wIntegration0 def
! 891:
! 892: [v0 ring_of_differential_operators 0] define_ring pop
! 893: ans { { toString . vv laplace0 } map } map /ans set
! 894: /arg1 ans def
! 895: ] pop
! 896: popEnv
! 897: popVariables
! 898: arg1
! 899: } def
! 900:
! 901: (wRestriction0 ) messagen
! 902: [(wRestriction0)
! 903: [( [gg vlist weight] wRestriction0 [ igg bb] )
! 904: (list of strings gg; list of strings vlist;)
! 905: (list weight;)
! 906: (integer k1;)
! 907: (list of polys igg; list of polys base;)
! 908: (gg are input ideal or submodule.)
! 909: (igg are relations and bb are bases. They give the 0-th restriction.)
! 910: (This function fails when weight is not generic.)
! 911: (cf. intwbf, intwbfRoots, integral-k1. )
! 912: $This function is defined in intw.sm1 and requires oxasir.sm1 and ox_asir server.$
! 913: $See Grobner Deformations of Hypergeometric Differential Equations, Springer$
! 914: $ Section 5.5 for the algorithm.$
! 915: $Example 1: [ [(Dt^2) (Dx^2)] [(t) (x)] [(t) -1 (Dt) 1]] $
! 916: $ wRestriction0 $
! 917: $Example 2: [[(Dx^2) (Dy^2)] [(x) (y)] $
! 918: $ [(x) -1 (Dx) 1 (y) -2 (Dy) 2]] wRestriction0 $
! 919: $ The output [[-Dx, 1] [Dx,1]] implies the restriction is $
! 920: $ (K Dx + K 1)/(K (-Dx) + K 1) = 0 where K is the base field and$
! 921: $ Dx and 1 is the vector space basis.$
! 922: $ Note that the order of weight and the order of the variables$
! 923: $ must be the same. Note also that the next of (x) must be (Dx)$
! 924: $ and so on.$
! 925: ]] putUsages
! 926:
! 927:
! 928:
! 929: /ann-t-f {
! 930: /arg1 set
! 931: [/in-ann-t-f /f /vlist /s /vvv /nnn /rrr
! 932: /v1 /ops /ggg /ggg0
! 933: ] pushVariables
! 934: [(CurrentRingp) (KanGBmessage)] pushEnv
! 935: [
! 936: /f arg1 0 get def /vlist arg1 1 get def
! 937: f toString /f set
! 938: vlist { toString } map /vlist set
! 939: [(KanGBmessage) fs.verbose] system_variable
! 940: /s vlist 0 get def
! 941: /vvv (_u,_v,_t,) vlist rest { (,) 2 cat_n } map aload length /nnn set
! 942: s nnn 2 add cat_n def
! 943: fs.verbose { vvv message } { }ifelse
! 944: [vvv ring_of_differential_operators
! 945: [[(_u) 1 (_v) 1]] weight_vector 0] define_ring /rrr set
! 946:
! 947: [ (_t). f . sub ]
! 948: vlist rest { /v1 set
! 949: f . @@@.Dsymbol v1 2 cat_n . 1 diff0 [@@@.Dsymbol (_t)] cat . mul
! 950: @@@.Dsymbol v1 2 cat_n . add } map
! 951: join
! 952: /ops set
! 953: ops {[[(h). (1).]] replace } map /ops set
! 954: fs.verbose { ops message } { }ifelse
! 955: ops { [[(_t). s .] [[@@@.Dsymbol (_t)] cat . @@@.Dsymbol s 2 cat_n .]] replace dehomogenize } map
! 956: /arg1 set
! 957: ] pop
! 958: popEnv
! 959: popVariables
! 960: arg1
! 961: } def
! 962: [(ann-t-f)
! 963: [(ann-t-f returns the annihilating ideal of delta(t-f(x)))
! 964: $Example: [(x^3-y^2) [(t) (x) (y)]] ann-t-f $
! 965: ]] putUsages
! 966: (ann-t-f ) messagen
! 967:
! 968: /bf-111 {
! 969: /arg1 set
! 970: [/in-bf-111 /aa /vlist /rest-vlist] pushVariables
! 971: [(CurrentRingp) (KanGBmessage)] pushEnv
! 972: [
! 973: /aa arg1 def
! 974: aa 1 get /vlist set
! 975: aa 2 get /rest-vlist set
! 976: /vlist [vlist to_records pop] def
! 977: /rest-vlist [rest-vlist to_records pop] def
! 978: /BFvarlist vlist def /BFparlist [ ] def
! 979: aa 0 get { toString} map
! 980: rest-vlist bfm 0 get /bf-111.bfunc set
! 981: /arg1 bf-111.bfunc def
! 982: ] pop
! 983: popEnv
! 984: popVariables
! 985: arg1
! 986: } def
! 987: [(bf-111)
! 988: [( [ideal vlist rest-vlist bf-111] bf-111 )
! 989: (Compute the b-function for the weight vector 11111 for the variables)
! 990: (res-vlist. cf. wbf)
! 991: (Example: [ [((x Dx -1 ) x Dx (x Dx + 2)) (y Dy)] (x,y) (x)] bf-111 )
! 992: ]] putUsages
! 993: (bf-111 ) messagen
! 994:
! 995: /wdeRham0 {
! 996: /arg1 set
! 997: [/in-wdeRham0 /aaa /ff0 /vlist /myweight] pushVariables
! 998: [
! 999: /aaa arg1 def
! 1000: /ff0 arg1 0 get def
! 1001: /vlist arg1 1 get def
! 1002: /myweight arg1 2 get def
! 1003: [ff0 vlist] annfs /ff0 set
! 1004:
! 1005: /vlist [vlist to_records pop ] def
! 1006: [ff0 0 get vlist myweight] wIntegration0
! 1007: /arg1 set
! 1008: ] pop
! 1009: popVariables
! 1010: arg1
! 1011: } def
! 1012: (wdeRham0 ) messagen
! 1013: [(wdeRham0)
! 1014: [ $It computes the midle dimensional cohomology groups and bases.$
! 1015: $A generic weight vector is used for the computation.$
! 1016: $This function is defined in intw.sm1 and requires oxasir.sm1 and ox_asir server.$
! 1017: $ Example 1 : [(x^3-y^2) (x,y) [(x) -1 (Dx) 1 (y) -2 (Dy) 2]] wdeRham0 $
! 1018: $ Example 2 : [(x^3+y^3+z^3) (x,y,z) $
! 1019: $ [(x) -1 (Dx) 1 (y) -2 (Dy) 2 (z) -3 (Dz) 3]] wdeRham0 $
! 1020: $ Example 3 : [(x^3 -y z^2) (x,y,z) $
! 1021: $ [(x) -1 (Dx) 1 (y) -2 (Dy) 2 (z) -3 (Dz) 3]] wdeRham0 $
! 1022: $ Example 4 : [(x^3 -y^2 z^2) (x,y,z) $
! 1023: $ [(x) -1 (Dx) 1 (y) -2 (Dy) 2 (z) -3 (Dz) 3]] wdeRham0 $
! 1024: ]] putUsages
! 1025:
! 1026: /intw.sm1.loaded 1 def
! 1027:
! 1028: ( ) message ;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>