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

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

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