Annotation of OpenXM/src/kan96xx/Doc/tower-sugar.sm1, Revision 1.1
1.1 ! maekawa 1: %% tower-sugar.sm1, 1988, 1/21. 1/22. 1/27, 1/29
! 2: %% based on tower.sm1 , Doc/tower-sugar.sm1
! 3: %%
! 4: %% tower-sugar.sm1 is kept in this directory for the compatibility to
! 5: %% old demo programs and packages. It is being merged to
! 6: %% resol0.sm1 cf. r-interface.sm1, tower.sm1, tower-sugar.sm1
! 7: %%
! 8: /tower-sugar.verbose 0 def
! 9: /tower-sugar.version (2.981105) def
! 10: tower-sugar.version [(Version)] system_variable gt
! 11: { (This package requires the latest version of kan/sm1) message
! 12: (Please get it from http://www.math.kobe-u.ac.jp/KAN) message
! 13: error
! 14: } { } ifelse
! 15:
! 16: /debug.res0 0 def
! 17: /debug.sResolution 0 def
! 18: /stat.tower 0 def
! 19: %(tower-sugar-test.sm1) run
! 20: tower-sugar.verbose {
! 21: (Doc/tower-sugar.sm1 is still under construction.) message
! 22: (Never use non-term orders in tower-sugar.sm1) message
! 23: } { } ifelse
! 24:
! 25: [(sResolution)
! 26: [( sResolution constructs the Schreyer resolution.)
! 27: ( depth f sResolution r where )
! 28: ( r = [starting Groebner basis g, [ s1, s2 , s3, ...], order-def].)
! 29: ( g is the reduced Groebner basis for f, )
! 30: ( s1 is the syzygy of g,)
! 31: ( s2 is the syzygy of s1,)
! 32: ( s3 is the syzygy of s2 and so on.)
! 33: (Note that es and ES are reserved for schreyer ordering.)
! 34: (Note also that schreyer order causes troubles for other computations)
! 35: (except sResolution in kan/sm1.)
! 36: (Example:)
! 37: $ [(x,y) s_ring_of_differential_operators$
! 38: $ [[(Dx) 1 ]] s_weight_vector$
! 39: $ 0 [(schreyer) 1]] define_ring$
! 40: $ $
! 41: $ [( x^3-y^2 ) tparse$
! 42: $ ( 2 x Dx + 3 y Dy + 6 ) tparse$
! 43: $ ( 2 y Dx + 3 x^2 Dy) tparse$
! 44: $ ] sResolution /ans set ; $
! 45: $ cf. s_ring_of_differential_operators, s_ring_of_polynomials $
! 46: ]] putUsages
! 47:
! 48: [(sResolutionFrame)
! 49: [( f sResolutionFrame r where )
! 50: ( r = [starting Groebner basis g, [ s1, s2 , s3, ...], order-def].)
! 51: ( g is the reduced Groebner basis for f, )
! 52: ( s1 is the initial syzygy of init(g),)
! 53: ( s2 is the initial syzygy of init(s1),)
! 54: ( s3 is the initial syzygy of init(s2) and so on.)
! 55: (Note that es and ES are reserved for schreyer ordering.)
! 56: (Note also that schreyer order causes troubles for other computations)
! 57: (except sResolution in kan/sm1.)
! 58: (Example:)
! 59: $ [(x,y) s_ring_of_differential_operators$
! 60: $ [[(Dx) 1 ]] s_weight_vector$
! 61: $ 0 [(schreyer) 1]] define_ring$
! 62: $ $
! 63: $ [( x^3-y^2 ) tparse$
! 64: $ ( 2 x Dx + 3 y Dy + 6 ) tparse$
! 65: $ ( 2 y Dx + 3 x^2 Dy) tparse$
! 66: $ ] sResolutionFrame /ans set ; $
! 67: $ cf. s_ring_of_differential_operators, s_ring_of_polynomials $
! 68: ]] putUsages
! 69:
! 70:
! 71: /offTower {
! 72: [(AvoidTheSameRing)] pushEnv
! 73: [ [(AvoidTheSameRing) 0] system_variable %%Do it at your own risk.
! 74: [(gbListTower) [[ ]] (list) dc] system_variable
! 75: ] pop popEnv
! 76: } def
! 77:
! 78:
! 79: /tparse {
! 80: /arg1 set
! 81: [/f /ans /fhead /val] pushVariables
! 82: [
! 83: /f arg1 def
! 84: (report) (mmLarger) switch_function /val set
! 85: f isString { } { f toString /f set } ifelse
! 86: (mmLarger) (matrix) switch_function
! 87: f expand /f set
! 88: [(AvoidTheSameRing)] pushEnv [ [(AvoidTheSameRing) 0] system_variable (mmLarger) (tower) switch_function ] pop popEnv
! 89:
! 90: /ans (0). def
! 91: {
! 92: f (0). eq {exit} { } ifelse
! 93: (mmLarger) (matrix) switch_function
! 94: f init /fhead set f fhead sub /f set
! 95: [(AvoidTheSameRing)] pushEnv [ [(AvoidTheSameRing) 0] system_variable (mmLarger) (tower) switch_function ] pop popEnv
! 96:
! 97: ans fhead add /ans set
! 98: } loop
! 99: (mmLarger) val switch_function
! 100: /arg1 ans def
! 101: ] pop
! 102: popVariables
! 103: arg1
! 104: } def
! 105:
! 106:
! 107: /toes {
! 108: %% [x+2, y x ] ===> x + 2 + y x es (sorted by the schreyer order.)
! 109: /arg1 set
! 110: [/vec] pushVariables
! 111: [
! 112: /vec arg1 def
! 113: vec isPolynomial { /vec [vec] def } { } ifelse
! 114: [(toes) vec] gbext /arg1 set
! 115: ] pop
! 116: popVariables
! 117: arg1
! 118: } def
! 119:
! 120: /toE {
! 121: %% [x+2, y x ] ===> x e + 2 e + y s e (sorted by the schreyer order.)
! 122: /arg1 set
! 123: [/n /vec /oures /i /ppp] pushVariables
! 124: [
! 125: /vec arg1 def
! 126: /oures @@@.esymbol . def
! 127: vec isPolynomial { /vec [vec] def } { } ifelse
! 128: vec isArray
! 129: { } {(error: vec toE, vec must be an array) message error} ifelse
! 130: /n vec length def
! 131: 0 1 n 1 sub
! 132: { /i set
! 133: vec i get oures degree 0 eq
! 134: { }
! 135: {(error: vec toE, vec must not contain the variable e) message error}
! 136: ifelse
! 137: } for
! 138:
! 139: [ 0 1 n 1 sub { /i set oures i power } for ] /ppp set
! 140: %% ppp message
! 141: vec ppp mul /arg1 set
! 142: ] pop
! 143: popVariables
! 144: arg1
! 145: } def
! 146:
! 147: %% See debug/Old/tower-sugar.sm1.19980126 for old res0 and toes
! 148: /res0 {
! 149: /arg1 set
! 150: [/g /t.syz /nexttower /m /t.gb /skel /betti /gg
! 151: /k /i /j /pair /tmp /si /sj /grG /syzAll] pushVariables
! 152: [
! 153: /g arg1 def %% g = [g_1, ..., g_m] g_i does not contain h and es.
! 154: [(Homogenize)] system_variable 1 eq
! 155: { tower-sugar.verbose {
! 156: (Warning: Homogenization and ReduceLowerTerms options are automatically turned off.) message
! 157: } { } ifelse
! 158: [(Homogenize) 0] system_variable
! 159: [(ReduceLowerTerms) 0] system_variable
! 160: } { } ifelse
! 161: g length 0 eq { (error: [ ] argument to res0.) message error } { } ifelse
! 162: g { toes } map /g set
! 163: %% g reducedBase /g set %% Is it OK???
! 164: stat.tower { (Size of g is ) messagen g length messagen } { } ifelse
! 165: stat.tower { (, sizes of each element in g are ) messagen
! 166: g { length } map message } { } ifelse
! 167: debug.res0 {(es expression of g: ) messagen g message } { } ifelse
! 168: stat.tower { (Computing the skelton.) message } { } ifelse
! 169: [(schreyerSkelton) g] gbext /skel set
! 170: /betti skel length def
! 171: stat.tower { (Done. Number of skelton is ) messagen betti message } { } ifelse
! 172:
! 173: debug.res0
! 174: { (init of original g : ) messagen g {init} map message
! 175: (length of skelton ) messagen betti message
! 176: (schreyerSkelton g : ) messagen skel message
! 177: (Doing reduction ) messagen
! 178: } { } ifelse
! 179:
! 180: %(red@) (debug) switch_function
! 181: %show_ring
! 182: %(red@) (module1rev) switch_function
! 183:
! 184: /grG g (gradedPolySet) dc def
! 185: [ 0 1 betti 1 sub { pop 0 } for ] /syzAll set
! 186: 0 1 betti 1 sub {
! 187: % betti 1 sub -1 0 {
! 188: /k set
! 189: [
! 190: /pair skel k get def
! 191: pair 0 get 0 get /i set
! 192: pair 0 get 1 get /j set
! 193: pair 1 get 0 get /si set
! 194: pair 1 get 1 get /sj set
! 195: si g i get mul
! 196: sj g j get mul add
! 197: grG reduction /tmp set % si g[i] + sj g[j] + \sum tmp[2][k] g[k] = 0.
! 198: tmp 0 get (0). eq {
! 199: tower-sugar.verbose {
! 200: (.) messagen [(flush)] extension pop
! 201: } { } ifelse
! 202: }
! 203: {
! 204: (The result of resolution is not zero) message
! 205: ( [i,j], [si,sj] = ) messagen [ [ i j ] [si sj ]] message
! 206: error
! 207: } ifelse
! 208: /t.syz tmp 2 get def
! 209: << tmp 1 get >> si mul << t.syz i get >> add /si set
! 210: << tmp 1 get >> sj mul << t.syz j get >> add /sj set
! 211: t.syz i si put
! 212: t.syz j sj put
! 213: ] pop
! 214: syzAll k t.syz put
! 215: } for
! 216:
! 217: /t.syz syzAll def
! 218: tower-sugar.verbose {
! 219: ( Done. betti=) messagen betti message
! 220: } { } ifelse
! 221:
! 222: %[g] groebner_sugar /t.gb set
! 223:
! 224: % debug.res0
! 225: % {
! 226: % (init of output gbasis : ) print t.gb 0 get {init} map message
! 227: % } { } ifelse
! 228: /nexttower g {init } map def
! 229: /arg1 [t.syz nexttower] def
! 230: %% clear all unnecessary variables to save memory.
! 231: /g 0 def /t.syz 0 def /nexttower 0 def /t.gb 0 def /skel 0 def /gg 0 def
! 232: /k 0 def /tmp 0 def /grG 0 def /syzAll 0 def
! 233: ] pop
! 234: popVariables
! 235: arg1
! 236: } def
! 237:
! 238: %% g [start-index stop-index] res0a
! 239: /res0a {
! 240: /arg2 set
! 241: /arg1 set
! 242: [/g /t.syz /nexttower /m /t.gb /skel /betti /gg
! 243: /k /i /j /pair /tmp /si /sj /grG /syzAll
! 244: /start-index /stop-index] pushVariables
! 245: [
! 246: /g arg1 def %% g = [g_1, ..., g_m] g_i does not contain h and es.
! 247: /start-index arg2 0 get def
! 248: /stop-index arg2 1 get def
! 249: [(Homogenize)] system_variable 1 eq
! 250: { tower-sugar.verbose {
! 251: (Warning: Homogenization and ReduceLowerTerms options are automatically turned off.) message
! 252: } { } ifelse
! 253: [(Homogenize) 0] system_variable
! 254: [(ReduceLowerTerms) 0] system_variable
! 255: } { } ifelse
! 256: g length 0 eq { (error: [ ] argument to res0.) message error } { } ifelse
! 257: g { toes } map /g set
! 258: %% g reducedBase /g set %% Is it OK???
! 259: stat.tower { (Size of g is ) messagen g length messagen } { } ifelse
! 260: stat.tower { (, sizes of each element in g are ) messagen
! 261: g { length } map message } { } ifelse
! 262: debug.res0 {(es expression of g: ) messagen g message } { } ifelse
! 263: stat.tower { (Computing the skelton.) message } { } ifelse
! 264: [(schreyerSkelton) g] gbext /skel set
! 265: /betti skel length def
! 266: stat.tower { (Done. Number of skelton is ) messagen betti message } { } ifelse
! 267:
! 268: debug.res0
! 269: { (init of original g : ) messagen g {init} map message
! 270: (length of skelton ) messagen betti message
! 271: (schreyerSkelton g : ) messagen skel message
! 272: (Doing reduction ) messagen
! 273: } { } ifelse
! 274:
! 275: %(red@) (debug) switch_function
! 276: %show_ring
! 277: %(red@) (module1rev) switch_function
! 278:
! 279: /grG g (gradedPolySet) dc def
! 280: [ 1 1 stop-index start-index sub 1 add { pop 0 } for ] /syzAll set
! 281: start-index 1 stop-index {
! 282: /k set
! 283: [
! 284: /pair skel k get def
! 285: pair 0 get 0 get /i set
! 286: pair 0 get 1 get /j set
! 287: pair 1 get 0 get /si set
! 288: pair 1 get 1 get /sj set
! 289: si g i get mul
! 290: sj g j get mul add
! 291: grG reduction /tmp set % si g[i] + sj g[j] + \sum tmp[2][k] g[k] = 0.
! 292: tmp 0 get (0). eq {
! 293: tower-sugar.verbose {
! 294: (.) messagen [(flush)] extension pop
! 295: } { } ifelse
! 296: }
! 297: {
! 298: (The result of resolution is not zero) message
! 299: ( [i,j], [si,sj] = ) messagen [ [ i j ] [si sj ]] message
! 300: error
! 301: } ifelse
! 302: /t.syz tmp 2 get def
! 303: << tmp 1 get >> si mul << t.syz i get >> add /si set
! 304: << tmp 1 get >> sj mul << t.syz j get >> add /sj set
! 305: t.syz i si put
! 306: t.syz j sj put
! 307: ] pop
! 308: syzAll << k start-index sub >> t.syz put
! 309: } for
! 310:
! 311: /t.syz syzAll def
! 312: ( Done. computed/betti=) messagen
! 313: stop-index start-index sub 1 add messagen (/) messagen
! 314: betti message
! 315:
! 316: /nexttower g {init} map def
! 317: /arg1 [t.syz nexttower] def
! 318: ] pop
! 319: popVariables
! 320: arg1
! 321: } def
! 322:
! 323: /hToOne {
! 324: /arg1 set
! 325: [/f /ans] pushVariables
! 326: [
! 327: /f arg1 def
! 328: f isArray {
! 329: /ans f {hToOne} map def
! 330: }
! 331: { /ans f [[(h). (1).]] replace
! 332: toString tparse %% deHomogenization may destroy the order.
! 333: def } ifelse
! 334: /arg1 ans def
! 335: ] pop
! 336: popVariables
! 337: arg1
! 338: } def
! 339:
! 340:
! 341: /sResolution_tmp {
! 342: (Argument to sResolution ) message
! 343: print
! 344: ( ) message
! 345: print
! 346: ( ) message
! 347: (Stop by the error operator) message
! 348: error
! 349: } def
! 350:
! 351: /sResolution {
! 352: /arg1 set
! 353: /arg2 set %% optional parameter.
! 354: [/g /gbTower /ans /ff /opt /count /startingGB /opts] pushVariables
! 355: [ /g arg1 def
! 356: /opt arg2 def
! 357:
! 358: setupEnvForResolution-sugar %% options are saved in "opts" here.
! 359:
! 360: stat.tower { [(Statistics) 1] system_variable } { } ifelse
! 361: /count -1 def
! 362: %% optional parameter.
! 363: opt isInteger {
! 364: /count opt def
! 365: } { } ifelse
! 366:
! 367: (mmLarger) (matrix) switch_function
! 368: tower-sugar.verbose {
! 369: (tower-sugar : The input ) message
! 370: [g {sHomogenize} map ] message
! 371: } { } ifelse
! 372:
! 373: [g {sHomogenize} map ] groebner_sugar 0 get hToOne reducedBase /g set
! 374: /startingGB g def
! 375: debug.sResolution
! 376: {
! 377: (g is ) messagen g message
! 378: (---------------------------------------------------) message
! 379: } { } ifelse
! 380: /ans [ ] def
! 381: % /gbTower [g {init} map ] def
! 382: /gbTower [ ] def
! 383: [(AvoidTheSameRing)] pushEnv [ [(AvoidTheSameRing) 0] system_variable (mmLarger) (tower) switch_function ] pop popEnv
! 384:
! 385: {
! 386: g res0 /ff set
! 387: ans ff 0 get append /ans set %% store the syzygy.
! 388: debug.sResolution
! 389: {
! 390: (Syzygy : ) messagen ff 0 get message
! 391: (----------------------------------------------------) message
! 392: } { } ifelse
! 393: [ff 1 get] gbTower join /gbTower set
! 394: /g ff 0 get def
! 395: g length 0 eq { exit } { } ifelse
! 396:
! 397: [(AvoidTheSameRing)] pushEnv
! 398: [ [(AvoidTheSameRing) 0] system_variable
! 399: [(gbListTower) gbTower (list) dc] system_variable
! 400: ] pop popEnv
! 401: count 0 eq { (Resolution procedure stoped because counter == 0.) message
! 402: exit }
! 403: { } ifelse
! 404: count 1 sub /count set
! 405:
! 406:
! 407: } loop
! 408:
! 409: restoreEnvAfterResolution-sugar
! 410:
! 411: /arg1 [startingGB ans gbTower] def
! 412: ] pop
! 413: popVariables
! 414: arg1
! 415: } def
! 416:
! 417: /sHomogenize {
! 418: /arg1 set
! 419: [/ff ] pushVariables
! 420: [
! 421: /ff arg1 def
! 422: ff isArray {
! 423: ff {toString tparse} map
! 424: /arg1 set
! 425: } {
! 426: ff %% homogenize %% we do not homogenize.
! 427: toString tparse %% homogenization may destroy the order.
! 428: %% cf. 97feb4.txt 1997, 10/29
! 429: /arg1 set
! 430: } ifelse
! 431: ] pop
! 432: popVariables
! 433: arg1
! 434: } def
! 435:
! 436:
! 437:
! 438:
! 439:
! 440: /s_ring_of_differential_operators {
! 441: /arg1 set
! 442: [/vars /n /i /xList /dList /param] pushVariables
! 443: [
! 444: (mmLarger) (matrix) switch_function
! 445: (mpMult) (diff) switch_function
! 446: (red@) (module1) switch_function
! 447: (groebner) (standard) switch_function
! 448: (isSameComponent) (x) switch_function
! 449:
! 450: [arg1 to_records pop] /vars set %[x y z]
! 451: vars reverse /xList set %[z y x]
! 452: vars {@@@.Dsymbol 2 1 roll 2 cat_n} map
! 453: reverse /dList set %[Dz Dy Dx]
! 454: [(H)] xList join [(es) @@@.esymbol ] join /xList set
! 455: %% You cannot change the order of es and e, because
! 456: %% mmLarger_tower automatically assumes es is at the bottom
! 457: %% of [nn,n-1] variables.
! 458: [(h)] dList join [(ES) @@@.Esymbol ] join /dList set
! 459: [0 1 1 1 << xList length >>
! 460: 1 1 1 << xList length 2 sub >> ] /param set
! 461: [ xList dList param ] /arg1 set
! 462: ] pop
! 463: popVariables
! 464: arg1
! 465: } def
! 466:
! 467: /s_weight_vector {
! 468: /arg2 set /arg1 set
! 469: [/vars /univ /w-vectors /www /k /order1 /order2] pushVariables
! 470: /vars arg1 def /w-vectors arg2 def
! 471: [
! 472: /univ vars 0 get reverse
! 473: vars 1 get reverse join
! 474: def
! 475: [
! 476: 0 1 << w-vectors length 1 sub >>
! 477: {
! 478: /k set
! 479: univ w-vectors k get w_to_vec
! 480: } for
! 481: ] /order1 set
! 482: %% order1 ::
! 483:
! 484: vars s_reverse_lex_order 3 get /order2 set
! 485: vars [ << order1 order2 join >> ] join /arg1 set
! 486: ] pop
! 487: popVariables
! 488: arg1
! 489: } def
! 490:
! 491: /s_reverse_lex_order {
! 492: %% [x-list d-list params] elimination_order
! 493: %% vars
! 494: %% [x-list d-list params order]
! 495: /arg1 set
! 496: [/vars /univ /order /perm /univ0 /compl] pushVariables
! 497: /vars arg1 def
! 498: [
! 499: /univ vars 0 get reverse
! 500: vars 1 get reverse join
! 501: def
! 502:
! 503: << univ length 3 sub >>
! 504: 0
! 505: eliminationOrderTemplate /order set
! 506:
! 507: [[1]] [[1]] oplus order oplus [[1]] oplus /order set
! 508:
! 509: vars [order] join /arg1 set
! 510: ] pop
! 511: popVariables
! 512: arg1
! 513: } def
! 514:
! 515:
! 516: /sResolutionFrame {
! 517: /arg1 set
! 518: /arg2 set %% optional parameter.
! 519: [/g /gbTower /ans /ff /opt /count /startingGB /opts] pushVariables
! 520: [ /g arg1 def
! 521: /opt arg2 def
! 522:
! 523: setupEnvForResolution-sugar
! 524:
! 525: stat.tower { [(Statistics) 1] system_variable } { } ifelse
! 526: /count -1 def
! 527: %% optional parameter.
! 528: opt isInteger {
! 529: /count opt def
! 530: } { } ifelse
! 531:
! 532: (mmLarger) (matrix) switch_function
! 533: [g {sHomogenize} map ] groebner_sugar 0 get hToOne reducedBase /g set
! 534: g { init } map /g set
! 535: /startingGB g def
! 536: debug.sResolution
! 537: {
! 538: (g is ) messagen g message
! 539: (---------------------------------------------------) message
! 540: } { } ifelse
! 541: /ans [ ] def
! 542: % /gbTower [g {init} map ] def
! 543: /gbTower [ ] def
! 544: [(AvoidTheSameRing)] pushEnv [ [(AvoidTheSameRing) 0] system_variable (mmLarger) (tower) switch_function ] pop popEnv
! 545:
! 546: {
! 547: g res0Frame /ff set
! 548: ans ff 0 get append /ans set %% store the syzygy.
! 549: debug.sResolution
! 550: {
! 551: (Syzygy : ) messagen ff 0 get message
! 552: (----------------------------------------------------) message
! 553: } { } ifelse
! 554: [ff 1 get] gbTower join /gbTower set
! 555: /g ff 0 get def
! 556: g length 0 eq { exit } { } ifelse
! 557:
! 558: [(AvoidTheSameRing)] pushEnv
! 559: [ [(AvoidTheSameRing) 0] system_variable
! 560: [(gbListTower) gbTower (list) dc] system_variable
! 561: ] pop popEnv
! 562:
! 563: count 0 eq { (Resolution prodecure stoped because counter == 0.) message
! 564: exit }
! 565: { } ifelse
! 566: count 1 sub /count set
! 567:
! 568:
! 569: } loop
! 570:
! 571: restoreEnvAfterResolution-sugar
! 572:
! 573: /arg1 [startingGB ans gbTower] def
! 574: ] pop
! 575: popVariables
! 576: arg1
! 577: } def
! 578:
! 579: /newPolyVector {
! 580: /arg1 set
! 581: /arg2 (0). def
! 582: [ 1 1 arg1 { pop arg2 } for ]
! 583: } def
! 584:
! 585: /res0Frame {
! 586: /arg1 set
! 587: [/g /t.syz /nexttower /m /t.gb /skel /betti /gg
! 588: /k /i /j /pair /tmp /si /sj /grG /syzAll /gLength] pushVariables
! 589: [
! 590: /g arg1 def %% g = [g_1, ..., g_m] g_i does not contain h and es.
! 591: [(Homogenize)] system_variable 1 eq
! 592: { tower-sugar.verbose {
! 593: (Warning: Homogenization and ReduceLowerTerms options are automatically turned off.) message
! 594: } { } ifelse
! 595: [(Homogenize) 0] system_variable
! 596: [(ReduceLowerTerms) 0] system_variable
! 597: } { } ifelse
! 598: g length 0 eq { (error: [ ] argument to res0.) message error } { } ifelse
! 599: g { toes } map /g set
! 600: stat.tower { (Size of g is ) messagen g length messagen } { } ifelse
! 601: stat.tower { (, sizes of each element in g are ) messagen
! 602: g { length } map message } { } ifelse
! 603: debug.res0 {(es expression of g: ) messagen g message } { } ifelse
! 604: stat.tower { (Computing the skelton.) message } { } ifelse
! 605: [(schreyerSkelton) g] gbext /skel set
! 606: /betti skel length def
! 607: stat.tower { (Done. Number of skelton is ) messagen betti message } { } ifelse
! 608:
! 609: debug.res0
! 610: { (init of original g : ) messagen g {init} map message
! 611: (length of skelton ) messagen betti message
! 612: (schreyerSkelton g : ) messagen skel message
! 613: (Doing reduction ) messagen
! 614: } { } ifelse
! 615:
! 616: g length /gLength set
! 617: /grG g (gradedPolySet) dc def
! 618: [ 0 1 betti 1 sub { pop 0 } for ] /syzAll set
! 619: 0 1 betti 1 sub {
! 620: /k set
! 621: [
! 622: /pair skel k get def
! 623: pair 0 get 0 get /i set
! 624: pair 0 get 1 get /j set
! 625: pair 1 get 0 get /si set
! 626: pair 1 get 1 get /sj set
! 627: % si g[i] + sj g[j] + \sum tmp[2][k] g[k] = 0.
! 628: tower-sugar.verbose {
! 629: (.) messagen [(flush)] extension pop
! 630: } ifelse
! 631:
! 632: /t.syz gLength newPolyVector def
! 633: t.syz i si put
! 634: t.syz j sj put
! 635: ] pop
! 636: syzAll k t.syz put
! 637: } for
! 638:
! 639: /t.syz syzAll def
! 640: tower-sugar.verbose {
! 641: ( Done. betti=) messagen betti message
! 642: } { } ifelse
! 643:
! 644:
! 645: /nexttower g {init } map def
! 646: /arg1 [t.syz nexttower] def
! 647: %% clear all unnecessary variables to save memory.
! 648: /g 0 def /t.syz 0 def /nexttower 0 def /t.gb 0 def /skel 0 def /gg 0 def
! 649: /k 0 def /tmp 0 def /grG 0 def /syzAll 0 def
! 650: ] pop
! 651: popVariables
! 652: arg1
! 653: } def
! 654:
! 655: /s_ring_of_polynomials {
! 656: /arg1 set
! 657: [/vars /n /i /xList /dList /param] pushVariables
! 658: [
! 659: (mmLarger) (matrix) switch_function
! 660: (mpMult) (poly) switch_function
! 661: (red@) (module1) switch_function
! 662: (groebner) (standard) switch_function
! 663: (isSameComponent) (x) switch_function
! 664:
! 665: [arg1 to_records pop] /vars set
! 666: vars length evenQ
! 667: { }
! 668: { vars [(PAD)] join /vars set }
! 669: ifelse
! 670: vars length 2 idiv /n set
! 671: [ << n 1 sub >> -1 0
! 672: { /i set
! 673: vars i get
! 674: } for
! 675: ] /xList set
! 676: [ << n 1 sub >> -1 0
! 677: { /i set
! 678: vars << i n add >> get
! 679: } for
! 680: ] /dList set
! 681:
! 682: [(H)] xList join [(es) @@@.esymbol ] join /xList set
! 683: %% You cannot change the order of es and e, because
! 684: %% mmLarger_tower automatically assumes es is at the bottom
! 685: %% of [nn,n-1] variables.
! 686: [(h)] dList join [(ES) @@@.Esymbol ] join /dList set
! 687: [0 %% dummy characteristic
! 688: << xList length 2 sub >> << xList length 2 sub >>
! 689: << xList length 2 sub >> << xList length >>
! 690: %% c l m n
! 691: << xList length 2 sub >> << xList length 2 sub >>
! 692: << xList length 2 sub >> << xList length 2 sub >>
! 693: %% cc ll mm nn es must belong to differential variables.
! 694: ] /param set
! 695: [xList dList param] /arg1 set
! 696: ] pop
! 697: popVariables
! 698: arg1
! 699: } def
! 700:
! 701: /setupEnvForResolution-sugar {
! 702: getOptions /opts set
! 703: [(Homogenize)] system_variable 1 eq
! 704: { tower-sugar.verbose {
! 705: (Warning: Homogenization and ReduceLowerTerms options are automatically turned off.) message
! 706: } { } ifelse
! 707: [(Homogenize) 0] system_variable
! 708: [(ReduceLowerTerms) 0] system_variable
! 709: } { } ifelse
! 710:
! 711: [(Schreyer)] system_variable 1 eq
! 712: { }
! 713: {(Error: You can compute resolutions only in the ring defined with) message
! 714: $the [(schreyer) 1] option. cf. s_ring_of_differential_operators$ message
! 715: error
! 716: } ifelse
! 717:
! 718: (report) (mmLarger) switch_function (tower) eq
! 719: { }
! 720: { tower-sugar.verbose {
! 721: $Warning: (mmLarger) (tower) switch_function is executed.$ message
! 722: } { } ifelse
! 723: [(AvoidTheSameRing)] pushEnv [ [(AvoidTheSameRing) 0] system_variable (mmLarger) (tower) switch_function ] pop popEnv
! 724:
! 725: } ifelse
! 726:
! 727: } def
! 728:
! 729: /restoreEnvAfterResolution-sugar {
! 730: %% Turn off tower by (mmLarger) (tower) switch_function
! 731: %% and clear the tower of orders by [(gbListTower) [[]] (list) dc] system_variable
! 732: [(AvoidTheSameRing)] pushEnv
! 733: [ [(AvoidTheSameRing) 0] system_variable
! 734: [(gbListTower) [[]] (list) dc] system_variable
! 735: ] pop popEnv
! 736: opts restoreOptions
! 737: } def
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>