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

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

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

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