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

Annotation of OpenXM/src/kan96xx/Doc/restall_s.sm1.org2, Revision 1.1

1.1     ! maekawa     1: %% restall_sn.sm1,  New restall_s.sm1 is developed here.
        !             2: %% /BFmessage 0 def controlled from cohom.sm1
        !             3: BFmessage {
        !             4:  (**********************************************) message
        !             5:  [$  New restall_s (restall_s.sm1) $
        !             6:   $  1999, 1/29: only Schreyer 1 works. For more than one unknowns. $
        !             7:   $  1999, 5/21: Schreyer 2 is working for more than one unknowns.$
        !             8:   $  Schryer 2 still contains a bug when we truncate from the below.See gbhg3/Int/bug.sm1 and Example 5.6$
        !             9:   $   of Oaku-Takayama, math.AG/980506 $
        !            10:  ] {message} map
        !            11:  (**********************************************) message
        !            12: } {  } ifelse
        !            13: %%changed the following symbols.
        !            14: %% complement ==> oaku.complement
        !            15: %% syz ==> o.syz
        !            16:
        !            17: %%%%%%%%%%%%%%%%%%%%%%% restall.sm1 (Version 19980415) %%%%%%%%%%%%%%%%%%%%%%%
        !            18: (restall_s.sm1...compute all the cohomology groups of the restriction) message-quiet
        !            19: (                of a D-module to tt = (t_1,...,t_d) = (0,...,0).) message-quiet
        !            20: (Schreyer Version: 19990521 by N.Takayama & T.Oaku) message-quiet
        !            21: (usage: [(P1)...] [(t1)...] k0 k1 deg restall_s -> cohomologies of restriction)
        !            22: message-quiet
        !            23: (       [(P1)...] [(t1)...] k0 k1 deg intall_s --> cohomologies of integration)
        !            24: message-quiet
        !            25: % History: Nov.10, 1997, Apr.15,1998
        !            26: %%%%%%%%%%%%%%%%%%%%%%%%%%%% Global variables %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !            27: %/BFvarlist %% Set all the variables (except s and the parameters) here.
        !            28: /BFs (s) def
        !            29: /BFth (s) def
        !            30: /BFu (u) def
        !            31:
        !            32: /BFunknowns 1 def
        !            33: [(x) (y)] /BFvarlist set
        !            34: [ ] /BFparlist set
        !            35:
        !            36: /BFff
        !            37:   [    $x^3-y^2$ , $2*x*Dx + 3*y*Dy + 6$ , $2*y*Dx + 3*x^2*Dy$ ]
        !            38: def
        !            39:
        !            40: %% 1 /Schreyer set  Controlled from cohom.sm1
        !            41: 0 /Cheat.restall_sn set
        !            42: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !            43: %% The cohomology groups of the restriction
        !            44: %% [(P1)...] [(t1)...] k0 k1 degmax restall
        !            45: %% --> [0-th cohomology -1-th cohomology, ...,-degmax-th cohomology]
        !            46:
        !            47: /restall_s {
        !            48:   /arg5 set %% degmax
        !            49:   /arg4 set %% k1
        !            50:   /arg3 set %% k0
        !            51:   /arg2 set %% [(t1) ... (td)]
        !            52:   /arg1 set %% BFequations
        !            53:   [
        !            54:      /ff /bftt /k0 /k1 /degmax /syzlist /mveclist /cohomlist
        !            55:      /ideg /gbase /o.syz /m1vec /m2vec /r1 /r2
        !            56:      /i /syzi /j /syzij /maxtmp /max0 /ee /psi1index /zerolist
        !            57:      /psi1 /psi1ker /psi2image
        !            58:      /gbase1 /m1i /emonoi /nmono /bfDttmonoi /eei /dtp /k /psi1kervec
        !            59:      /pn /pn0 /psi1i /psi1keri /m2i /nker /nim /cohm /psiall /psisyz /cohom0
        !            60:      /syz0
        !            61:   ] pushVariables
        !            62:   [
        !            63:     /ff arg1 def  /bftt arg2 def  /k0 arg3 def  /k1 arg4 def
        !            64:     /degmax arg5 def
        !            65:     bftt length /d set
        !            66:
        !            67:     (Computing a free resolution ... ) message
        !            68:
        !            69:     Schreyer 1 eq {ff bftt degmax resolution_SV /syzlist set}
        !            70:     {  Cheat.restall_sn
        !            71:        {
        !            72:           Schreyer 0 eq {ff bftt degmax resolution_nsV /syzlist set}{ } ifelse
        !            73:        }
        !            74:        {
        !            75:          Schreyer 2 eq {ff bftt degmax resolution_Sh dehomogenize /syzlist set}
        !            76:          { (This version of restall_s works only for Schyreyer 1 and 2) message
        !            77:             error
        !            78:          } ifelse
        !            79:        } ifelse
        !            80:     } ifelse
        !            81:
        !            82:     syzlist /BFresolution set
        !            83:     (A free resolution obtained.) message
        !            84:
        !            85:     BFvarlist /ttxx set
        !            86:     BFparlist /aa set
        !            87:     [BFs] ttxx join aa join /allvarlist set
        !            88:     ttxx length /dn set
        !            89:     ttxx {xtoDx} map /Dttxx set
        !            90:
        !            91:     /BFs_weight
        !            92:       [ [ BFs 1 ]
        !            93:         [ 0 1 dn 1 sub
        !            94:             { /i set Dttxx i get 1 }
        !            95:           for
        !            96:           0 1 dn 1 sub
        !            97:             { /i set ttxx i get 1 }
        !            98:           for ]
        !            99:       ] def
        !           100:
        !           101:     [ allvarlist listtostring ring_of_differential_operators
        !           102:       BFs_weight weight_vector 0 ] define_ring
        !           103:
        !           104: %% Reformatting the free resolution:
        !           105: %%  [[f1,f2,..],[syz1,...]] --> [[[f1],[f2],...],[syz,...]] (strings)
        !           106: %% (to be modified for the case with more than one unknowns.)
        !           107:
        !           108:     Schreyer 0 gt {
        !           109:       /syzlist1 [
        !           110:         syzlist 0 get /syz0 set
        !           111:         %% start N.T.
        !           112:         [BFunknowns syz0 { toString . } map]
        !           113:         toVectors2 { {toString} map } map
        !           114:         %% end N.T.
        !           115:         1 1 degmax {/i set
        !           116:           syzlist 1 get i 1 sub get {toStrings} map
        !           117:         } for
        !           118:       ] def
        !           119:       syzlist1 /syzlist set
        !           120:     }{
        !           121:       /syzlist1 [
        !           122:         syzlist 0 get /syz0 set
        !           123:         [ 0 1 syz0 length 1 sub {/i set
        !           124:           [ syz0 i get (string) dc ]
        !           125:         } for ]
        !           126:         1 1 degmax {/i set
        !           127:           syzlist i get {toStrings} map
        !           128:         } for
        !           129:       ] def
        !           130:       syzlist1 /syzlist set
        !           131:     } ifelse
        !           132:
        !           133:     [ ] /cohomlist set
        !           134:
        !           135: %% Start the loop:
        !           136:   0 1 degmax {/ideg set
        !           137:
        !           138: %(new loop: ) messagen ideg ::
        !           139:
        !           140:     ideg 0 eq {
        !           141:        1 /r0 set
        !           142:        %% N.T.
        !           143:        BFunknowns /r1 set
        !           144:       [ 1 1 BFunknowns { pop [ (0) ]} for ] /gbase set
        !           145:       [ 0 ] /m0vec set
        !           146:       [ 1 1 BFunknowns { pop 0} for  ] /m1vec set
        !           147:       %% end N.T.
        !           148:     }{
        !           149:       syzlist  << ideg 1 sub >> get /gbase set
        !           150:       r0 /r1 set
        !           151:     } ifelse
        !           152:     syzlist     ideg          get /o.syz   set
        !           153:
        !           154: %%                                       o.syz       gbase
        !           155: %%                                D^{r2} --> D^{r1} --> D^{r0}
        !           156: %% with weight vectors:           m2vec      m1vec      m0vec
        !           157: %% which will induce a complex
        !           158: %%                                     psi2              psi1
        !           159: %%                        D_{Y->X}^{r2} --> D_{Y->X}^{r1} --> D_{Y->X}^{r0}
        !           160:
        !           161:     gbase length /r1 set
        !           162:     o.syz length /r2 set
        !           163:     /m2vec null def %% initialize.
        !           164:   BFmessage {
        !           165:     (m2vec = ) messagen m2vec message
        !           166:     (o.syz = ) messagen o.syz pmat
        !           167:     (m1vec = ) messagen m1vec message
        !           168:     (gbase = ) messagen gbase pmat
        !           169:     (m0vec = ) messagen m0vec message
        !           170:   } { } ifelse
        !           171:
        !           172:
        !           173: %% (Computing the weight vector m2vec from m1vec and syz) message
        !           174:       /m2vec [
        !           175:         0 1 r2 1 sub {/i set
        !           176:           o.syz i get /syzi set
        !           177:           0 /nonzero set
        !           178:           0 1 r1 1 sub {/j set
        !           179:             syzi j get expand /syzij set
        !           180:             syzij (0). eq {  }{
        !           181:               syzij bftt fwh_order  m1vec j get  add /maxtmp set
        !           182:               nonzero 0 eq { maxtmp /max0 set }{
        !           183:                 maxtmp max0 gt { maxtmp /max0 set }{ } ifelse
        !           184:               } ifelse
        !           185:             1 /nonzero set
        !           186:             } ifelse
        !           187:           } for
        !           188:         max0 } for ] def
        !           189:
        !           190: %% ee = [u1,...,ud] corresponds to [Dt1,...,Dtd] (for graduation)
        !           191:     BFu /estr set
        !           192:     /ee
        !           193:       [ 1 1 d {/i set estr i toString 2 cat_n} for ]
        !           194:     def
        !           195:     [@@@.esymbol ] ee join /eee set
        !           196:
        !           197: %%(Setting up a ring that represents D_{Y->X}^{r1}) message
        !           198:     eee length /neee set
        !           199:     /eeemvec [ 1 1 neee {pop 1} for ] def
        !           200:     eee [ ] [BFs] BFvarlist join eeemvec setupDringVshift
        !           201:     bftt {xtoDx expand} map /bfDtt set
        !           202:     [ ] /psi1 set
        !           203:     [ ] /psi1index set
        !           204:     [ ] /zerolist set
        !           205:
        !           206: %%(converting gbase to a list of polynomials) message
        !           207:     /gbase1
        !           208:       [ 0 1 r1 1 sub {/i set
        !           209:           gbase i get {expand [[BFs expand (1).]] replace} map vector_to_poly
        !           210:        } for ] def
        !           211:
        !           212:     gbase1 /gbase set
        !           213:
        !           214: %%(ideg =) messagen ideg ::
        !           215: %%(Computing psi1) message
        !           216: %%                        psi1
        !           217: %% Computes  D_{Y->X}^{r1} -->  D_{Y->X}^{r0} induced by gbase
        !           218: %% with weight  k0 - m1vec <= k <= k1 - m1vec
        !           219:     0 1 r1 1 sub {/i set
        !           220:       m1vec i get /m1i set
        !           221:       ee {expand} map k0 m1i sub k1 m1i sub monomials /emonoi set
        !           222:       bfDtt k0 m1i sub k1 m1i sub monomials /bfDttmonoi set
        !           223:       emonoi length /nmono set
        !           224:       0 1 nmono 1 sub {/j set
        !           225:         @@@.esymbol  expand i npower /eei set
        !           226:         emonoi j get eei mul /eei set
        !           227:         gbase i get /dtp set
        !           228:         bfDttmonoi j get dtp mul /dtp set
        !           229:         0 1 d 1 sub {/k set
        !           230:           dtp [[bftt k get expand (0).]] replace /dtp set
        !           231:           dtp [[bfDtt k get  ee k get expand]] replace /dtp set
        !           232:         } for
        !           233:         dtp [[(h). (1).]] replace /dtp set
        !           234:         dtp << ee {expand} map >> m0vec k0 Vtruncate_below /dtp set
        !           235:         dtp (0). eq {
        !           236:           zerolist [eei] join /zerolist set
        !           237:         }{
        !           238:           psi1index [eei] join /psi1index set
        !           239:           psi1 [dtp] join /psi1 set
        !           240:         } ifelse
        !           241:       } for
        !           242:     } for
        !           243:
        !           244: %%(ideg =) messagen ideg ::
        !           245: %%(psi1 obtained.) message
        !           246: %%(Computing psi1ker) message
        !           247:
        !           248: %% Computing psi1ker := Ker psi1 :
        !           249:     psi1 length 0 eq {
        !           250:       [ ] /psi1ker set
        !           251:     }{
        !           252:       psi1 {[[(h). (1).]] replace homogenize} map /psi1 set
        !           253:       [psi1 [(needSyz)]] groebner 2 get /psi1kervec set
        !           254:       psi1kervec length /pn set
        !           255:       psi1index length /pn0 set
        !           256:       [ ] /psi1ker set
        !           257:       0 1 pn 1 sub {/i set
        !           258:         psi1kervec i get /psi1i set
        !           259:         (0). /psi1keri set
        !           260:         0 1 pn0 1 sub {/j set
        !           261:           psi1index j get psi1i j get mul psi1keri add /psi1keri set
        !           262:         } for
        !           263:         psi1ker [ psi1keri [[(h). (1).]] replace ] join /psi1ker set
        !           264:       } for
        !           265:     } ifelse
        !           266:     zerolist psi1ker join /psi1ker set
        !           267: % Is it all right to use reducedBase here?
        !           268: %    psi1ker length 0 eq { }{
        !           269: %      psi1ker reducedBase /psi1ker set
        !           270: %    } ifelse
        !           271: %%(ideg =) messagen ideg ::
        !           272: %%(psi1ker obtained.) message
        !           273: %%(Computing psi2image ...) message
        !           274:
        !           275: %%                                     psi2
        !           276: %% Computes the image of  D_{Y->X}^{r2} -->  D_{Y->X}^{r1} induced by syz
        !           277: %% with weight  k0 - m2vec <= k <= k1 - m2vec
        !           278:     /psi2image [
        !           279:       0 1 r2 1 sub {/i set
        !           280:         o.syz i get {expand [[BFs expand (1).]] replace} map /syzi set
        !           281:         syzi vector_to_poly /syzi set
        !           282:         m2vec i get /m2i set
        !           283:         bfDtt k0 m2i sub k1 m2i sub monomials /bfDttmonoi set
        !           284:         bfDttmonoi length /nmono set
        !           285:         0 1 nmono 1 sub {/j set
        !           286:           bfDttmonoi j get syzi mul /syzij set
        !           287:           0 1 d 1 sub {/k set
        !           288:             syzij [[bftt k get expand (0).]] replace /syzij set
        !           289:             syzij [[bfDtt k get ee k get expand]] replace /syzij set
        !           290:           } for
        !           291:           syzij [[(h). (1).]] replace /syzij set
        !           292:           syzij << ee {expand} map >> m1vec k0 Vtruncate_below /syzij set
        !           293:           syzij (0). eq { }{syzij} ifelse
        !           294:         } for
        !           295:       } for
        !           296:     ] def
        !           297:
        !           298: %(psi2image obtained.) message
        !           299: %(ideg = ) messagen ideg ::
        !           300: %(psi1ker = ) message psi1ker ::
        !           301: %(psi2image =) message psi2image ::
        !           302:
        !           303: %% Computes the quotient module  psi1ker/psi2image
        !           304:     psi1ker length /nker set
        !           305:     nker 0 eq {
        !           306:       [0 [ ]] /cohom set
        !           307:     }{
        !           308:       psi2image length /nim set
        !           309:       psi1ker psi2image join /psiall set
        !           310:       psiall {homogenize} map /psiall set
        !           311:       [psiall [(needSyz)]] groebner 2 get /psisyz set
        !           312:       psisyz {nker proj vector_to_poly [[(h). (1).]] replace} map /cohom set
        !           313:       cohom {remove0} map /cohom set
        !           314:       cohom length 0 eq {
        !           315:         [nker [ ]] /cohom set
        !           316:       }{
        !           317:         cohom {homogenize} map /cohom set
        !           318:         [cohom] groebner 0 get reducedBase /cohom set
        !           319:         cohom {[[(h). (1).]] replace} map /cohom set
        !           320:         [nker cohom] trimModule /cohom set
        !           321:       } ifelse
        !           322:     } ifelse
        !           323:     cohomlist [cohom] join /cohomlist set
        !           324:     0 ideg sub print (-th cohomology:  ) messagen
        !           325:     cohom ::
        !           326:     r1 /r0 set
        !           327:     r2 /r1 set
        !           328:     m1vec /m0vec set
        !           329:     m2vec /m1vec set
        !           330:   } for
        !           331:
        !           332:   cohomlist /arg1 set
        !           333:   ] pop
        !           334:   popVariables
        !           335:   arg1
        !           336: } def
        !           337:
        !           338: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           339: %% The cohomology groups of the restriction without truncation from below
        !           340: %% [(P1)...] [(t1)...] k1 degmax restall
        !           341: %% --> [0-th cohomology -1-th cohomology, ...,-degmax-th cohomology]
        !           342:
        !           343: /restall1_s {
        !           344:   /arg5 set %% degmax
        !           345:   /arg4 set %% k1
        !           346:   /arg2 set %% [(t1) ... (td)]
        !           347:   /arg1 set %% BFequations
        !           348:   [
        !           349:      /ff /bftt /k1 /degmax /syzlist /mveclist /cohomlist
        !           350:      /ideg /gbase /o.syz /m1vec /m2vec /r1 /r2
        !           351:      /i /syzi /j /syzij /maxtmp /max0 /ee /psi1index /zerolist
        !           352:      /psi1 /psi1ker /psi2image
        !           353:      /gbase1 /m1i /emonoi /nmono /bfDttmonoi /eei /dtp /k /psi1kervec
        !           354:      /pn /pn0 /psi1i /psi1keri /m2i /nker /nim /cohm /psiall /psisyz /cohom0
        !           355:      /syz0
        !           356:   ] pushVariables
        !           357:   [
        !           358:     /ff arg1 def  /bftt arg2 def  /k1 arg4 def
        !           359:     /degmax arg5 def
        !           360:     bftt length /d set
        !           361:
        !           362:     (Computing a free resolution ... ) message
        !           363:     Schreyer 2 eq {ff bftt degmax resolution_Sh /syzlist set}{ } ifelse
        !           364:     Schreyer 1 eq {ff bftt degmax resolution_SV /syzlist set}{ } ifelse
        !           365:     Schreyer 0 eq {ff bftt degmax resolution_nsV /syzlist set}{ } ifelse
        !           366:
        !           367:     (A free resolution obtained.) message
        !           368:
        !           369:     BFvarlist /ttxx set
        !           370:     BFparlist /aa set
        !           371:     [BFs] ttxx join aa join /allvarlist set
        !           372:     ttxx length /dn set
        !           373:     ttxx {xtoDx} map /Dttxx set
        !           374:
        !           375:     /BFs_weight
        !           376:       [ [ BFs 1 ]
        !           377:         [ 0 1 dn 1 sub
        !           378:             { /i set Dttxx i get 1 }
        !           379:           for
        !           380:           0 1 dn 1 sub
        !           381:             { /i set ttxx i get 1 }
        !           382:           for ]
        !           383:       ] def
        !           384:
        !           385:     [ allvarlist listtostring ring_of_differential_operators
        !           386:       BFs_weight weight_vector 0 ] define_ring
        !           387:
        !           388: %% Reformatting the free resolution:
        !           389: %%  [[f1,f2,..],[syz1,...]] --> [[[f1],[f2],...],[syz,...]] (strings)
        !           390: %% (to be modified for the case with more than one unknowns.)
        !           391:
        !           392:     Schreyer 0 gt {
        !           393:       /syzlist1 [
        !           394:         syzlist 0 get /syz0 set
        !           395:         %% start N.T.
        !           396:         [BFunknowns syz0 { toString . } map]
        !           397:         toVectors2 { {toString} map } map
        !           398:         %% end N.T.
        !           399:         1 1 degmax {/i set
        !           400:           syzlist 1 get i 1 sub get {toStrings} map
        !           401:         } for
        !           402:       ] def
        !           403:       syzlist1 /syzlist set
        !           404:     }{
        !           405:       /syzlist1 [
        !           406:         syzlist 0 get /syz0 set
        !           407:         [ 0 1 syz0 length 1 sub {/i set
        !           408:           [ syz0 i get (string) dc ]
        !           409:         } for ]
        !           410:         1 1 degmax {/i set
        !           411:           syzlist i get {toStrings} map
        !           412:         } for
        !           413:       ] def
        !           414:       syzlist1 /syzlist set
        !           415:     } ifelse
        !           416:
        !           417:     [ ] /cohomlist set
        !           418:
        !           419: %% Start the loop:
        !           420:   0 1 degmax {/ideg set
        !           421:
        !           422: %(new loop: ) messagen ideg ::
        !           423:
        !           424:     ideg 0 eq {
        !           425:        1 /r0 set
        !           426:        %% N.T.
        !           427:        BFunknowns /r1 set
        !           428:        [ 1 1 BFunknowns { pop [ (0) ]} for ] /gbase set
        !           429:        [ 0 ] /m0vec set
        !           430:        [ 1 1 BFunknowns { pop 0} for  ] /m1vec set
        !           431:        %% end N.T.
        !           432:     }{
        !           433:       syzlist  << ideg 1 sub >> get /gbase set
        !           434:       r0 /r1 set
        !           435:     } ifelse
        !           436:     syzlist     ideg          get /o.syz   set
        !           437:
        !           438: %%                                       o.syz       gbase
        !           439: %%                                D^{r2} --> D^{r1} --> D^{r0}
        !           440: %% with weight vectors:           m2vec      m1vec      m0vec
        !           441: %% which will induce a complex
        !           442: %%                                     psi2              psi1
        !           443: %%                        D_{Y->X}^{r2} --> D_{Y->X}^{r1} --> D_{Y->X}^{r0}
        !           444:
        !           445:     gbase length /r1 set
        !           446:     o.syz length /r2 set
        !           447:
        !           448:   BFmessage {
        !           449:     (m2vec = ) messagen m2vec message
        !           450:     (o.syz = ) messagen o.syz pmat
        !           451:     (m1vec = ) messagen m1vec message
        !           452:     (gbase = ) messagen gbase pmat
        !           453:     (m0vec = ) messagen m0vec message
        !           454:   } { } ifelse
        !           455:
        !           456: %% (Computing the weight vector m2vec from m1vec and syz) message
        !           457:       /m2vec [
        !           458:         0 1 r2 1 sub {/i set
        !           459:           o.syz i get /syzi set
        !           460:           0 /nonzero set
        !           461:           0 1 r1 1 sub {/j set
        !           462:             syzi j get expand /syzij set
        !           463:             syzij (0). eq {  }{
        !           464:               syzij bftt fwh_order  m1vec j get  add /maxtmp set
        !           465:               nonzero 0 eq { maxtmp /max0 set }{
        !           466:                 maxtmp max0 gt { maxtmp /max0 set }{ } ifelse
        !           467:               } ifelse
        !           468:             1 /nonzero set
        !           469:             } ifelse
        !           470:           } for
        !           471:         max0 } for ] def
        !           472:
        !           473: %% ee = [u1,...,ud] corresponds to [Dt1,...,Dtd] (for graduation)
        !           474:     BFu /estr set
        !           475:     /ee
        !           476:       [ 1 1 d {/i set estr i toString 2 cat_n} for ]
        !           477:     def
        !           478:     [@@@.esymbol ] ee join /eee set
        !           479:
        !           480: %%(Setting up a ring that represents D_{Y->X}^{r1}) message
        !           481:     eee length /neee set
        !           482:     /eeemvec [ 1 1 neee {pop 1} for ] def
        !           483:     eee [ ] [BFs] BFvarlist join eeemvec setupDringVshift
        !           484:     bftt {xtoDx expand} map /bfDtt set
        !           485:     [ ] /psi1 set
        !           486:     [ ] /psi1index set
        !           487:     [ ] /zerolist set
        !           488:
        !           489: %%(converting gbase to a list of polynomials) message
        !           490:     /gbase1
        !           491:       [ 0 1 r1 1 sub {/i set
        !           492:           gbase i get {expand [[BFs expand (1).]] replace} map vector_to_poly
        !           493:        } for ] def
        !           494:
        !           495:     gbase1 /gbase set
        !           496:
        !           497: %%(ideg =) messagen ideg ::
        !           498: %%(Computing psi1) message
        !           499: %%                        psi1
        !           500: %% Computes  D_{Y->X}^{r1} -->  D_{Y->X}^{r0} induced by gbase
        !           501: %% with weight  = k <= k1 - m1vec
        !           502:     0 1 r1 1 sub {/i set
        !           503:       m1vec i get /m1i set
        !           504:       ee {expand} map  0  k1 m1i sub monomials /emonoi set
        !           505:       bfDtt  0  k1 m1i sub monomials /bfDttmonoi set
        !           506:       emonoi length /nmono set
        !           507:       0 1 nmono 1 sub {/j set
        !           508:         @@@.esymbol  expand i npower /eei set
        !           509:         emonoi j get eei mul /eei set
        !           510:         gbase i get /dtp set
        !           511:         bfDttmonoi j get dtp mul /dtp set
        !           512:         0 1 d 1 sub {/k set
        !           513:           dtp [[bftt k get expand (0).]] replace /dtp set
        !           514:           dtp [[bfDtt k get  ee k get expand]] replace /dtp set
        !           515:         } for
        !           516:         dtp [[(h). (1).]] replace /dtp set
        !           517:         dtp (0). eq {
        !           518:           zerolist [eei] join /zerolist set
        !           519:         }{
        !           520:           psi1index [eei] join /psi1index set
        !           521:           psi1 [dtp] join /psi1 set
        !           522:         } ifelse
        !           523:       } for
        !           524:     } for
        !           525:
        !           526: %%(ideg =) messagen ideg ::
        !           527: %%(psi1 obtained.) message
        !           528: %%(Computing psi1ker) message
        !           529:
        !           530: %% Computing psi1ker := Ker psi1 :
        !           531:     psi1 length 0 eq {
        !           532:       [ ] /psi1ker set
        !           533:     }{
        !           534:       psi1 {[[(h). (1).]] replace homogenize} map /psi1 set
        !           535:       [psi1 [(needSyz)]] groebner 2 get /psi1kervec set
        !           536:       psi1kervec length /pn set
        !           537:       psi1index length /pn0 set
        !           538:       [ ] /psi1ker set
        !           539:       0 1 pn 1 sub {/i set
        !           540:         psi1kervec i get /psi1i set
        !           541:         (0). /psi1keri set
        !           542:         0 1 pn0 1 sub {/j set
        !           543:           psi1index j get psi1i j get mul psi1keri add /psi1keri set
        !           544:         } for
        !           545:         psi1ker [ psi1keri [[(h). (1).]] replace ] join /psi1ker set
        !           546:       } for
        !           547:     } ifelse
        !           548:     zerolist psi1ker join /psi1ker set
        !           549: % Is it all right to use reducedBase here?
        !           550: %    psi1ker length 0 eq { }{
        !           551: %      psi1ker reducedBase /psi1ker set
        !           552: %    } ifelse
        !           553: %%(ideg =) messagen ideg ::
        !           554: %%(psi1ker obtained.) message
        !           555: %%(Computing psi2image ...) message
        !           556:
        !           557: %%                                     psi2
        !           558: %% Computes the image of  D_{Y->X}^{r2} -->  D_{Y->X}^{r1} induced by syz
        !           559: %% with weight  m2vec <= k <= k1 - m2vec
        !           560:     /psi2image [
        !           561:       0 1 r2 1 sub {/i set
        !           562:         o.syz i get {expand [[BFs expand (1).]] replace} map /syzi set
        !           563:         syzi vector_to_poly /syzi set
        !           564:         m2vec i get /m2i set
        !           565:         bfDtt  0  k1 m2i sub monomials /bfDttmonoi set
        !           566:         bfDttmonoi length /nmono set
        !           567:         0 1 nmono 1 sub {/j set
        !           568:           bfDttmonoi j get syzi mul /syzij set
        !           569:           0 1 d 1 sub {/k set
        !           570:             syzij [[bftt k get expand (0).]] replace /syzij set
        !           571:             syzij [[bfDtt k get ee k get expand]] replace /syzij set
        !           572:           } for
        !           573:           syzij [[(h). (1).]] replace /syzij set
        !           574:           syzij (0). eq { }{syzij} ifelse
        !           575:         } for
        !           576:       } for
        !           577:     ] def
        !           578:
        !           579: %(psi2image obtained.) message
        !           580: %(ideg = ) messagen ideg ::
        !           581: %(psi1ker = ) message psi1ker ::
        !           582: %(psi2image =) message psi2image ::
        !           583:
        !           584: %% Computes the quotient module  psi1ker/psi2image
        !           585:     psi1ker length /nker set
        !           586:     nker 0 eq {
        !           587:       [0 [ ]] /cohom set
        !           588:     }{
        !           589:       psi2image length /nim set
        !           590:       psi1ker psi2image join /psiall set
        !           591:       psiall {homogenize} map /psiall set
        !           592:       [psiall [(needSyz)]] groebner 2 get /psisyz set
        !           593:       psisyz {nker proj vector_to_poly [[(h). (1).]] replace} map /cohom set
        !           594:       cohom {remove0} map /cohom set
        !           595:       cohom length 0 eq {
        !           596:         [nker [ ]] /cohom set
        !           597:       }{
        !           598:         cohom {homogenize} map /cohom set
        !           599:         [cohom] groebner 0 get reducedBase /cohom set
        !           600:         cohom {[[(h). (1).]] replace} map /cohom set
        !           601:         [nker cohom] trimModule /cohom set
        !           602:       } ifelse
        !           603:     } ifelse
        !           604:     cohomlist [cohom] join /cohomlist set
        !           605:     0 ideg sub print (-th cohomology:  ) messagen
        !           606:     cohom ::
        !           607:     r1 /r0 set
        !           608:     r2 /r1 set
        !           609:     m1vec /m0vec set
        !           610:     m2vec /m1vec set
        !           611:   } for
        !           612:
        !           613:   cohomlist /arg1 set
        !           614:   ] pop
        !           615:   popVariables
        !           616:   arg1
        !           617: } def
        !           618:
        !           619: /intall_s {
        !           620:   /arg5 set %% degmax
        !           621:   /arg4 set %% k1
        !           622:   /arg3 set %% k0
        !           623:   /arg2 set %% [(t1) ... (td)]
        !           624:   /arg1 set %% BFequations
        !           625:   [ /ff /bftt /k0 /k1 /degmax /ffdx ] pushVariables
        !           626:   [
        !           627:     /ff arg1 def  /bftt arg2 def  /k0 arg3 def  /k1 arg4 def
        !           628:    /degmax arg5 def
        !           629:     BFvarlist setupDring
        !           630:     ff {bftt fourier} map /ffdx set
        !           631:     ffdx bftt k0 k1 degmax restall_s /arg1 set
        !           632:   ] pop
        !           633:   popVariables
        !           634:   arg1
        !           635: } def
        !           636:
        !           637: /intall1_s {
        !           638:   /arg5 set %% degmax
        !           639:   /arg4 set %% k1
        !           640:   /arg2 set %% [(t1) ... (td)]
        !           641:   /arg1 set %% BFequations
        !           642:   [ /ff /bftt /k1 /degmax /ffdx ] pushVariables
        !           643:   [
        !           644:     /ff arg1 def  /bftt arg2 def  /k0 arg3 def  /k1 arg4 def
        !           645:    /degmax arg5 def
        !           646:     BFvarlist setupDring
        !           647:     ff {bftt fourier} map /ffdx set
        !           648:     ffdx bftt k1 degmax restall1_s /arg1 set
        !           649:   ] pop
        !           650:   popVariables
        !           651:   arg1
        !           652: } def
        !           653:
        !           654: /resolution_Sh {
        !           655:   /arg3 set /arg2 set /arg1 set
        !           656:   [ /tt /ff /deg /ttxx /aa /allvarlist /d /n /m /Dtt /Dxx /xx
        !           657:     /i /V_weight /G
        !           658:   ] pushVariables
        !           659:   [
        !           660:     arg1 /ff set  arg2 /tt set  arg3 /deg set
        !           661:     BFvarlist /ttxx set
        !           662:     BFparlist /aa set
        !           663:     ttxx aa join /allvarlist set
        !           664:     tt length /d set
        !           665:     ttxx tt setminus /xx set
        !           666:     xx length /n set
        !           667:     aa length /m set
        !           668:     tt {xtoDx} map /Dtt set
        !           669:     xx {xtoDx} map /Dxx set
        !           670:
        !           671:     /V_weight [
        !           672:       [ 0 1 d 1 sub {/i set Dtt i get 1} for
        !           673:         0 1 d 1 sub {/i set tt i get -1} for ]
        !           674:       [ 0 1 n 1 sub {/i set Dxx i get 1} for
        !           675:         0 1 n 1 sub {/i set xx i get 1} for ]
        !           676:     ] def
        !           677:
        !           678:     ttxx aa join /allvarlist set
        !           679:
        !           680:     %% start N.T.
        !           681:     ff 0 get isArray {
        !           682:       /BFunknowns ff 0 get length def
        !           683:     } { /BFunknowns 1 def } ifelse
        !           684:     ff 0 get isArray {
        !           685:        ff { {toString} map } map /ff set
        !           686:     }{ ff { toString } map /ff set } ifelse
        !           687:     BFmessage
        !           688:    { (Homogenized ff = ) messagen ff message
        !           689:      (BFvarlist = ) messagen BFvarlist message
        !           690:      (BFparlist = ) messagen BFparlist message
        !           691:      (BFs = ) messagen BFs message
        !           692:     } { } ifelse
        !           693:     %% end N.T.
        !           694:
        !           695:     [ allvarlist listtostring s_ring_of_differential_operators
        !           696:       V_weight s_weight_vector 0 [(schreyer) 1]] define_ring
        !           697:     ff 0 get isArray {
        !           698:       deg ff { {tparse} map } map sResolution /G set
        !           699:     } {
        !           700:       deg ff {tparse} map sResolution /G set
        !           701:     } ifelse
        !           702:     G /arg1 set
        !           703:    ] pop
        !           704:    popVariables
        !           705:    arg1
        !           706: } def
        !           707:
        !           708: /resolution_SV {
        !           709:   /arg3 set /arg2 set /arg1 set
        !           710:   [ /ff /tt /deg /ttxx /aa /allvarlist /xx /dn /Dttxx /BFs_weight /i /G
        !           711:   ] pushVariables
        !           712:   [
        !           713:     arg1 /ff set  arg2 /tt set  arg3 /deg set
        !           714:     BFvarlist /ttxx set
        !           715:     BFparlist /aa set
        !           716:     [BFs] ttxx join aa join /allvarlist set
        !           717:     ttxx tt setminus /xx set
        !           718:     ttxx length /dn set
        !           719:     ttxx {xtoDx} map /Dttxx set
        !           720:
        !           721:     /BFs_weight
        !           722:       [ [ BFs 1 ]
        !           723:         [ 0 1 dn 1 sub
        !           724:             { /i set Dttxx i get 1 }
        !           725:           for
        !           726:           0 1 dn 1 sub
        !           727:             { /i set ttxx i get 1 }
        !           728:           for ]
        !           729:       ] def
        !           730:
        !           731:     %% start N.T.
        !           732:     ff 0 get isArray {
        !           733:       /BFunknowns ff 0 get length def
        !           734:     } { /BFunknowns 1 def } ifelse
        !           735:     [ allvarlist listtostring ring_of_differential_operators
        !           736:       BFs_weight s_weight_vector 0] define_ring
        !           737:     ff 0 get isArray {
        !           738:        ff { {toString .} map
        !           739:             [0 1 BFunknowns 1 sub { /i set @@@.esymbol . i npower } for]
        !           740:             mul toString
        !           741:        } map /ff set
        !           742:     }{ ff { toString } map /ff set } ifelse
        !           743:     ff {tt fwm_homogenize} map /ff set
        !           744:     BFmessage
        !           745:    { (Homogenized ff = ) messagen ff message
        !           746:      (BFvarlist = ) messagen BFvarlist message
        !           747:      (BFparlist = ) messagen BFparlist message
        !           748:      (BFs = ) messagen BFs message
        !           749:     } { } ifelse
        !           750:     %% end N.T.
        !           751:
        !           752:     [ allvarlist listtostring s_ring_of_differential_operators
        !           753:       BFs_weight s_weight_vector 0 [(schreyer) 1]] define_ring
        !           754:
        !           755:     deg ff {tparse [[(h).(1).]] replace } map sResolution /G set
        !           756:
        !           757:     G /arg1 set
        !           758:    ] pop
        !           759:    popVariables
        !           760:    arg1
        !           761: } def
        !           762:
        !           763: %% Computing a free resolution compatible with the V-filtration
        !           764: %% w.r.t. tt
        !           765: /resolution_nsV {
        !           766:   /arg3 set  %% rdegmax
        !           767:   /arg2 set  %% tt
        !           768:   /arg1 set  %% ff
        !           769:   [
        !           770:     /ff /tt /rdegmax /ttxx /xx /aa /dn /d /Dttxx /i /syzlist /rdeg
        !           771:     /allvarlist /gbase /o.syz /gbase1 /syz2 /syz3 /nsyz /syz2i /syz2ij
        !           772:   ] pushVariables
        !           773:   [
        !           774:     arg1 /ff set
        !           775:     arg2 /tt set
        !           776:     arg3 /rdegmax set
        !           777:     BFvarlist /ttxx set
        !           778:     BFparlist /aa set
        !           779:     ttxx tt setminus /xx set
        !           780:     ttxx length /dn set
        !           781:     /allvarlist
        !           782:       [ BFs ] ttxx join aa join
        !           783:     def
        !           784:     ttxx {xtoDx} map /Dttxx set
        !           785:     /BFs_weight
        !           786:       [ [ BFs 1 ]
        !           787:         [ 0 1 dn 1 sub
        !           788:             { /i set Dttxx i get 1 }
        !           789:           for
        !           790:           0 1 dn 1 sub
        !           791:             { /i set ttxx i get 1 }
        !           792:           for ]
        !           793:       ] def
        !           794:     [ allvarlist listtostring ring_of_differential_operators
        !           795:       BFs_weight weight_vector
        !           796:     0] define_ring
        !           797:     BFs expand /bfs set
        !           798:     [ ] /syzlist set
        !           799:
        !           800: %% start the loop (the counter rdeg represents the degree of the resolution)
        !           801:     0 1 rdegmax {/rdeg set
        !           802: %%  From
        !           803: %%                   ff=syz
        !           804: %%  ... <--- D_X^{r0} <--- D_X^{#ff},
        !           805: %%  computes
        !           806: %%                    gbase          syz
        !           807: %%  ... <--- D_X^{r0} <--- D_X^{r1} <--- D_X^{#syz}.
        !           808:
        !           809:       rdeg 0 eq {
        !           810:         1 /r0 set
        !           811:         ff {tt fwm_homogenize expand} map /ff set
        !           812:       }{
        !           813:         r1 /r0 set
        !           814:         o.syz {vector_to_poly} map /ff set
        !           815:       } ifelse
        !           816:
        !           817:       ff {[[(h). (1).]] replace homogenize} map /ff set
        !           818: %% Is it OK to use reducedBase here?
        !           819:       [ff] groebner 0 get {[[(h). (1).]] replace} map /gbase set
        !           820:       gbase reducedBase {homogenize} map /gbase set
        !           821:       [gbase [(needSyz)]] groebner 2 get /o.syz set
        !           822:       gbase length /r1 set
        !           823:
        !           824: %% V-homogenize syz:
        !           825:       gbase {bfs coefficients 0 get 0 get} map /msvec set
        !           826:       o.syz length /nsyz set
        !           827:       o.syz /syz2 set
        !           828:       /syz3 [ 0 1 nsyz 1 sub {/i set
        !           829:         syz2 i get /syz2i set
        !           830:         [ 0 1 r1 1 sub {/j set
        !           831:           syz2i j get /syz2ij set
        !           832:           msvec j get /msj set
        !           833:           syz2ij << bfs msj npower >> mul
        !           834:         } for ]
        !           835:       } for ] def
        !           836:       syz3 /o.syz set
        !           837:
        !           838: %% Comment out % if you want the output to be string lists
        !           839:       gbase {[[(h). (1).]] replace} map /gbase set
        !           840:       rdeg 0 eq {
        !           841: %       gbase toStrings /gbase1 set
        !           842:         gbase /gbase1 set
        !           843:       }{
        !           844: %       gbase r0 n_toVectors {toStrings} map /gbase1 set
        !           845:         gbase r0 n_toVectors /gbase1 set
        !           846:       } ifelse
        !           847:       syzlist [gbase1] join /syzlist set
        !           848:       o.syz length 0 eq {
        !           849:         syzlist [o.syz] join /syzlist set
        !           850:         1 break
        !           851:       }{ } ifelse
        !           852:     } for
        !           853:
        !           854:     syzlist /arg1 set
        !           855:   ] pop
        !           856:   popVariables
        !           857:   arg1
        !           858: } def
        !           859: %%%%%%%%%%%%%%%%%%%%% Utilities %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           860: %% [u1,...] [v1,...] setminus --> [u1,...] \setminus [v1,...]
        !           861: /setminus {
        !           862:   /arg2 set /arg1 set
        !           863:   [ /Set1 /Set2 /n2 /i ] pushVariables
        !           864:   [
        !           865:     arg1 /Set1 set  arg2 /Set2 set
        !           866:     Set2 length /n2 set
        !           867:     0 1 n2 1 sub {/i set
        !           868:        Set1  Set2 i get  complement.oaku /Set1 set
        !           869:     } for
        !           870:     Set1 /arg1 set
        !           871:   ] pop
        !           872:   popVariables
        !           873:   arg1
        !           874: } def
        !           875:
        !           876: %% (list arg1) \setminus {(an element arg2)}
        !           877: /complement.oaku {
        !           878:   /arg2 set /arg1 set
        !           879:   arg1 { arg2 notidentical } map
        !           880: } def
        !           881:
        !           882: /notidentical {
        !           883:   /arg2 set
        !           884:   /arg1 set
        !           885:   arg1 arg2 eq
        !           886:   { } {arg1} ifelse
        !           887: } def
        !           888:
        !           889: %% Convert a polynomial list to a list of vectors of length r
        !           890: %% [(P1).,,,,] r n_toVectors
        !           891: /n_toVectors {
        !           892:   /arg2 set  /arg1 set
        !           893:   [   ] pushVariables
        !           894:   [
        !           895:     arg1 /Ps set
        !           896:     arg2 /r set
        !           897:     Ps length /n set
        !           898:     Ps toVectors /Vecs set
        !           899:     /Vecs1 [ 0 1 n 1 sub {/i set
        !           900:       Vecs i get /Veci set
        !           901:       Veci length /ri set
        !           902:       1 1 r ri sub {pop Veci [(0).] join /Veci set} for
        !           903:       Veci
        !           904:     } for ] def
        !           905:     Vecs1 /arg1 set
        !           906:   ] pop
        !           907:   popVariables
        !           908:   arg1
        !           909: } def
        !           910:
        !           911: /toStrings {
        !           912:   /arg1 set
        !           913:   arg1 {(string) dc} map /arg1 set
        !           914:   arg1
        !           915: } def
        !           916:
        !           917: %% (x1) --> (Dx1)
        !           918: /xtoDx {
        !           919:   /arg1 set
        !           920:   @@@.Dsymbol arg1 2 cat_n
        !           921: } def
        !           922:
        !           923: %% [(x1) (x2) (x3)] ---> (x1,x2,x3)
        !           924: /listtostring {
        !           925:   /arg1 set
        !           926:   [/n /j /ary /str] pushVariables
        !           927:   [
        !           928:     /ary arg1 def
        !           929:     /n ary length def
        !           930:     arg1 0 get /str set
        !           931:     n 1 gt
        !           932:       { str (,) 2 cat_n /str set }{ }
        !           933:     ifelse
        !           934:     1 1 n 1 sub {
        !           935:       /j set
        !           936:       j n 1 sub eq
        !           937:         {str << ary j get >>  2 cat_n /str set}
        !           938:         {str << ary j get >>  (,) 3 cat_n /str set}
        !           939:       ifelse
        !           940:     } for
        !           941:     /arg1 str def
        !           942:   ] pop
        !           943:   popVariables
        !           944:   arg1
        !           945: } def
        !           946:
        !           947: %% FW-homogenization
        !           948: %% Op (string) [(t1) (t2) ...] fw_homogenize ---> h(Op) (string)
        !           949: /fwm_homogenize {
        !           950:   /arg2 set  %% bft (string list)
        !           951:   /arg1 set  %% an operator (string)
        !           952:   [ /bftt /bft /bfDt /bfht /bfhDt /Op /degs /m /mn /d /i ] pushVariables
        !           953:   [
        !           954:     /Op arg1 expand def
        !           955:     /bftt arg2 def
        !           956:     bftt length /d set
        !           957:
        !           958:     0 1 d 1 sub { /i set
        !           959:       bftt i get /bft set
        !           960:       bft xtoDx /bfDt set
        !           961:       BFs (^(-1)*) bft 3 cat_n /bfht set
        !           962:       BFs (*) bfDt 3 cat_n /bfhDt set
        !           963:       Op [[bft expand bfht expand][bfDt expand bfhDt expand]] replace
        !           964:         /Op set
        !           965:     } for
        !           966:     Op BFs expand coefficients 0 get
        !           967:         {(integer) data_conversion} map /degs set
        !           968:     degs << degs length 1 sub >> get /m set
        !           969:     0 m sub /mn set
        !           970:     << BFs expand mn powerZ >> Op mul /Op set
        !           971:     Op (string) data_conversion /arg1 set
        !           972:   ] pop
        !           973:   popVariables
        !           974:   arg1
        !           975: } def
        !           976:
        !           977: %% var (poly) m (integer) ---> var^m (poly)
        !           978: /powerZ {
        !           979:   /arg2 set %% m
        !           980:   /arg1 set %% Var
        !           981:   [ /m /var /varstr /pow /nvar] pushVariables
        !           982:   [
        !           983:     arg1 /var set
        !           984:     arg2 /m set
        !           985:     var (string) data_conversion /varstr set
        !           986:     m -1 gt
        !           987:       { var m npower /pow set}
        !           988:       { varstr (^(-1)) 2 cat_n expand /nvar set
        !           989:         nvar << 0 m sub >> npower /pow set
        !           990:        }
        !           991:     ifelse
        !           992:     pow /arg1 set
        !           993:   ] pop
        !           994:   popVariables
        !           995:   arg1
        !           996: } def
        !           997:
        !           998:
        !           999:
        !          1000: [(restall_s)
        !          1001: [(f v s_0 s_1 level restall_s c)
        !          1002:  (array f; array v; integer s_0, s_1, level; array c)
        !          1003:  (f is a set of generators. v is a set of variables.)
        !          1004:  (s_0 is the minimal integral root of the b-function.)
        !          1005:  (s_1 is the maximal integral root of the b-function.)
        !          1006:  (level is the truncation degree of the resolution.)
        !          1007:  (c is the cohomolgy.)
        !          1008:  (This command is vector clean for Schreyer 1 and 2.)
        !          1009:  (  )
        !          1010:  (Global variables: array BFvarlist : list of variables.)
        !          1011:  (                  array BFparlist : list of parameters.)
        !          1012:  (                  int BFmessage : verbose or not.)
        !          1013:  (                  int Schreyer : Schreyer 1 with tower-sugar.sm1 -- V-homog.)
        !          1014:  (                                 Schreyer 2 with tower.sm1 --- H-homog.)
        !          1015:  (                                 Schreyer 0 is a step by step resolution.)
        !          1016:  (result global var:array BFresolution : resolution matrices.)
        !          1017:  (  )
        !          1018:  (cf. /tower.verbose 1 def /tower-sugar.verbose 1 def )
        !          1019:  (    /debug.sResolution 1 def)
        !          1020:  (       to see steps of resoluitons.)
        !          1021:  $  /Schreyer 2 def  (tower.sm1) run   to try Schreyer 2. Schreyer 2 is default.$
        !          1022:  (See bfm --- b-function, restriction.)
        !          1023:  (restall1_s is as same as restall_s, except it does not truncate from below.)
        !          1024:  (Example 1:  /BFvarlist [(x1) (x2)] def /BFparlist [ ] def)
        !          1025:  (            [(x1) (Dx2-1)] [(x1)] -1 -1 1 restall_s )
        !          1026:  (Example 1a: /BFvarlist [(x1) (x2)] def /BFparlist [ ] def)
        !          1027:  (            [(x1) (Dx2-1)] [(x1)] bfm )
        !          1028:  (Example 2:  /BFvarlist [(x) (y)] def /BFparlist [ ] def)
        !          1029:  $ [[(x Dx -1) (0)] [(y Dy -2) (0)]  [(1) (1)] ] /ff set $
        !          1030:  $ ff [(x) (y)] 0 4 2 restall_s $
        !          1031: ]] putUsages
        !          1032:
        !          1033:
        !          1034: %%%%%%% code for test.
        !          1035:
        !          1036: /test2 {
        !          1037:   [(x) ring_of_differential_operators 0] define_ring
        !          1038:   [(-x*Dx^2-Dx). [(x) (Dx)] laplace0  (-2*x*Dx-2). [(x) (Dx)] laplace0]
        !          1039:    {toString} map  /ff1 set
        !          1040:   [(-x^2*Dx^3+4*x^2*Dx-3*x*Dx^2+4*x*Dx+4*x-Dx+2). [(x) (Dx)] laplace0 (0).]
        !          1041:    {toString} map /ff2 set
        !          1042:   (ff1, ff2, BFresolution ) message
        !          1043:   /BFvarlist [(x)] def /BFparlist [ ] def
        !          1044:   [ff1 ff2] [(x)] 0 4 1 restall_s ::
        !          1045:   [ [ff1 ff2] [(x)] [[(x)] [ ]]] restriction
        !          1046: } def
        !          1047:
        !          1048: /test3 {
        !          1049:   [(x,y) ring_of_differential_operators 0] define_ring
        !          1050:   [(x Dx -1). (0).]
        !          1051:   [(1). @@@.esymbol .] mul toString /ff1 set
        !          1052:   [(y Dy -2). (0).]
        !          1053:   [(1). @@@.esymbol .] mul toString /ff2 set
        !          1054:   [(1). (1).]
        !          1055:   [(1). @@@.esymbol .] mul toString /ff3 set
        !          1056:   (ff1, ff2, ff3, BFresolution ) message
        !          1057:   /BFvarlist [(x) (y)] def
        !          1058:   /BFparlist [ ] def
        !          1059:   [ff1 ff2 ff3] [(x) (y)] 0 2 2 restall_s
        !          1060: } def
        !          1061:
        !          1062: /test {
        !          1063:   [(x,y) ring_of_differential_operators 0] define_ring
        !          1064:   [(x Dx -1) (0)] /ff1 set
        !          1065:   [(y Dy -2) (0)] /ff2 set
        !          1066:   [(1) (1)] /ff3 set
        !          1067:   (ff1, ff2, ff3, BFresolution ) message
        !          1068:   /BFvarlist [(x) (y)] def
        !          1069:   /BFparlist [ ] def
        !          1070:   [ff1 ff2 ff3] [(x) (y)] 0 4 2 restall_s
        !          1071: } def
        !          1072:
        !          1073:
        !          1074:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>