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

Annotation of OpenXM/src/kan96xx/Doc/Old/bfunc.sm1, Revision 1.1

1.1     ! maekawa     1: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !             2: %      The b-function b_f(s),                                      %
        !             3: %      generators of the annihilators of f^s,                      %
        !             4: %      and the 1st algebraic local cohomology group                %
        !             5: %      for f = f(x,y,z)                                            %
        !             6: %                                  18 Dec. 1995  by T. Oaku        %
        !             7: %                        modified  26 Feb. 1996                    %
        !             8: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !             9: 
        !            10: (Type in <<  f bf3 >> for the b-function for f(x,y,z).) message
        !            11: (Type in bf for the b-function for x^3-y^2 z^2.) message
        !            12: (  ) message
        !            13: /bf {(x^3 - y^2*z^2 ) bf3} def
        !            14: %%%%%%%%%%%%% Template to compute b-function for f(x,y,z) %%%%%%%%%%%%
        !            15: /bf3 {
        !            16:   /f set
        !            17:   %%% s is used both for F-homogenization and for tDt %%%%%%%
        !            18:    [(s,t,x,y,z) ring_of_differential_operators
        !            19:     [[(s) 1] ]
        !            20:     weight_vector 0 ] define_ring
        !            21:   %%% GIVE THE POLYNOMIAL f(x,y,z) HERE %%%%%%%%%%%%%%%%%%%%%
        !            22:     f .  /f set
        !            23:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !            24:     f fw_delta /ff set
        !            25:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !            26:    (Computing the b-function of) message 
        !            27:    f ::
        !            28:    (The generators are) message
        !            29:    ff ::
        !            30:    ff {[[(h). (1).]] replace} map {homogenize} map /ff set
        !            31:    (Computing FW-groebner basis in Q[t,x,y,z]<Dt,Dx,Dy,Dz> ) message
        !            32:    [ff] groebner 0 get /ansG set 
        !            33:    (  ) message
        !            34:   %%%%% ansG is an FW-Groebner basis in Q[t,x,y,z]<Dt,Dx,Dy,Dz> %%%%%%
        !            35:    ansG {fw_symbol} map /ansG0 set 
        !            36:    ansG0 {fw_psi} map /ansH set
        !            37:   %%%%  ansH generates an ideal in Q[s,x,y,z]<Dx,Dy,Dz> %%%%%
        !            38:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !            39:    [(s,x,y,z) ring_of_differential_operators
        !            40:     [[(Dx) 1 (Dy) 1 (Dz) 1] ] weight_vector  
        !            41:    0
        !            42:    ] define_ring
        !            43:    ansH {mymap} map /ansH set
        !            44:    ansH {[[(h). (1).]] replace} map {homogenize} map /ansH set
        !            45:    (Eliminating Dx, Dy, Dz  ) message
        !            46:    [ansH] groebner 0 get /ansH set 
        !            47:    (  ) message
        !            48:    ansH (Dx) eliminate0
        !            49:         (Dy) eliminate0
        !            50:         (Dz) eliminate0
        !            51:    /ansH0 set
        !            52:    ansH0 {[[(h). (1).]] replace} map /ansH01 set
        !            53:    ansH0 {[[(s). (-s-1).]] replace} map /ansH0 set
        !            54:    ansH0 minimal /ansH0 set
        !            55: %%%% ansH0 generates an ideal in Q[s,x,y,z] %%%%
        !            56: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !            57:    [(s,x,y,z) ring_of_polynomials 
        !            58:     (x,y,z) elimination_order  0] define_ring 
        !            59:    ansH0 {mymap} map /ansH0 set
        !            60:    ansH0 {[[(x). (0).] [(y). (0).] [(z). (0).]] replace} map /ansH00 set
        !            61:  %%% ansH00 is the restriction of ansH0 to x=y=z=0 %%%
        !            62:    ansH0 {[[(h). (1).]] replace} map {homogenize} map /ansH0 set 
        !            63:    (Eliminating x,y,z ) message
        !            64:    [ansH0] groebner 0 get /ansH0 set 
        !            65:    ansH0 (x) eliminate0
        !            66:          (y) eliminate0
        !            67:          (z) eliminate0
        !            68:    /ansbff set
        !            69:    ansbff minimal /ansbff set
        !            70:    ansbff 0 get /ansbf set
        !            71:    (the global b-function b_f(s) [ansbf] is ) message 
        !            72:    ansbf ::
        !            73:  %%%%%% restriction to x=y=z=0 %%%%%%%%%%%%%%%%% 
        !            74:    ansH00 remove0 /ansH00 set
        !            75:    [(s) ring_of_polynomials 
        !            76:     ( ) elimination_order  0] define_ring 
        !            77:    ansH00 {mymap} map /ansH00 set
        !            78:    ansH00 {[[(h). (1).]] replace} map {homogenize} map /ansH00 set 
        !            79:    [ansH00] groebner 0 get /ansbff0 set
        !            80:    ansbff0 minimal /ansbff0 set
        !            81:    ansbff0  0 get /ansbf0 set
        !            82:    (a divisor of the local b-function b_f(s) [ansbf0] is ) message 
        !            83:    (  ) message
        !            84:    ansbf0 ::
        !            85: } def
        !            86: 
        !            87: %%%%%%%%%%%%% finding a P s.t. Pf^{s+1} = b_f(s)f^s %%%%%%%%%%%%%%%%%%%%%%%
        !            88: 
        !            89: /bf0 {
        !            90:   %%% s is used both for F-homogenization and for tDt %%%%%%%
        !            91:    [(s,t,x,y,z) ring_of_differential_operators
        !            92:     [[(s) 1] [(Dx) 1 (Dy) 1 (Dz) 1 (x) 1 (y) 1 (z) 1]]
        !            93:     weight_vector 0 ] define_ring
        !            94:   %%% Give the polynomial f(x,y,z) here %%%%%%%%%%%%%%%%%%%%%
        !            95:     ( x^5-y^2*z^2 ). /f set
        !            96:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !            97:     f fw_delta /ff set
        !            98:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !            99:    (Computing the b-function of) message 
        !           100:    f ::
        !           101:    (The generators are) message
        !           102:    ff ::
        !           103:    ff {[[(h). (1).]] replace} map {homogenize} map /ff set
        !           104:    (Computing FW-groebner basis in Q[t,x,y,z]<Dt,Dx,Dy,Dz> ) message
        !           105:    [ff] groebner 0 get /ansG set 
        !           106:    ansG {fw_order} map /ansGford set
        !           107:    ansG {[[(h). (1).]] replace} map /ansG set
        !           108:    ansG (Dx) eliminatepsi0
        !           109:         (Dy) eliminatepsi0
        !           110:         (Dz) eliminatepsi0
        !           111:         (x) eliminatepsi0
        !           112:         (y) eliminatepsi0
        !           113:         (z) eliminatepsi0
        !           114:    /ansbft set
        !           115:    ansbft 0 get fw_rhorest /ansP set
        !           116:    (Completed: P is [ansP]) ansP :: 
        !           117:    (F) f toa
        !           118:    (P) ansP toa
        !           119:     ansbft
        !           120:  } def
        !           121: 
        !           122: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           123: % 2nd algorithm for b-function
        !           124: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           125: (Type in bf2 for the b-function via saturation.) message
        !           126: (  ) message
        !           127: /bf2 {
        !           128:   %%% s is used both for F-homogenization and for t*Dt.
        !           129:   %%% u is used for the computation of saturation.
        !           130:    [(s,t,u,x,y,z) ring_of_differential_operators
        !           131:     [[(s) 1 (u) 1]] weight_vector 
        !           132:    0 ] define_ring
        !           133:   %%% Write f(x) here.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           134:    ( y*(x^5- y^2*z^2) ). /f set
        !           135:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           136:    (Computing the b-function of ) message 
        !           137:    f ::  
        !           138:    f  fw_deltasat /ff set
        !           139:    ff print
        !           140:    (  are generators.) message (   ) message
        !           141:    ff {[[(h). (1).]] replace} map {homogenize} map /ff set
        !           142:    (Computing the saturation...) message
        !           143:    [ff] groebner 0 get /ansS set 
        !           144:    (     ) message
        !           145:    ansS {[[(h). (1). ]] replace} map /ansS set
        !           146:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           147:   ansS (s) eliminate0 
        !           148:        (u) eliminate0 
        !           149:   /ansS0 set
        !           150:   ansS0 {fw_psi} map /ansS1 set
        !           151:   ansS1 {[[(s). (-s-1).]] replace} map /ansS1 set
        !           152:   ansS1 [f] concat /ansS1 set
        !           153:   %%%%  ansS1 generates an ideal in Q[s,x,y,z]<Dx,Dy,Dz> %%%%%
        !           154:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           155:    [(s,x,y,z) ring_of_differential_operators
        !           156:     [[(Dx) 1 (Dy) 1 (Dz) 1] [(x) 1 (y) 1 (z) 1]] weight_vector  
        !           157:    0
        !           158:    ] define_ring
        !           159:    ansS1 {mymap} map /ansS1 set
        !           160:    ansS1 {[[(h). (1).]] replace} map {homogenize} map /ansS1 set
        !           161:    (Eliminating Dx, Dy, Dz  ) message
        !           162:    [ansS1] groebner 0 get /ansS1 set 
        !           163:    (  ) message
        !           164:    ansS1 (Dx) eliminate0
        !           165:          (Dy) eliminate0
        !           166:          (Dz) eliminate0
        !           167:    /ansJ set
        !           168: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           169:    [(s,x,y,z) ring_of_polynomials 
        !           170:     (x,y,z) elimination_order  0] define_ring 
        !           171:    ansJ {mymap} map /ansJ set
        !           172:    ansJ {[[(x). (0).] [(y). (0).] [(z). (0).]] replace} map /ansJ0 set
        !           173:  %%% ansJ0 is the restriction of ansJ to x=y=z=0 %%%
        !           174:    ansJ {[[(h). (1).]] replace} map {homogenize} map /ansJ set 
        !           175:    (Eliminating x,y,z ) message
        !           176:    [ansJ] groebner 0 get /ansJ set 
        !           177:    ansJ  (x) eliminate0
        !           178:          (y) eliminate0
        !           179:          (z) eliminate0
        !           180:    /ansbffS set
        !           181:    ansbffS minimal /ansbffS set
        !           182:    ansbffS 0 get /ansbfS set
        !           183:    (the global b-function b_f(s) [ansbfS] is ) message 
        !           184:    ansbfS ::
        !           185:  %%%%%% restriction to x=y=z=0 %%%%%%%%%%%%%%%%% 
        !           186:    ansJ0 remove0 /ansJ0 set
        !           187:    [(s) ring_of_polynomials 
        !           188:     ( ) elimination_order  0] define_ring 
        !           189:    ansJ0 {mymap} map /ansJ0 set
        !           190:    ansJ0 {[[(h). (1).]] replace} map {homogenize} map /ansJ0 set 
        !           191:    [ansJ0] groebner 0 get /ansbffS0 set
        !           192:    ansbffS0 minimal /ansbffS0 set
        !           193:    ansbffS0  0 get /ansbfS0 set
        !           194:    (a divisor of the local b-function b_f(s) [ansbfS0] is ) message 
        !           195:    (  ) message
        !           196:    ansbfS0 ::
        !           197: } def
        !           198: 
        !           199: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           200: (Type in fs for the annihilators of f^s.)  message
        !           201: (  ) message
        !           202: %%%%%%%%%%%%%% Computing the annihilators of f^s %%%%%%%%%%%%%%%%%%%%
        !           203: /fs {
        !           204:   %%% s is used both for F-homogenization and for t*Dt.
        !           205:   %%% u is used for the computation of saturation.
        !           206:    [(s,t,u,x,y,z) ring_of_differential_operators
        !           207:     [[(s) 1 (u) 1]] weight_vector 
        !           208:    0 ] define_ring
        !           209:   %%% Write f(x) here.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           210:    ( y*(x^5-y^2*z^2) ). /f set
        !           211:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           212:    (Computing involutory generators for f^s with f = ) message 
        !           213:    f ::  
        !           214:    f  fw_deltasat /ff set
        !           215:    ff print
        !           216:    (  are generators.) message (   ) message
        !           217:    ff {[[(h). (1).]] replace} map {homogenize} map /ff set
        !           218:    (Computing groebner basis) message
        !           219:    [ff] groebner 0 get /ans set 
        !           220:    (     ) message
        !           221:    ans {[[(h). (1).]] replace} map /ans0 set
        !           222:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           223:   ans0 (s) eliminate0 
        !           224:        (u) eliminate0 
        !           225:   /ans1 set
        !           226:   ans1 {fw_psi} map /ans1 set
        !           227:   ans1 {[[(s). (-s-1).]] replace} map /ans1 set
        !           228:   ans1 involutory /ans2 set
        !           229:   ans2 minimal /ansfs set
        !           230:   (The answer [ansfs] is ) message
        !           231:   ansfs print (  ) message
        !           232:   (F) f toa
        !           233:   (FS) ansfs toa_l
        !           234: } def
        !           235: 
        !           236: %% Computing the D-module for f^s as D-module (not as D[s]-module)
        !           237: /fs0 {
        !           238:   %%% s is used both for F-homogenization and for t*Dt.
        !           239:   %%% u is used for the computation of saturation.
        !           240:    [(s,t,u,x,y,z) ring_of_differential_operators
        !           241:     [[(s) 1 (u) 1]] weight_vector 
        !           242:    0 ] define_ring
        !           243:   %%% Write f(x) here.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           244:    ( y*(x^5-y^2*z^2) ). /f set
        !           245:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           246:    (Computing involutory generators for f^s with f = ) message 
        !           247:    f ::  
        !           248:    f  fw_deltasat /ff set
        !           249:    ff print
        !           250:    (  are generators.) message (   ) message
        !           251:    ff {[[(h). (1).]] replace} map {homogenize} map /ff set
        !           252:    (Computing groebner basis) message
        !           253:    [ff] groebner 0 get /ans set 
        !           254:    (     ) message
        !           255:    ans {[[(h). (1).]] replace} map /ans0 set
        !           256:   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           257:   ans0 (s) eliminate0 
        !           258:        (u) eliminate0 
        !           259:   /ans1 set
        !           260:   ans1 {fw_psi} map /ans1 set
        !           261:   ans1 {[[(s). (-s-1).]] replace} map /ans1 set
        !           262:   
        !           263:   ans1 {[[(h). (1).]] replace} map /ans1 set
        !           264:   ans1 {homogenize} map /ans1 set 
        !           265:   [ans1] groebner 0 get /ans1 set
        !           266:   ans1 {[[(h). (1).]] replace} map /ans1 set
        !           267:   ans1 (s) eliminate0 /ans1 set
        !           268:   ans1 involutory /ans2 set
        !           269:   ans2 minimal /ansfs set
        !           270:   (The answer [ansfs] is ) message
        !           271:   ansfs print (  ) message
        !           272:   (F) f toa
        !           273:   (FS) ansfs toa_l
        !           274: } def
        !           275: 
        !           276: %%%% algebraic local cohomology %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           277: (Type in alc for the 1st algebraic local cohomology group.) message
        !           278: ((Make sure for alc that b_f(s) has no integer roots other than -1.)) message
        !           279: (  ) message
        !           280: /alc {
        !           281:   %%% s is used for FW-filtration.
        !           282:    [(s,t,x,y,z) ring_of_differential_operators
        !           283:     [[(s) 1]] weight_vector  0 ] define_ring
        !           284: %%% give the polynomial f(x,y,z) here %%%%%%%%%%%%%%%%%%%%%%%%
        !           285:   ( x^3 + y^3 + z^3 ). /f set
        !           286: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           287:   f fw_delta /ff set
        !           288: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           289:   (Computing the algebraic local cohomology for) message 
        !           290:   f ::
        !           291:   ff {[[(h). (1).]] replace} map {homogenize} map /ff set
        !           292:   (Computing an FW-groebner basis) message
        !           293:   [ff] groebner 0 get /ansfw set 
        !           294:   (     ) message
        !           295: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           296: % selecting the elements of F-order 0
        !           297: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           298:   /gb ansfw def
        !           299:   gb {fw_order} map /gbford set
        !           300:   
        !           301:   /ansind0 [
        !           302:     0 1 << gb length 1 sub >> {
        !           303:       /n set 
        !           304:       gb n get /ff set
        !           305:       ff fw_order (integer) data_conversion /m set 
        !           306:       << m 2 lt >> 
        !           307:        { << m 1 1 >> {pop ff (Dt). ff mul /ff set } for 
        !           308:        }
        !           309:        {    } ifelse
        !           310:     } for
        !           311:   ] def
        !           312:   ansind0 {[[(h). (1).]] replace} map /ansind0 set
        !           313:   ansind0 {[[(s). (1).]] replace} map /ansind0 set
        !           314:   ansind0 {[[(t). (0).]] replace} map /ansind1 set
        !           315:   ansind1 remove0 /ansind1 set
        !           316:   ansind1 involutory /ansind2 set
        !           317:   ansind2 minimal /ansind set
        !           318:   (The answer [ansind] is ) message
        !           319:   ansind ::
        !           320:   (F) f toa
        !           321:   (ALC) ansind toa_l
        !           322: } def
        !           323: 
        !           324: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           325: %%%% involutory base in K(s)[x,y,z]<Dx,Dy,Dz> 
        !           326: /involutory  {
        !           327:    /ansff0 set
        !           328:    [/ansff1 /ansff2 /ansff3 ] pushVariables
        !           329:    [
        !           330:      [(s,t,x,y,z) ring_of_differential_operators
        !           331:       [[(Dx) 1 (Dy) 1 (Dz) 1] [ (x) 1 (y) 1 (z) 1 ]] weight_vector
        !           332:      0
        !           333:      ] define_ring
        !           334:      ansff0 {mymap} map /ansff1 set
        !           335:      ansff1 {[[(h). (1).]] replace} map {homogenize} map /ansff2 set
        !           336:      (Computing an involutory base ) message
        !           337:      [ansff2] groebner 0 get /ansff3 set
        !           338:      (  ) message
        !           339:      ansff3 {[[(h). (1).]] replace} map /ansff3 set
        !           340:      ansff3 /ansinv set
        !           341:    ] pop
        !           342:    popVariables
        !           343:    ansinv
        !           344: } def
        !           345: 
        !           346: %%%%%% for FW-filtration, etc. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           347: % F-order
        !           348: /fw_order {
        !           349:   fw_symbol /fws set
        !           350:   fws [[(s). (1).]] replace /fws set
        !           351:   fws (Dt). coefficients 0 get 0 get /m set
        !           352:   fws (Dt). coefficients 1 get 0 get /fwsDt set
        !           353:   fwsDt (t). coefficients 0 get 0 get /k set
        !           354:   m k sub
        !           355: } def
        !           356: 
        !           357: % remove 0 elements from a list
        !           358: /remove0 {
        !           359:   /arg1 set
        !           360:   [/gb /ans /n] pushVariables
        !           361:   [
        !           362:   /gb arg1 def
        !           363:   /ans [
        !           364:     0 1 << gb length 1 sub >> {
        !           365:       /n set 
        !           366:       gb n get /ff set
        !           367:       ff (0). eq
        !           368:         {  }
        !           369:         { ff } ifelse
        !           370:     } for
        !           371:   ] def
        !           372:   /arg1 ans def
        !           373:   ] pop
        !           374:   popVariables
        !           375:   arg1
        !           376: } def
        !           377: 
        !           378: % dehomogenize and obtain a minimal base
        !           379: % in variables s,t,x,y,z,Dt,Dx,Dy,Dz 
        !           380: (Note that the current ring changes once you get a minimal base.) message
        !           381: /minimal {
        !           382:   /arg1 set
        !           383:   [/gb /inits /ans /n /syzlist /cc /nin /aa /j /cj] pushVariables
        !           384:   [
        !           385:   /gb arg1 def
        !           386:   /inits gb {init} map def
        !           387:   gb {[[(h). (1).]] replace} map /gb set
        !           388:   [(Dx,Dy,Dz,Dt,t,x,y,z,s) ring_of_polynomials  
        !           389:    (  ) elimination_order  0] define_ring
        !           390:   inits {mymap} map /inits set
        !           391:   gb    {mymap} map /gb    set
        !           392:   inits {[[(h). (1).]] replace} map /inits set
        !           393:   inits length /nin set
        !           394:   [inits [(needBack)]] groebner 1 get /syzlist set
        !           395:   syzlist length ::
        !           396:   /ans [
        !           397:     0 1 << syzlist length 1 sub >> {
        !           398:       /n set
        !           399:       syzlist n get /cc set
        !           400:       (0). /gg set
        !           401:       0 1 << nin 1 sub >> {
        !           402:         /j set
        !           403:         gb j get /aa set
        !           404:         cc j get /cj set
        !           405:         << cj aa mul >> gg add /gg set
        !           406:       } for
        !           407:       gg
        !           408:     } for
        !           409:   ] def
        !           410:   /ansmin ans def
        !           411:   ] pop
        !           412:   popVariables
        !           413:   ansmin 
        !           414: } def
        !           415: 
        !           416: %%%%% The formal symbol %%%%%%%%%%%%%%%%%%%%%%
        !           417: /fw_symbol {
        !           418:   [[(h). (1).]] replace (s). coefficients 1 get 0 get
        !           419: } def
        !           420: 
        !           421: %%%%% psi(P)(s) %%%%%%
        !           422: /fw_psi {
        !           423:   fw_symbol /P set
        !           424:   P fw_order (integer) data_conversion /k set
        !           425:     << 1 1 k >> 
        !           426:     {(t). P mul /P set pop}
        !           427:     for
        !           428:     << -1 -1 k >>
        !           429:     {(Dt). P mul /P set pop}
        !           430:     for 
        !           431:   (0). /Q set
        !           432:   P (Dt). coefficients 0 get length /m set
        !           433:   0 /i set
        !           434:   1 1 m  
        !           435:   {
        !           436:     P (Dt). coefficients 0 get i get /kk set 
        !           437:     P (Dt). coefficients 1 get i get /PPt set
        !           438:     PPt (t). coefficients 1 get 0 get /PPC set
        !           439:     kk (integer) data_conversion /kk set
        !           440:     (s). /Ss set
        !           441:     0 1 << kk 1 sub >> {
        !           442:       PPC Ss mul /PPC set
        !           443:       Ss (1). sub /Ss set
        !           444:       pop
        !           445:     } for
        !           446:     Q PPC add /Q set
        !           447:     i 1 add /i set
        !           448:     pop
        !           449:   } for
        !           450:   Q  
        !           451: } def
        !           452: 
        !           453: /fw_psi0 {
        !           454:   fw_symbol /P set
        !           455:   P fw_order (integer) data_conversion /k set
        !           456:     << 1 1 k >> 
        !           457:     {(t). P mul /P set pop}
        !           458:     for
        !           459:   (0). /Q set
        !           460:   P (Dt). coefficients 0 get length /m set
        !           461:   0 /i set
        !           462:   1 1 m  
        !           463:   {
        !           464:     P (Dt). coefficients 0 get i get /kk set 
        !           465:     P (Dt). coefficients 1 get i get /PPt set
        !           466:     PPt (t). coefficients 1 get 0 get /PPC set
        !           467:     kk (integer) data_conversion /kk set
        !           468:     (s). /Ss set
        !           469:     0 1 << kk 1 sub >> {
        !           470:       PPC Ss mul /PPC set
        !           471:       Ss (1). sub /Ss set
        !           472:       pop
        !           473:     } for
        !           474:     Q PPC add /Q set
        !           475:     i 1 add /i set
        !           476:     pop
        !           477:   } for
        !           478:   Q  
        !           479: } def
        !           480: 
        !           481: %%%%% rho(P)(s) %%%%%%
        !           482: /fw_rho {
        !           483:   /P0 set
        !           484:   P0 fw_order (integer) data_conversion /k set
        !           485:   << 1 1 k >> 
        !           486:     {(t). P0 mul /P0 set}
        !           487:   for
        !           488:   << -1 -1 k >>
        !           489:     {(Dt). P0 mul /P0 set}
        !           490:   for 
        !           491:   P0 (s). coefficients 0 get /sdegs set
        !           492:   sdegs length /n set
        !           493:   sdegs 0 get (integer) data_conversion /k0 set
        !           494:   (0). /PP set 
        !           495:   0 /jj set
        !           496:   0 1 << n 1 sub >>
        !           497:   {
        !           498:     sdegs jj get (integer) data_conversion /kkp set
        !           499:     P0 (s). coefficients 1 get jj get /Pj set
        !           500:     Pj fw_psi0 /Pj set
        !           501:     << 1 1 << k0 kkp sub >> >>    
        !           502:       {Pj f mul /Pj set pop} for
        !           503:     k0 kkp sub  /l set
        !           504:     Pj [[(s). << (-s-1). l . sub >> ]] replace /Pj set
        !           505:     PP Pj add /PP set 
        !           506:     jj 1 add /jj set
        !           507:     pop
        !           508:   } for 
        !           509:   PP [[(h). (1).]] replace /PP set 
        !           510:   pop 
        !           511:   PP
        !           512: } def 
        !           513: 
        !           514: /fw_rhorest {
        !           515:   /P0 set
        !           516:   P0 fw_order (integer) data_conversion /k set
        !           517:   << 1 1 k >> 
        !           518:     {(t). P0 mul /P0 set}
        !           519:   for
        !           520:   << -1 -1 k >>
        !           521:     {(Dt). P0 mul /P0 set}
        !           522:   for 
        !           523:   P0 (s). coefficients 0 get /sdegs set
        !           524:   sdegs length /n set
        !           525:   sdegs 0 get (integer) data_conversion /k0 set
        !           526:   (0). /PP set 
        !           527:   1 /jj set
        !           528:   1 1 << n 1 sub >>
        !           529:   { 
        !           530:     sdegs jj get (integer) data_conversion /kkp set
        !           531:     P0 (s). coefficients 1 get jj get /Pj set
        !           532:     Pj fw_psi0 /Pj set
        !           533:      << 2 1 << k0 kkp sub >> >>    
        !           534:       {Pj f mul /Pj set } for
        !           535:     k0 kkp sub  /l set
        !           536:     Pj [[(s). << (-s-1). l . sub >> ]] replace /Pj set
        !           537:     PP Pj add /PP set
        !           538:     jj 1 add /jj set
        !           539:    } for 
        !           540:   PP [[(h). (1).]] replace /PP set
        !           541:   (-1). PP mul /PP set 
        !           542:   pop 
        !           543:   PP
        !           544: } def 
        !           545: 
        !           546: /fw_rhotest {
        !           547:    [(s,t,x,y,z) ring_of_differential_operators
        !           548:     [[(s) 1] ]
        !           549:     weight_vector 0 ] define_ring
        !           550:     (x^2-y^3). /f set 
        !           551:     (t*Dt^2*s + t*Dt). /Pex  set
        !           552:     Pex fw_rho /PPex set
        !           553:     PPex ::
        !           554: } def 
        !           555: 
        !           556:  %%%%%%%%%%%% [t - s*f, Dx + f_xDt, ...] %%%%%%%%%%%%%%%
        !           557: /fw_delta {
        !           558:   /F set
        !           559:   << (Dx). F mul >> << F (Dx). mul >> sub [[(h). (1).]] replace /Fx set
        !           560:   << (Dy). F mul >> << F (Dy). mul >> sub [[(h). (1).]] replace /Fy set
        !           561:   << (Dz). F mul >> << F (Dz). mul >> sub [[(h). (1).]] replace /Fz set
        !           562:   (t). << (s). F mul >>  sub /F0 set
        !           563:   (Dx). << (s*Dt). Fx mul >> add /Fx set 
        !           564:   (Dy). << (s*Dt). Fy mul >> add /Fy set
        !           565:   (Dz). << (s*Dt). Fz mul >> add /Fz set
        !           566:   [ F0 Fx Fy Fz ]
        !           567: } def
        !           568: 
        !           569:  %%%%%%%%%%%% [1-s*u,t - s*f, Dx + f_xDt, ...] %%%%%%%%%%%%%%%
        !           570: /fw_deltasat {
        !           571:   /F set
        !           572:   << (Dx). F mul >> << F (Dx). mul >> sub [[(h). (1).]] replace /Fx set
        !           573:   << (Dy). F mul >> << F (Dy). mul >> sub [[(h). (1).]] replace /Fy set
        !           574:   << (Dz). F mul >> << F (Dz). mul >> sub [[(h). (1).]] replace /Fz set
        !           575:   (t). << (s). F mul >>  sub /F0 set
        !           576:   (Dx). << (s*Dt). Fx mul >> add /Fx set 
        !           577:   (Dy). << (s*Dt). Fy mul >> add /Fy set
        !           578:   (Dz). << (s*Dt). Fz mul >> add /Fz set
        !           579:   [ F0 Fx Fy Fz (1-s*u). ]
        !           580: } def
        !           581: 
        !           582: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           583: %   convert to a Risa/Asir input file         %
        !           584: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
        !           585: % (Varriable name) expression  toa
        !           586: /toa {
        !           587:   /expr set /Varname set
        !           588:   expr (string) data_conversion /expr set
        !           589:   (toa.t) (a) file /fd set
        !           590:   fd (Dx = dx$ Dy = dy$ Dz = dz$ Dt = dt$) writestring
        !           591:   fd Varname writestring
        !           592:   fd ( = ) writestring
        !           593:   fd expr  writestring
        !           594:   fd ($) writestring
        !           595:   fd ( ) writestring
        !           596:   fd closefile
        !           597: } def
        !           598: 
        !           599: % (Varriable name) expression(list)  toa_l
        !           600: /toa_l {
        !           601:   /expr set /Varname set
        !           602:   (toa.t) (a) file /fd set
        !           603:   fd (Dx = dx$ Dy = dy$ Dz = dz$ Dt = dt$) writestring
        !           604:   fd 10 (string) data_conversion writestring
        !           605:   fd Varname writestring
        !           606:   fd ( = [ ) writestring
        !           607:   fd 10 (string) data_conversion writestring
        !           608:   expr length /n set
        !           609:   0 1 << n 1 sub >> {
        !           610:     /k set
        !           611:     expr k get /expr1 set
        !           612:     expr1 (string) data_conversion /expr1 set
        !           613:     fd expr1  writestring
        !           614:     k << n 1 sub >> eq 
        !           615:       {fd (]$ )  writestring }
        !           616:       {fd ( , )  writestring } 
        !           617:     ifelse 
        !           618:     fd 10 (string) data_conversion writestring
        !           619:   } for  
        !           620:   fd closefile
        !           621: } def
        !           622: 
        !           623: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           624: 
        !           625: /mymap {
        !           626:   (string) data_conversion .
        !           627: } def
        !           628: 
        !           629: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           630: %% [   ] {outputans1} map ;
        !           631: /outputans1 {
        !           632:  (t.t) (a) file /fd set
        !           633:  (string) data_conversion /tmp0 set
        !           634:  fd tmp0 writestring
        !           635:  fd (  ,) writestring
        !           636:  fd 10 (string) data_conversion writestring
        !           637:  fd closefile
        !           638: } def
        !           639: 
        !           640: %%%%%%%% Do not touch the below. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           641: [(position)
        !           642:   [(set element position number)
        !           643:    (Example: [(cat) (dog) (hot chocolate)] (cat) position ===> 0.)
        !           644:   ]
        !           645: ] putUsages
        !           646: /position {
        !           647:   /arg2 set /arg1 set
        !           648:   [/univ /elem /num /flag] pushVariables
        !           649:   [
        !           650:      /univ arg1 def 
        !           651:      /elem arg2 def
        !           652:      /num -1 def /flag -1 def
        !           653:      0 1 << univ length 1 sub >> 
        !           654:      {
        !           655:         /num set
        !           656:         univ num get  elem  eq
        !           657:         { /flag 0 def exit }
        !           658:         {    }
        !           659:         ifelse   
        !           660:      }  for
        !           661:      flag -1 eq
        !           662:      {/num -1 def}
        !           663:      {  }
        !           664:      ifelse
        !           665:   ] pop
        !           666:   /arg1 num def
        !           667:   popVariables
        !           668:   arg1
        !           669: } def
        !           670: 
        !           671: 
        !           672: [(evecw)
        !           673:   [(size position weight evecw  [0 0 ... 0 weight 0 ... 0] )
        !           674:    (Example: 3 0 113 evecw ===> [113  0  0])
        !           675:   ]
        !           676: ] putUsages
        !           677: /evecw {
        !           678:  /arg3 set /arg2 set /arg1 set
        !           679:  [/size /iii /www] pushVariables
        !           680:  /size arg1 def  /iii arg2 def /www arg3 def
        !           681:  [
        !           682:    0 1 << size 1 sub >>
        !           683:    {
        !           684:       iii eq
        !           685:       {  www }
        !           686:       {  0 }
        !           687:       ifelse
        !           688:    } for
        !           689:   ] /arg1 set
        !           690:   popVariables
        !           691:   arg1
        !           692: } def
        !           693: 
        !           694: [(weight_vector)
        !           695:  [ ([x-list d-list params] [[(name) weight ...] [...] ...] weight_vector)
        !           696:    ([x-list d-list params order])
        !           697:    (Example:)
        !           698:    (   [(x,y,z) ring_of_polynomials [[(x) 100 (y) 10]] weight_vector 0] )
        !           699:    (   define_ring )
        !           700:   ]
        !           701: ] putUsages
        !           702: /weight_vector {
        !           703:   /arg2 set  /arg1 set
        !           704:   [/vars /univ /w-vectors /www /k /order1 /order2] pushVariables
        !           705:   /vars arg1 def /w-vectors arg2 def
        !           706:   [
        !           707:     /univ vars 0 get reverse
        !           708:           vars 1 get reverse join
        !           709:     def
        !           710:     [
        !           711:     0 1 << w-vectors length 1 sub >> 
        !           712:     {
        !           713:       /k set
        !           714:       univ w-vectors k get w_to_vec
        !           715:     } for
        !           716:     ] /order1 set
        !           717:     %% order1 ::
        !           718:     
        !           719:     vars ( ) elimination_order 3 get /order2 set
        !           720:     vars [ << order1 order2 join >> ] join /arg1 set
        !           721:   ] pop
        !           722:   popVariables
        !           723:   arg1
        !           724: } def
        !           725: 
        !           726: %% [(e) (x) (y) (h)] [(x) 100 (y) 10] w_to_vec [0 100 10 0]
        !           727: %%  univ              www
        !           728: /w_to_vec {
        !           729:   /arg2 set  /arg1 set
        !           730:   [/univ /www /k /vname /vweight /ans] pushVariables
        !           731:   /univ arg1 def /www arg2 def
        !           732:   [ 
        !           733:     /ans << univ length >> -1 0 evecw def
        !           734:     0  2  << www length 2 sub >>
        !           735:     {
        !           736:       %% ans ::
        !           737:       /k set
        !           738:       www k get /vname set
        !           739:       www << k 1 add >> get /vweight set
        !           740:       << univ length >> 
        !           741:       << univ vname position >>
        !           742:       vweight evecw
        !           743:       ans add /ans set
        !           744:     } for
        !           745:     /arg1 ans def
        !           746:   ] pop
        !           747:   popVariables
        !           748:   arg1
        !           749: } def
        !           750: 
        !           751: 
        !           752: /fw_principal {
        !           753:    {[[(h). (1).]] replace} map {(s). coefficients 1 get 0 get} map
        !           754: } def
        !           755: 
        !           756: 
        !           757: %%%%%%%%%%%%%%%%%%%%%
        !           758: % [g1 g2 g3 ...] var eliminate0
        !           759: /eliminate0 {
        !           760:   /arg2 set /arg1 set
        !           761:   [/gb /degs /ans /n /var] pushVariables
        !           762:   [
        !           763:   /gb arg1 def
        !           764:   /var arg2 def
        !           765:   /degs gb {var . degree} map def
        !           766:   /ans [
        !           767:     0 1 << gb length 1 sub >> {
        !           768:       /n set
        !           769:       << degs n get  >>  0 eq
        !           770:       { gb n get /ff set
        !           771:         ff (0). eq
        !           772:         {  }
        !           773:         { ff } ifelse
        !           774:       }
        !           775:       {   } ifelse
        !           776:     } for
        !           777:   ] def
        !           778:   /arg1 ans def
        !           779:   ] pop
        !           780:   popVariables
        !           781:   arg1
        !           782: } def
        !           783: 
        !           784: % [g1 g2 g3 ...] var eliminate0
        !           785: /eliminatepsi0 {
        !           786:   /arg2 set /arg1 set
        !           787:   [/gb /degs /ans /n /var] pushVariables
        !           788:   [
        !           789:   /gb arg1 def
        !           790:   /var arg2 def
        !           791:   /degs gb {fw_symbol} map {var . degree} map def
        !           792:   /ans [
        !           793:     0 1 << gb length 1 sub >> {
        !           794:       /n set
        !           795:       << degs n get  >>  0 eq
        !           796:       { gb n get /ff set
        !           797:         ff (0). eq
        !           798:         {  }
        !           799:         { ff } ifelse
        !           800:       }
        !           801:       {   } ifelse
        !           802:     } for
        !           803:   ] def
        !           804:   /arg1 ans def
        !           805:   ] pop
        !           806:   popVariables
        !           807:   arg1
        !           808: } def
        !           809: 
        !           810: %%%%%%%%% concatenate two lists %%%%%%% 
        !           811: /concat {
        !           812:   /listB set /listA set
        !           813:   listA length /NA set
        !           814:   listB length /NB set
        !           815:   /listAB [
        !           816:     0 1 << NA 1 sub >> {
        !           817:       /n set
        !           818:       listA n get
        !           819:     } for
        !           820:    0 1 << NB 1 sub >> {
        !           821:       /n set
        !           822:       listB n get
        !           823:     } for
        !           824:   ] def
        !           825:   listAB
        !           826: } def 

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