[BACK]Return to intw.sm1 CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Doc

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>