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