[BACK]Return to dr.sm1.old1 CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Kan

Annotation of OpenXM/src/kan96xx/Kan/dr.sm1.old1, Revision 1.1

1.1     ! maekawa     1: %% dr.sm1 (Define Ring) 1994/9/25, 26
        !             2:
        !             3: (dr.sm1  Version 10/8/1994. ) message
        !             4: %% n evenQ  bool
        !             5: /evenQ {
        !             6:   /arg1 set
        !             7:   arg1 2 idiv  2 mul arg1 sub 0 eq
        !             8:   { true }
        !             9:   { false } ifelse
        !            10: } def
        !            11:
        !            12: %% (x,y,z) polynomial_ring [x-list, d-list , paramList]
        !            13: /ring_of_polynomials {
        !            14:   /arg1 set
        !            15:   [/vars /n /i /xList /dList /param] pushVariables
        !            16:   %dup print (-----) message
        !            17:   [
        !            18:      (mmLarger) (matrix) switch_function
        !            19:      (mpMult)   (poly) switch_function
        !            20:      (red@)     (module1) switch_function
        !            21:      (groebner) (standard) switch_function
        !            22:
        !            23:      [arg1 to_records pop] /vars set
        !            24:      vars length evenQ
        !            25:      { }
        !            26:      { vars [(PAD)] join /vars set }
        !            27:      ifelse
        !            28:      vars length 2 idiv /n set
        !            29:      [ << n 1 sub >> -1 0
        !            30:           { /i set
        !            31:             vars i get
        !            32:           } for
        !            33:      ] /xList set
        !            34:      [ << n 1 sub >> -1 0
        !            35:           { /i set
        !            36:             vars << i n add >> get
        !            37:           } for
        !            38:      ] /dList set
        !            39:
        !            40:      [(H)] xList join [(e)] join /xList set
        !            41:      [(h)] dList join [(E)] join /dList set
        !            42:      [0 %% dummy characteristic
        !            43:       << xList length >> << xList length >> << xList length >>
        !            44:                                             << xList length >>
        !            45:       << xList length 1 sub >> << xList length >> << xList length >>
        !            46:                                                   << xList length >>
        !            47:      ] /param set
        !            48:
        !            49:      [xList dList param] /arg1 set
        !            50:    ] pop
        !            51:    popVariables
        !            52:    arg1
        !            53: } def
        !            54:
        !            55: %% (x,y,z) polynomial_ring [x-list, d-list , paramList]
        !            56: %% with no graduation and homogenization variables.
        !            57: /ring_of_polynomials2 {
        !            58:   /arg1 set
        !            59:   [/vars /n /i /xList /dList /param] pushVariables
        !            60:   %dup print (-----) message
        !            61:   [
        !            62:      (mmLarger) (matrix) switch_function
        !            63:      (mpMult)   (poly) switch_function
        !            64:      (red@)     (module1) switch_function
        !            65:      (groebner) (standard) switch_function
        !            66:
        !            67:      [arg1 to_records pop] /vars set
        !            68:      vars length evenQ
        !            69:      { }
        !            70:      { vars [(PAD)] join /vars set }
        !            71:      ifelse
        !            72:      vars length 2 idiv /n set
        !            73:      [ << n 1 sub >> -1 0
        !            74:           { /i set
        !            75:             vars i get
        !            76:           } for
        !            77:      ] /xList set
        !            78:      [ << n 1 sub >> -1 0
        !            79:           { /i set
        !            80:             vars << i n add >> get
        !            81:           } for
        !            82:      ] /dList set
        !            83:
        !            84:      [0 %% dummy characteristic
        !            85:       << xList length >> << xList length >> << xList length >>
        !            86:                                             << xList length >>
        !            87:       << xList length >> << xList length >> << xList length >>
        !            88:                                             << xList length >>
        !            89:      ] /param set
        !            90:
        !            91:      [xList dList param] /arg1 set
        !            92:    ] pop
        !            93:    popVariables
        !            94:    arg1
        !            95: } def
        !            96:
        !            97: /ring_of_differential_operators {
        !            98:   /arg1 set
        !            99:   [/vars /n /i /xList /dList /param] pushVariables
        !           100:   [
        !           101:      (mmLarger) (matrix) switch_function
        !           102:      (mpMult)   (diff) switch_function
        !           103:      (red@)     (module1) switch_function
        !           104:      (groebner) (standard) switch_function
        !           105:
        !           106:      [arg1 to_records pop] /vars set %[x y z]
        !           107:      vars reverse /xList set         %[z y x]
        !           108:      vars {(D) 2 1 roll 2 cat_n} map
        !           109:      reverse /dList set              %[Dz Dy Dx]
        !           110:      [(H)] xList join [(e)] join /xList set
        !           111:      [(h)] dList join [(E)] join /dList set
        !           112:      [0 1 1 1 << xList length >>
        !           113:         1 1 1 << xList length 1 sub >> ] /param set
        !           114:      [ xList dList param ] /arg1 set
        !           115:   ] pop
        !           116:   popVariables
        !           117:   arg1
        !           118: } def
        !           119:
        !           120: /ring_of_differential_operators3 {
        !           121: %% with no homogenization variables.
        !           122:   /arg1 set
        !           123:   [/vars /n /i /xList /dList /param] pushVariables
        !           124:   [
        !           125:      (mmLarger) (matrix) switch_function
        !           126:      (mpMult)   (diff) switch_function
        !           127:      (red@)     (module1) switch_function
        !           128:      (groebner) (standard) switch_function
        !           129:
        !           130:      [arg1 to_records pop] /vars set %[x y z]
        !           131:      vars reverse /xList set         %[z y x]
        !           132:      vars {(D) 2 1 roll 2 cat_n} map
        !           133:      reverse /dList set              %[Dz Dy Dx]
        !           134:      xList [(e)] join /xList set
        !           135:      dList [(E)] join /dList set
        !           136:      [0 0 0 0 << xList length >>
        !           137:         0 0 0 << xList length 1 sub >> ] /param set
        !           138:      [ xList dList param ] /arg1 set
        !           139:   ] pop
        !           140:   popVariables
        !           141:   arg1
        !           142: } def
        !           143:
        !           144: /ring_of_q_difference_operators {
        !           145:   /arg1 set
        !           146:   [/vars /n /i /xList /dList /param] pushVariables
        !           147:   [
        !           148:      (mmLarger) (qmatrix) switch_function
        !           149:      (mpMult)   (diff) switch_function
        !           150:      (red@)     (qmodule1) switch_function
        !           151:      (groebner) (standard) switch_function
        !           152:
        !           153:      [arg1 to_records pop] /vars set %[x y z]
        !           154:      vars reverse /xList set         %[z y x]
        !           155:      vars {(Q) 2 1 roll 2 cat_n} map
        !           156:      reverse /dList set              %[Dz Dy Dx]
        !           157:      [(q)] xList join [(e)] join /xList set
        !           158:      [(h)] dList join [(E)] join /dList set
        !           159:      [0 1 << xList length >> << xList length >> << xList length >>
        !           160:         1 << xList length 1 sub >> << xList length >> << xList length >> ]
        !           161:      /param set
        !           162:      [ xList dList param ] /arg1 set
        !           163:   ] pop
        !           164:   popVariables
        !           165:   arg1
        !           166: } def
        !           167:
        !           168: /ring_of_q_difference_operators3 {
        !           169: %% with no homogenization and q variables.
        !           170:   /arg1 set
        !           171:   [/vars /n /i /xList /dList /param] pushVariables
        !           172:   [
        !           173:      (mmLarger) (qmatrix) switch_function
        !           174:      (mpMult)   (diff) switch_function
        !           175:      (red@)     (qmodule1) switch_function
        !           176:      (groebner) (standard) switch_function
        !           177:
        !           178:      [arg1 to_records pop] /vars set %[x y z]
        !           179:      vars reverse /xList set         %[z y x]
        !           180:      vars {(Q) 2 1 roll 2 cat_n} map
        !           181:      reverse /dList set              %[Dz Dy Dx]
        !           182:      xList  [(e)] join /xList set
        !           183:      dList  [(E)] join /dList set
        !           184:      [0 0 << xList length >> << xList length >> << xList length >>
        !           185:         0 << xList length 1 sub >> << xList length >> << xList length >> ]
        !           186:      /param set
        !           187:      [ xList dList param ] /arg1 set
        !           188:   ] pop
        !           189:   popVariables
        !           190:   arg1
        !           191: } def
        !           192:
        !           193: /reverse {
        !           194:   /arg1 set
        !           195:   arg1 length 1 lt
        !           196:   { [ ] }
        !           197:   {
        !           198:     [
        !           199:      <<  arg1 length 1 sub >> -1 0
        !           200:      {
        !           201:         arg1 2 1 roll get
        !           202:       } for
        !           203:      ]
        !           204:    } ifelse
        !           205: } def
        !           206:
        !           207: /memberQ {
        !           208: %% a set0 memberQ bool
        !           209:   /arg2 set  /arg1 set
        !           210:   [/a /set0 /flag /i ] pushVariables
        !           211:   [
        !           212:      /a arg1 def  /set0 arg2 def
        !           213:      /flag 0 def
        !           214:      0 1 << set0 length 1 sub >>
        !           215:      {
        !           216:         /i set
        !           217:         << set0 i get >> a eq
        !           218:         {
        !           219:            /flag 1 def
        !           220:          }
        !           221:         { }
        !           222:         ifelse
        !           223:      } for
        !           224:   ] pop
        !           225:   /arg1 flag def
        !           226:   popVariables
        !           227:   arg1
        !           228: } def
        !           229:
        !           230: /transpose {
        !           231: %% mat transpose  mat2
        !           232:   /arg1 set
        !           233:   [/i /j /m /n /flat /mat] pushVariables
        !           234:   [
        !           235:     /mat arg1 def
        !           236:     /n mat length def
        !           237:     /m mat 0 get length def
        !           238:
        !           239:     [
        !           240:       0 1 << n 1 sub >>
        !           241:       {
        !           242:          /i set
        !           243:          mat i get aload pop
        !           244:       } for
        !           245:     ] /flat set
        !           246:     %% [[1 2] [3 4]] ---> flat == [1 2 3 4]
        !           247:
        !           248:     [
        !           249:        0 1 << m 1 sub >>
        !           250:        {
        !           251:           /i set
        !           252:           [
        !           253:              0 1 << n 1 sub >>
        !           254:              {
        !           255:                 /j set
        !           256:                 flat
        !           257:                 << j m mul >> i add
        !           258:                 get
        !           259:              } for
        !           260:            ]
        !           261:         } for
        !           262:      ] /arg1 set
        !           263:    ] pop
        !           264:    popVariables
        !           265:    arg1
        !           266: } def
        !           267:
        !           268:
        !           269: /getPerm {
        !           270: %% old new getPerm perm
        !           271:   /arg2 set /arg1 set
        !           272:   [/old /new /i /j /p] pushVariables
        !           273:   [
        !           274:     /old arg1 def
        !           275:     /new arg2 def
        !           276:     [
        !           277:         /p old length def
        !           278:         0 1 << p 1 sub >>
        !           279:         {
        !           280:            /i set
        !           281:            0 1 << p 1 sub >>
        !           282:            {
        !           283:               /j set
        !           284:               old i get
        !           285:               new j get
        !           286:               eq
        !           287:               { j }
        !           288:               {   } ifelse
        !           289:             } for
        !           290:          } for
        !           291:      ] /arg1 set
        !           292:    ] pop
        !           293:    popVariables
        !           294:    arg1
        !           295: } def
        !           296:
        !           297: /permuteOrderMatrix {
        !           298: %% order perm puermuteOrderMatrix newOrder
        !           299:   /arg2 set /arg1 set
        !           300:   [/order /perm /newOrder /k ] pushVariables
        !           301:   [
        !           302:     /order arg1 def
        !           303:     /perm arg2 def
        !           304:     order transpose /order set
        !           305:     order 1 copy /newOrder set pop
        !           306:
        !           307:     0 1 << perm length 1 sub >>
        !           308:     {
        !           309:        /k set
        !           310:        newOrder << perm k get >> << order k get >> put
        !           311:     } for
        !           312:     newOrder transpose /newOrder set
        !           313:   ] pop
        !           314:   /arg1 newOrder def
        !           315:   popVariables
        !           316:   arg1
        !           317: } def
        !           318:
        !           319:
        !           320:
        !           321: /complement {
        !           322: %% set0 universe complement compl
        !           323:   /arg2 set /arg1 set
        !           324:   [/set0 /universe /compl /i] pushVariables
        !           325:    /set0 arg1 def  /universe arg2 def
        !           326:   [
        !           327:      0 1 << universe length 1 sub >>
        !           328:      {
        !           329:         /i set
        !           330:         << universe i get >> set0 memberQ
        !           331:         {   }
        !           332:         { universe i get }
        !           333:         ifelse
        !           334:       } for
        !           335:    ] /arg1 set
        !           336:    popVariables
        !           337:    arg1
        !           338: } def
        !           339:
        !           340:
        !           341: %%% from order.sm1
        !           342:
        !           343: %% size i evec [0 0 ... 0 1 0 ... 0]
        !           344: /evec {
        !           345:  /arg2 set /arg1 set
        !           346:  [/size /iii] pushVariables
        !           347:  /size arg1 def  /iii arg2 def
        !           348:  [
        !           349:    0 1 << size 1 sub >>
        !           350:    {
        !           351:       iii eq
        !           352:       {  1 }
        !           353:       {  0 }
        !           354:       ifelse
        !           355:    } for
        !           356:   ] /arg1 set
        !           357:   popVariables
        !           358:   arg1
        !           359: } def
        !           360:
        !           361: %% size i evec_neg [0 0 ... 0 -1 0 ... 0]
        !           362: /evec_neg {
        !           363:  /arg2 set /arg1 set
        !           364:  [/size /iii] pushVariables
        !           365:  /size arg1 def  /iii arg2 def
        !           366:  [
        !           367:    0 1 << size 1 sub >>
        !           368:    {
        !           369:       iii eq
        !           370:       {  -1 }
        !           371:       {  0 }
        !           372:       ifelse
        !           373:    } for
        !           374:   ] /arg1 set
        !           375:   popVariables
        !           376:   arg1
        !           377: } def
        !           378:
        !           379:
        !           380: %% size i j e_ij  << matrix e(i,j) >>
        !           381: /e_ij {
        !           382:   /arg3 set /arg2 set /arg1 set
        !           383:   [/size /k /i /j] pushVariables
        !           384:   [
        !           385:     /size arg1 def  /i arg2 def /j arg3 def
        !           386:     [ 0 1 << size 1 sub >>
        !           387:       {
        !           388:          /k set
        !           389:          k i eq
        !           390:          { size j evec }
        !           391:          {
        !           392:             k j eq
        !           393:             { size i evec }
        !           394:             { size k evec }
        !           395:             ifelse
        !           396:           } ifelse
        !           397:        } for
        !           398:      ] /arg1 set
        !           399:    ] pop
        !           400:    popVariables
        !           401:    arg1
        !           402: } def
        !           403:
        !           404:
        !           405: %% m1 m2 oplus
        !           406: /oplus {
        !           407:   /arg2 set /arg1 set
        !           408:   [/m1 /m2 /n /m  /k ] pushVariables
        !           409:   [
        !           410:     /m1 arg1 def  /m2 arg2 def
        !           411:     m1 length /n set
        !           412:     m2 length /m set
        !           413:     [
        !           414:       0 1 << n m add 1 sub >>
        !           415:       {
        !           416:         /k set
        !           417:         k n lt
        !           418:         {
        !           419:             << m1 k get >> << m -1 evec >> join
        !           420:         }
        !           421:         {
        !           422:             << n -1 evec >> << m2 << k n sub >> get >> join
        !           423:         } ifelse
        !           424:       } for
        !           425:      ] /arg1 set
        !           426:    ] pop
        !           427:    popVariables
        !           428:    arg1
        !           429: } def
        !           430:
        !           431: %%%%%%%%%%%%%%%%%%%%%%%
        !           432:
        !           433: /eliminationOrderTemplate  { %% esize >= 1
        !           434: %% if esize == 0, it returns reverse lexicographic order.
        !           435: %%  m esize eliminationOrderTemplate mat
        !           436:   /arg2 set /arg1 set
        !           437:   [/m  /esize /m1 /m2 /k ] pushVariables
        !           438:   [
        !           439:     /m arg1 def  /esize arg2 def
        !           440:     /m1 m esize sub 1 sub def
        !           441:     /m2 esize 1 sub def
        !           442:      [esize 0 gt
        !           443:       {
        !           444:        [1 1 esize
        !           445:         { pop 1 } for
        !           446:         esize 1 << m 1 sub >>
        !           447:         { pop 0 } for
        !           448:        ]  %% 1st vector
        !           449:       }
        !           450:       { } ifelse
        !           451:
        !           452:       m esize gt
        !           453:       {
        !           454:        [1 1  esize
        !           455:         { pop 0 } for
        !           456:         esize 1 << m 1 sub >>
        !           457:         { pop 1 } for
        !           458:        ]  %% 2nd vector
        !           459:       }
        !           460:       { } ifelse
        !           461:
        !           462:       m1 0 gt
        !           463:       {
        !           464:          m 1 sub -1 << m m1 sub >>
        !           465:          {
        !           466:               /k set
        !           467:               m  k  evec_neg
        !           468:          } for
        !           469:       }
        !           470:       { } ifelse
        !           471:
        !           472:       m2 0 gt
        !           473:       {
        !           474:          << esize 1 sub >> -1 1
        !           475:          {
        !           476:               /k set
        !           477:               m  k  evec_neg
        !           478:          } for
        !           479:       }
        !           480:       { } ifelse
        !           481:
        !           482:     ] /arg1 set
        !           483:    ] pop
        !           484:    popVariables
        !           485:    arg1
        !           486: } def
        !           487:
        !           488:
        !           489: /elimination_order {
        !           490: %% [x-list d-list params]  (x,y,z) elimination_order
        !           491: %%  vars                    evars
        !           492: %% [x-list d-list params order]
        !           493:   /arg2 set  /arg1 set
        !           494:   [/vars /evars /univ /order /perm /univ0 /compl] pushVariables
        !           495:   /vars arg1 def /evars [arg2 to_records pop] def
        !           496:   [
        !           497:     /univ vars 0 get reverse
        !           498:           vars 1 get reverse join
        !           499:     def
        !           500:
        !           501:     << univ length 2 sub >>
        !           502:     << evars length >>
        !           503:     eliminationOrderTemplate /order set
        !           504:
        !           505:     [[1]] order oplus [[1]] oplus /order set
        !           506:
        !           507:     /univ0 [univ reverse aload pop pop] reverse def %% [e,x,y,h] --> [x,y,h]
        !           508:
        !           509:     /compl
        !           510:       [univ 0 get] evars join evars univ0 complement join
        !           511:     def
        !           512:     compl univ
        !           513:     getPerm /perm set
        !           514:     %%perm :: univ :: compl ::
        !           515:
        !           516:     order perm permuteOrderMatrix /order set
        !           517:
        !           518:     vars [order] join /arg1 set
        !           519:   ] pop
        !           520:   popVariables
        !           521:   arg1
        !           522: } def
        !           523:
        !           524: /elimination_order2 {
        !           525: %% [x-list d-list params]  (x,y,z) elimination_order
        !           526: %%  vars                    evars
        !           527: %% [x-list d-list params order]
        !           528: %% with no graduation and homogenization variables.
        !           529:   /arg2 set  /arg1 set
        !           530:   [/vars /evars /univ /order /perm /compl] pushVariables
        !           531:   /vars arg1 def /evars [arg2 to_records pop] def
        !           532:   [
        !           533:     /univ vars 0 get reverse
        !           534:           vars 1 get reverse join
        !           535:     def
        !           536:
        !           537:     << univ length  >>
        !           538:     << evars length >>
        !           539:     eliminationOrderTemplate /order set
        !           540:     /compl
        !           541:       evars << evars univ complement >> join
        !           542:     def
        !           543:     compl univ
        !           544:     getPerm /perm set
        !           545:     %%perm :: univ :: compl ::
        !           546:
        !           547:     order perm permuteOrderMatrix /order set
        !           548:
        !           549:     vars [order] join /arg1 set
        !           550:   ] pop
        !           551:   popVariables
        !           552:   arg1
        !           553: } def
        !           554:
        !           555:
        !           556: /elimination_order3 {
        !           557: %% [x-list d-list params]  (x,y,z) elimination_order
        !           558: %%  vars                    evars
        !           559: %% [x-list d-list params order]
        !           560:   /arg2 set  /arg1 set
        !           561:   [/vars /evars /univ /order /perm /univ0 /compl] pushVariables
        !           562:   /vars arg1 def /evars [arg2 to_records pop] def
        !           563:   [
        !           564:     /univ vars 0 get reverse
        !           565:           vars 1 get reverse join
        !           566:     def
        !           567:
        !           568:     << univ length 1 sub >>
        !           569:     << evars length >>
        !           570:     eliminationOrderTemplate /order set
        !           571:
        !           572:     [[1]] order oplus  /order set
        !           573:
        !           574:     /univ0 [univ reverse aload pop pop] reverse def %% [e,x,y] --> [x,y]
        !           575:
        !           576:     /compl
        !           577:       [univ 0 get] evars join evars univ0 complement join
        !           578:     def
        !           579:     compl univ
        !           580:     getPerm /perm set
        !           581:     %%perm :: univ :: compl ::
        !           582:
        !           583:     order perm permuteOrderMatrix /order set
        !           584:
        !           585:     vars [order] join /arg1 set
        !           586:   ] pop
        !           587:   popVariables
        !           588:   arg1
        !           589: } def
        !           590:
        !           591:
        !           592: /define_ring {
        !           593: %[  (x,y,z) ring_of_polynominals
        !           594: %   (x,y) elimination_order
        !           595: %   17
        !           596: %] define_ring
        !           597:    /arg1 set
        !           598:    [/rp /param /foo] pushVariables
        !           599:    [/rp arg1 def
        !           600:     [
        !           601:       rp 0 get 0 get
        !           602:       rp 0 get 1 get
        !           603:       rp 0 get 2 get /param set
        !           604:       param 0 << rp 1 get >> put
        !           605:       param
        !           606:       rp 0 get 3 get
        !           607:     ]  /foo set
        !           608:     foo aload pop set_up_ring@
        !           609:    ] pop
        !           610:    popVariables
        !           611: } def
        !           612:
        !           613: /defineTests1 {
        !           614: /test {
        !           615:    [[1 2 3]
        !           616:     [0 1 0]
        !           617:     [0 1 2]]
        !           618:    [0 2 1] permuteOrderMatrix ::
        !           619: } def
        !           620:
        !           621: /test2 { (x,y,z) ring_of_polynomials (z,y) elimination_order /ans set } def
        !           622:
        !           623: /test3 {
        !           624:  [ (x,y,z) ring_of_polynomials
        !           625:   (x,y) elimination_order
        !           626:   17
        !           627:  ] define_ring
        !           628: } def
        !           629:
        !           630: /test4 {
        !           631:  [ (x,y,z) ring_of_polynomials
        !           632:   ( ) elimination_order
        !           633:   17
        !           634:  ] define_ring
        !           635: } def
        !           636:
        !           637: } def
        !           638:
        !           639: %% misterious bug  (x,y) miss
        !           640: /miss {
        !           641:   /arg1 set
        !           642:   %[/vars /n /i /xList /dList /param] pushVariables
        !           643:   [/vars /i] pushVariables
        !           644:   [  arg1 print
        !           645:      [arg1 to_records pop] /vars set
        !           646:
        !           647:    ] pop
        !           648:    dup print
        !           649:    popVariables
        !           650:    arg1
        !           651: } def
        !           652:
        !           653:
        !           654: /lexicographicOrderTemplate {
        !           655: % size lexicographicOrderTemplate matrix
        !           656:   /arg1 set
        !           657:   [/k /size] pushVariables
        !           658:   [
        !           659:     /size arg1 def
        !           660:     [ 0 1 << size 1 sub >>
        !           661:       {
        !           662:          /k set
        !           663:          size k evec
        !           664:        } for
        !           665:     ] /arg1 set
        !           666:   ] pop
        !           667:   popVariables
        !           668:   arg1
        !           669: } def
        !           670:
        !           671: /lexicographic_order {
        !           672: %% [x-list d-list params]  (x,y,z) lexicograhic_order
        !           673: %%  vars                    evars
        !           674: %% [x-list d-list params order]
        !           675:   /arg2 set  /arg1 set
        !           676:   [/vars /evars /univ /order /perm /univ0 /compl] pushVariables
        !           677:   /vars arg1 def /evars [arg2 to_records pop] def
        !           678:   [
        !           679:     /univ vars 0 get reverse
        !           680:           vars 1 get reverse join
        !           681:     def
        !           682:
        !           683:     << univ length 2 sub >>
        !           684:     lexicographicOrderTemplate /order set
        !           685:
        !           686:     [[1]] order oplus [[1]] oplus /order set
        !           687:
        !           688:     /univ0 [univ reverse aload pop pop] reverse def %% [e,x,y,h] --> [x,y,h]
        !           689:
        !           690:     /compl
        !           691:       [univ 0 get] evars join evars univ0 complement join
        !           692:     def
        !           693:     compl univ
        !           694:     getPerm /perm set
        !           695:     %%perm :: univ :: compl ::
        !           696:
        !           697:     order perm permuteOrderMatrix /order set
        !           698:
        !           699:     vars [order] join /arg1 set
        !           700:   ] pop
        !           701:   popVariables
        !           702:   arg1
        !           703: } def
        !           704:
        !           705: /lexicographic_order2 {
        !           706: %% [x-list d-list params]  (x,y,z) lexicograhic_order
        !           707: %%  vars                    evars
        !           708: %% [x-list d-list params order]
        !           709: %% with no graduation and homogenization variables
        !           710:   /arg2 set  /arg1 set
        !           711:   [/vars /evars /univ /order /perm /compl] pushVariables
        !           712:   /vars arg1 def /evars [arg2 to_records pop] def
        !           713:   [
        !           714:     /univ vars 0 get reverse
        !           715:           vars 1 get reverse join
        !           716:     def
        !           717:
        !           718:     << univ length  >>
        !           719:     lexicographicOrderTemplate /order set
        !           720:
        !           721:     /compl
        !           722:       evars << evars univ complement >> join
        !           723:     def
        !           724:     compl univ
        !           725:     getPerm /perm set
        !           726:
        !           727:     order perm permuteOrderMatrix /order set
        !           728:
        !           729:     vars [order] join /arg1 set
        !           730:   ] pop
        !           731:   popVariables
        !           732:   arg1
        !           733: } def
        !           734:
        !           735: /lexicographic_order3 {
        !           736: %% [x-list d-list params]  (x,y,z) lexicograhic_order
        !           737: %%  vars                    evars
        !           738: %% [x-list d-list params order]
        !           739: %% with no homogenization variable.
        !           740:   /arg2 set  /arg1 set
        !           741:   [/vars /evars /univ /order /perm /univ0 /compl] pushVariables
        !           742:   /vars arg1 def /evars [arg2 to_records pop] def
        !           743:   [
        !           744:     /univ vars 0 get reverse
        !           745:           vars 1 get reverse join
        !           746:     def
        !           747:
        !           748:     << univ length 1 sub >>
        !           749:     lexicographicOrderTemplate /order set
        !           750:
        !           751:     [[1]] order oplus /order set
        !           752:
        !           753:     /univ0 [univ reverse aload pop pop] reverse def %% [e,x,y] --> [x,y]
        !           754:
        !           755:     /compl
        !           756:       [univ 0 get] evars join evars univ0 complement join
        !           757:     def
        !           758:     compl univ
        !           759:     getPerm /perm set
        !           760:     %%perm :: univ :: compl ::
        !           761:
        !           762:     order perm permuteOrderMatrix /order set
        !           763:
        !           764:     vars [order] join /arg1 set
        !           765:   ] pop
        !           766:   popVariables
        !           767:   arg1
        !           768: } def
        !           769:
        !           770: %%%%%%   add_rings %%%%%%%%%%%%%% 10/5
        !           771:
        !           772:
        !           773: /getX {
        !           774: %% param [1|2|3|4] getX [var-lists]  ;  1->c,2->l,3->m,4->n
        !           775:   /arg2 set /arg1 set
        !           776:   [/k /param /func /low /top] pushVariables
        !           777:   [
        !           778:      /param arg1 def  /func arg2 def
        !           779:      func 1 eq
        !           780:      {
        !           781:        /low 0 def
        !           782:      }
        !           783:      {
        !           784:        /low << param 2 get >> << func 1 sub >> get def
        !           785:      } ifelse
        !           786:      /top << param 2 get >> << func 4 add >> get 1 sub def
        !           787:      [
        !           788:        low 1 top
        !           789:        {
        !           790:            /k set
        !           791:           param 0 get k get
        !           792:         } for
        !           793:      ] /arg1 set
        !           794:   ] pop
        !           795:   popVariables
        !           796:   arg1
        !           797: } def
        !           798:
        !           799: /getD {
        !           800: %% param [1|2|3|4] getD [var-lists]  ;  1->c,2->l,3->m,4->n
        !           801:   /arg2 set /arg1 set
        !           802:   [/k /param /func /low /top] pushVariables
        !           803:   [
        !           804:      /param arg1 def  /func arg2 def
        !           805:      func 1 eq
        !           806:      {
        !           807:        /low 0 def
        !           808:      }
        !           809:      {
        !           810:        /low << param 2 get >> << func 1 sub >> get def
        !           811:      } ifelse
        !           812:      /top << param 2 get >> << func 4 add >> get 1 sub def
        !           813:      [
        !           814:        low 1 top
        !           815:        {
        !           816:            /k set
        !           817:           param 1 get k get
        !           818:         } for
        !           819:      ] /arg1 set
        !           820:   ] pop
        !           821:   popVariables
        !           822:   arg1
        !           823: } def
        !           824:
        !           825: /getXV {
        !           826: %% param [1|2|3|4] getXV [var-lists]  ;  1->c,2->l,3->m,4->n
        !           827:   /arg2 set /arg1 set
        !           828:   [/k /param /func /low /top] pushVariables
        !           829:   [
        !           830:      /param arg1 def  /func arg2 def
        !           831:      /low << param 2 get >> << func 4 add >> get def
        !           832:      /top << param 2 get >>  func get 1 sub def
        !           833:      [
        !           834:        low 1 top
        !           835:        {
        !           836:            /k set
        !           837:           param 0 get k get
        !           838:         } for
        !           839:      ] /arg1 set
        !           840:   ] pop
        !           841:   popVariables
        !           842:   arg1
        !           843: } def
        !           844:
        !           845: /getDV {
        !           846: %% param [1|2|3|4] getDV [var-lists]  ;  1->c,2->l,3->m,4->n
        !           847:   /arg2 set /arg1 set
        !           848:   [/k /param /func /low /top] pushVariables
        !           849:   [
        !           850:      /param arg1 def  /func arg2 def
        !           851:      /low << param 2 get >> << func 4 add >> get def
        !           852:      /top << param 2 get >>  func get 1 sub def
        !           853:      [
        !           854:        low 1 top
        !           855:        {
        !           856:            /k set
        !           857:           param 1 get k get
        !           858:         } for
        !           859:      ] /arg1 set
        !           860:   ] pop
        !           861:   popVariables
        !           862:   arg1
        !           863: } def
        !           864:
        !           865: /reNaming {
        !           866:   %% It also changes oldx2 and oldd2, which are globals.
        !           867:   /arg1 set
        !           868:   [/i /j /new /count /ostr /k] pushVariables
        !           869:   [
        !           870:     /new arg1 def
        !           871:     /count 0 def
        !           872:     0 1 << new length 1 sub >> {
        !           873:        /i set
        !           874:       << i 1 add >> 1 << new length 1 sub >> {
        !           875:           /j set
        !           876:           << new i get >> << new j get >> eq
        !           877:           {
        !           878:              new j get /ostr set
        !           879:              (The two rings have the same name :) messagen
        !           880:              new i get messagen (.) message
        !           881:              (The name ) messagen
        !           882:              new i get messagen ( is changed into ) messagen
        !           883:              new j << new i get << 48 count add $string$ data_conversion >>
        !           884:                       2 cat_n >> put
        !           885:              new j get messagen (.) message
        !           886:              /oldx2 ostr << new j get >> reNaming2
        !           887:              /oldd2 ostr << new j get >> reNaming2
        !           888:              /count count 1 add def
        !           889:            }
        !           890:            { }
        !           891:            ifelse
        !           892:       } for
        !           893:     } for
        !           894:     /arg1 new def
        !           895:   ] pop
        !           896:   popVariables
        !           897:   arg1
        !           898: } def
        !           899:
        !           900: /reNaming2 {
        !           901:   %% array oldString newString reNaming2
        !           902:   %% /aa (x) (y) reNaming2
        !           903:   /arg3 set /arg2 set /arg1 set
        !           904:   [/array /oldString /newString /k] pushVariables
        !           905:   [
        !           906:     /array arg1 def /oldString arg2 def /newString arg3 def
        !           907:       0 1 << array load length 1 sub >>
        !           908:       {
        !           909:          /k set
        !           910:          << array load k get  >> oldString eq
        !           911:          {
        !           912:             array load k newString put
        !           913:           }
        !           914:           { } ifelse
        !           915:       } for
        !           916:    ] pop
        !           917:    popVariables
        !           918: } def
        !           919:
        !           920: /add_rings {
        !           921:   /arg2 set /arg1 set
        !           922:   [/param1 /param2
        !           923:    /newx /newd  /newv
        !           924:    /k /const /od1 /od2 /od
        !           925:    /oldx2 /oldd2  % these will be changed in reNaming.
        !           926:    /oldv
        !           927:   ] pushVariables
        !           928:   [
        !           929:      /param1 arg1 def /param2 arg2 def
        !           930:    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           931:      /newx
        !           932:        [ ]
        !           933:        param2 1 getX join  param1 1 getX join
        !           934:        param2 1 getXV join param1 1 getXV join
        !           935:
        !           936:        param2 2 getX join  param1 2 getX join
        !           937:        param2 2 getXV join param1 2 getXV join
        !           938:
        !           939:        param2 3 getX join  param1 3 getX join
        !           940:        param2 3 getXV join param1 3 getXV join
        !           941:
        !           942:        param2 4 getX join  param1 4 getX join
        !           943:        param2 4 getXV join param1 4 getXV join
        !           944:      def
        !           945:      /newd
        !           946:        [ ]
        !           947:        param2 1 getD join  param1 1 getD join
        !           948:        param2 1 getDV join param1 1 getDV join
        !           949:
        !           950:        param2 2 getD join  param1 2 getD join
        !           951:        param2 2 getDV join param1 2 getDV join
        !           952:
        !           953:        param2 3 getD join  param1 3 getD join
        !           954:        param2 3 getDV join param1 3 getDV join
        !           955:
        !           956:        param2 4 getD join  param1 4 getD join
        !           957:        param2 4 getDV join param1 4 getDV join
        !           958:      def
        !           959:
        !           960:      /newv  newx newd join def
        !           961:      /oldx2 param2 0 get def  /oldd2 param2 1 get def
        !           962:      /oldx2 oldx2 {1 copy 2 1 roll pop} map def
        !           963:      /oldd2 oldd2 {1 copy 2 1 roll pop} map def
        !           964:      /newv newv reNaming def
        !           965:
        !           966:      /newx [
        !           967:        0 1 << newv length 2 idiv 1 sub >>
        !           968:        {
        !           969:           /k set
        !           970:           newv k get
        !           971:        } for
        !           972:      ] def
        !           973:      /newd [
        !           974:        0 1 << newv length 2 idiv 1 sub >>
        !           975:        {
        !           976:           /k set
        !           977:           newv << newv length 2 idiv k add >> get
        !           978:        } for
        !           979:      ] def
        !           980:      /const [
        !           981:         << param1 2 get 0 get >>
        !           982:         << param1 2 get 1 get  param2 2 get 1 get add >>
        !           983:         << param1 2 get 2 get  param2 2 get 2 get add >>
        !           984:         << param1 2 get 3 get  param2 2 get 3 get add >>
        !           985:         << param1 2 get 4 get  param2 2 get 4 get add >>
        !           986:         << param1 2 get 5 get  param2 2 get 5 get add >>
        !           987:         << param1 2 get 6 get  param2 2 get 6 get add >>
        !           988:         << param1 2 get 7 get  param2 2 get 7 get add >>
        !           989:         << param1 2 get 8 get  param2 2 get 8 get add >>
        !           990:     ] def
        !           991:
        !           992:     /od1 param1 3 get def /od2 param2 3 get def
        !           993:     od1 od2 oplus /od set
        !           994:
        !           995:     %%oldx2 :: oldd2 ::
        !           996:     << param1 0 get reverse >> << param1 1 get reverse >> join
        !           997:     << oldx2 reverse >> << oldd2 reverse >> join
        !           998:     join /oldv set
        !           999:
        !          1000:
        !          1001:     od << oldv << newx reverse newd reverse join >> getPerm >>
        !          1002:     permuteOrderMatrix /od set
        !          1003:
        !          1004:      /arg1 [newx newd const od] def
        !          1005:   ] pop
        !          1006:   popVariables
        !          1007:   arg1
        !          1008: } def
        !          1009:
        !          1010:
        !          1011: /test5 {
        !          1012:   (t) ring_of_polynomials ( ) elimination_order /r1 set
        !          1013:   (x) ring_of_differential_operators (Dx) elimination_order /r2 set
        !          1014:   r2 r1 add_rings
        !          1015: } def
        !          1016:
        !          1017: /test6 {
        !          1018:   (H,h) ring_of_polynomials2 (H,h) lexicographic_order2 /r0 set
        !          1019:   (x,y,z) ring_of_polynomials2 (x,y) elimination_order2 /r1 set
        !          1020:   (t) ring_of_differential_operators3 (Dt) elimination_order3 /r2 set
        !          1021:   [r2 r1 add_rings r0 add_rings 0] define_ring
        !          1022: } def
        !          1023:
        !          1024: /test7 {
        !          1025:   (H,h) ring_of_polynomials2 (H,h) lexicographic_order2 /r0 set
        !          1026:   (a,b,c,cp) ring_of_polynomials2 ( ) elimination_order2 /r1 set
        !          1027:   (x,y) ring_of_differential_operators3 (Dx,Dy) elimination_order3 /r2 set
        !          1028:   [r2 r1 add_rings r0 add_rings 0] define_ring
        !          1029:   [(Dx (x Dx + c-1) - (x Dx + y Dy + a) (x Dx + y Dy + b)).
        !          1030:    (Dy (y Dy + cp-1) - (x Dx + y Dy + a) (x Dx + y Dy + b)).] /ff set
        !          1031:   ff {[[$h$. $1$.]] replace} map homogenize /ff set
        !          1032: } def
        !          1033: %%%% end of add_rings
        !          1034:
        !          1035: ;

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