[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

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>