Annotation of OpenXM/src/kan96xx/Doc/hol.sm1, Revision 1.1
1.1 ! maekawa 1: %% hol.sm1, 1998, 11/8, 11/10, 11/14, 11/25, 1999, 5/18, 6/5.
! 2: %% rank, rrank, characteristic
! 3: %% This file is error clean.
! 4: /hol.version (2.990515) def
! 5: hol.version [(Version)] system_variable gt
! 6: { [(This package hol.sm1 requires the latest version of kan/sm1) nl
! 7: (Please get it from http://www.math.kobe-u.ac.jp/KAN)
! 8: ] cat
! 9: error
! 10: } { } ifelse
! 11:
! 12: $hol.sm1, basic package for holonomic systems (C) N.Takayama, 1999, 6/05 $
! 13: message-quiet
! 14:
! 15: /rank.v [(x) (y) (z)] def %% default value of v (variables).
! 16: /rank.ch [ ] def %% characteristic variety.
! 17: /rank.verbose 0 def
! 18: /rank {
! 19: /arg1 set
! 20: [/in-rank /aa /typev /setarg /f /v /vsss /vddd
! 21: /gg /wv /vd /vdweight /chv
! 22: /one
! 23: ] pushVariables
! 24: [(CurrentRingp) (KanGBmessage)] pushEnv
! 25: [
! 26:
! 27: /aa arg1 def
! 28: aa isArray { } { ( << array >> rank) error } ifelse
! 29: /setarg 0 def
! 30: aa { tag } map /typev set
! 31: typev [ ArrayP ] eq
! 32: { /f aa 0 get def
! 33: /v rank.v def
! 34: /setarg 1 def
! 35: } { } ifelse
! 36: typev [ArrayP StringP] eq
! 37: { /f aa 0 get def
! 38: /v [ aa 1 get to_records pop ] def
! 39: /setarg 1 def
! 40: } { } ifelse
! 41: typev [ArrayP ArrayP] eq
! 42: { /f aa 0 get def
! 43: /v aa 1 get def
! 44: /setarg 1 def
! 45: } { } ifelse
! 46: setarg { } { (rank : Argument mismatch) error } ifelse
! 47:
! 48: [(KanGBmessage) rank.verbose ] system_variable
! 49:
! 50: f { toString } map /f set
! 51: v { @@@.Dsymbol 2 1 roll 2 cat_n 1 } map
! 52: /vddd set %% vddd = [(Dx) 1 (Dy) 1 (Dz) 1]
! 53: v { @@@.Dsymbol 2 1 roll 2 cat_n } map
! 54: /vd set %% vd = [(Dx) (Dy) (Dz)]
! 55: /vdweight
! 56: vd { [ 2 1 roll -1 ] } map %% vdweight=[[(Dx) -1] [(Dy) -1] [(Dz) -1]]
! 57: def
! 58:
! 59: [v from_records
! 60: ring_of_differential_operators [vddd] weight_vector 0] define_ring
! 61: f { . dehomogenize } map /f set
! 62: [f] groebner_sugar 0 get /gg set
! 63:
! 64: /wv vddd weightv def
! 65: gg { wv init } map /chv set %%obtained the characteristic variety.
! 66: /rank.ch chv def
! 67: chv { toString } map /chv set
! 68:
! 69: [ v vd join from_records
! 70: ring_of_polynomials
! 71: [vddd] vdweight join weight_vector
! 72: 0
! 73: ] define_ring
! 74: [chv {.} map] groebner_sugar 0 get { init } map /chii set
! 75:
! 76: /rank.chii chii def
! 77: rank.verbose { chii message } { } ifelse
! 78: v {[ 2 1 roll . (1).]} map /one set
! 79: %% [[(x). (1).] [(y). (1).] [(z). (1).]]
! 80: %% chii { one replace } map %% buggy code.
! 81: %% Arg of hilb should be a reduced GB.
! 82: [chii { one replace } map] groebner 0 get
! 83: vd hilb /arg1 set
! 84: ] pop
! 85: popEnv
! 86: popVariables
! 87: arg1
! 88: } def
! 89:
! 90:
! 91: [(rank)
! 92: [( a rank b)
! 93: ( array a; number b)
! 94: (Example 1 : )
! 95: $ [ [( (x Dx)^2 + ( y Dy)^2) ( x Dx y Dy -1)] (x,y)] rank :: $
! 96: (Example 2 : )
! 97: $[ [( (x^3-y^2) Dx + 3 x^2) ( (x^3-y^2) Dy - 2 y)] (x,y)] rank :: $
! 98: ]
! 99: ] putUsages
! 100: (rank ) messagen-quiet
! 101:
! 102: /characteristic.verbose 0 def
! 103: /characteristic.v [(x) (y) (z)] def
! 104: /characteristic.ch [ ] def
! 105: /ch { characteristic } def
! 106: /characteristic {
! 107: /arg1 set
! 108: [/in-rank /aa /typev /setarg /f /v /vsss /vddd
! 109: /gg /wv /vd /chv
! 110: /one
! 111: ] pushVariables
! 112: [(CurrentRingp) (KanGBmessage)] pushEnv
! 113: [
! 114:
! 115: /aa arg1 def
! 116: aa isArray { } { ( << array >> characteristic) error } ifelse
! 117: /setarg 0 def
! 118: aa { tag } map /typev set
! 119: typev [ ArrayP ] eq
! 120: { /f aa 0 get def
! 121: /v characteristic.v def
! 122: /setarg 1 def
! 123: } { } ifelse
! 124: typev [ArrayP StringP] eq
! 125: { /f aa 0 get def
! 126: /v [ aa 1 get to_records pop ] def
! 127: /setarg 1 def
! 128: } { } ifelse
! 129: typev [ArrayP ArrayP] eq
! 130: { /f aa 0 get def
! 131: /v aa 1 get def
! 132: /setarg 1 def
! 133: } { } ifelse
! 134: setarg { } { (rank : Argument mismatch) error } ifelse
! 135:
! 136: [(KanGBmessage) characteristic.verbose ] system_variable
! 137:
! 138: f { toString } map /f set
! 139: v { @@@.Dsymbol 2 1 roll 2 cat_n 1 } map
! 140: /vddd set %% vddd = [(Dx) 1 (Dy) 1 (Dz) 1]
! 141: v { @@@.Dsymbol 2 1 roll 2 cat_n } map
! 142: /vd set %% vd = [(Dx) (Dy) (Dz)]
! 143:
! 144: [v from_records
! 145: ring_of_differential_operators [vddd] weight_vector 0] define_ring
! 146: f { . dehomogenize } map /f set
! 147: [f] groebner_sugar 0 get /gg set
! 148:
! 149: /wv vddd weightv def
! 150: gg { wv init } map /chv set
! 151: /characteristic.ch [chv] def
! 152: %% gg { wv init toString} map /chv set %%obtained the characteristic variety.
! 153: %% /characteristic.ch chv def
! 154:
! 155: %% [ v vd join from_records
! 156: %% ring_of_polynomials
! 157: %% [vddd] weight_vector
! 158: %% 0
! 159: %% ] define_ring
! 160: %% [chv {.} map] groebner_sugar 0 get /characteristic.ch set
! 161:
! 162: characteristic.ch /arg1 set
! 163: ] pop
! 164: popEnv
! 165: popVariables
! 166: arg1
! 167: } def
! 168:
! 169: [(characteristic)
! 170: [( a characteristic b)
! 171: ( array a; number b)
! 172: (b is the generator of the characteristic variety of a.)
! 173: (For the algorithm, see Japan J. of Industrial and Applied Math., 1994, 485--497.)
! 174: (Example 1 : )
! 175: $ [ [( (x Dx)^2 + ( y Dy)^2) ( x Dx y Dy -1)] (x,y)] characteristic :: $
! 176: (Example 2 : )
! 177: $[ [( (x^3-y^2) Dx + 3 x^2) ( (x^3-y^2) Dy - 2 y)] (x,y)] characteristic :: $
! 178: ]
! 179: ] putUsages
! 180: (characteristic ) messagen-quiet
! 181: [(ch)
! 182: [(ch is the abbreviation of characteristic.)
! 183: ( a ch b)
! 184: ( array a; number b)
! 185: (b is the generator of the characteristic variety of a.)
! 186: (For the algorithm, see, Japan J. of Industrial and Applied Math., 1994, 485--497.)
! 187: (Example 1 : )
! 188: $ [ [( (x Dx)^2 + ( y Dy)^2) ( x Dx y Dy -1)] (x,y)] ch :: $
! 189: (Example 2 : )
! 190: $[ [( (x^3-y^2) Dx + 3 x^2) ( (x^3-y^2) Dy - 2 y)] (x,y)] ch :: $
! 191: ]
! 192: ] putUsages
! 193: (ch ) messagen-quiet
! 194:
! 195: %%%% developing rrank.sm1
! 196: /rrank.v [(x) (y) (z)] def %% default value of v (variables).
! 197: /rrank.init [ ] def %% initial ideal.
! 198: /rrank.verbose 0 def
! 199: /rrank {
! 200: /arg1 set
! 201: [/in-rrank /aa /typev /setarg /f /v /vsss /vddd
! 202: /gg /wv /vd /vdweight
! 203: /one /i /chv
! 204: ] pushVariables
! 205: [(CurrentRingp) (KanGBmessage)] pushEnv
! 206: [
! 207:
! 208: /aa arg1 def
! 209: aa isArray { } { ( << array >> rrank) error } ifelse
! 210: /setarg 0 def
! 211: aa { tag } map /typev set
! 212: typev [ ArrayP ] eq
! 213: { /f aa 0 get def
! 214: /v rrank.v def
! 215: /setarg 1 def
! 216: } { } ifelse
! 217: typev [ArrayP StringP] eq
! 218: { /f aa 0 get def
! 219: /v [ aa 1 get to_records pop ] def
! 220: /setarg 1 def
! 221: } { } ifelse
! 222: typev [ArrayP ArrayP] eq
! 223: { /f aa 0 get def
! 224: /v aa 1 get def
! 225: /setarg 1 def
! 226: } { } ifelse
! 227: setarg { } { (rrank : Argument mismatch) error } ifelse
! 228:
! 229: [(KanGBmessage) rrank.verbose ] system_variable
! 230:
! 231: f { toString } map /f set
! 232: v { @@@.Dsymbol 2 1 roll 2 cat_n 1 } map
! 233:
! 234: v { @@@.Dsymbol 2 1 roll 2 cat_n } map
! 235: /vd set %% vd = [(Dx) (Dy) (Dz)] , v = [(x) (y) (z)]
! 236: /vdweight
! 237: [ 0 1 v length 1 sub { /i set v i get << 0 i sub >>
! 238: vd i get << i >> } for ]
! 239: def
! 240: rrank.verbose { vdweight message } { } ifelse
! 241:
! 242: [v from_records
! 243: ring_of_differential_operators [vdweight] weight_vector 0] define_ring
! 244: f { . dehomogenize homogenize } map /f set
! 245: [f] groebner 0 get {dehomogenize} map /gg set
! 246:
! 247: /wv vdweight weightv def
! 248: gg { wv init } map /rrank.init set %%obtained the initial ideal
! 249: rrank.init {toString} map /chv set
! 250: /arg1 [chv v] rank def
! 251: ] pop
! 252: popEnv
! 253: popVariables
! 254: arg1
! 255: } def
! 256:
! 257:
! 258: [(rrank)
! 259: [( a rrank b)
! 260: ( array a; number b)
! 261: (It computes the holonomic rank for regular holonomic system.)
! 262: (For the algorithm, see Grobner deformations of hypergeometric differential equations, 1999, Springer.)
! 263: (Chapter 2.)
! 264: (Example 1 : )
! 265: $ [ [( (x Dx)^2 + ( y Dy)^2) ( x Dx y Dy -1)] (x,y)] rrank :: $
! 266: ]
! 267: ] putUsages
! 268: (rrank ) messagen-quiet
! 269:
! 270: /gb.v 1 def
! 271: /gb.verbose 0 def
! 272: /gb {
! 273: /arg1 set
! 274: [/in-gb /aa /typev /setarg /f /v
! 275: /gg /wv /termorder /vec /ans /rr /mm
! 276: ] pushVariables
! 277: [(CurrentRingp) (KanGBmessage)] pushEnv
! 278: [
! 279:
! 280: /aa arg1 def
! 281: aa isArray { } { ( << array >> gb) error } ifelse
! 282: /setarg 0 def
! 283: /wv 0 def
! 284: aa { tag } map /typev set
! 285: typev [ ArrayP ] eq
! 286: { /f aa 0 get def
! 287: /v gb.v def
! 288: /setarg 1 def
! 289: } { } ifelse
! 290: typev [ArrayP StringP] eq
! 291: { /f aa 0 get def
! 292: /v aa 1 get def
! 293: /setarg 1 def
! 294: } { } ifelse
! 295: typev [ArrayP ArrayP] eq
! 296: { /f aa 0 get def
! 297: /v aa 1 get from_records def
! 298: /setarg 1 def
! 299: } { } ifelse
! 300: typev [ArrayP StringP ArrayP] eq
! 301: { /f aa 0 get def
! 302: /v aa 1 get def
! 303: /wv aa 2 get def
! 304: /setarg 1 def
! 305: } { } ifelse
! 306: typev [ArrayP ArrayP ArrayP] eq
! 307: { /f aa 0 get def
! 308: /v aa 1 get from_records def
! 309: /wv aa 2 get def
! 310: /setarg 1 def
! 311: } { } ifelse
! 312:
! 313: setarg { } { (gb : Argument mismatch) error } ifelse
! 314:
! 315: [(KanGBmessage) gb.verbose ] system_variable
! 316:
! 317: %%% Start of the preprocess
! 318: f getRing /rr set
! 319: %% To the normal form : matrix expression.
! 320: f gb.toMatrixOfString /f set
! 321: /mm gb.itWasMatrix def
! 322:
! 323: rr tag 0 eq {
! 324: %% Define our own ring
! 325: v isInteger {
! 326: (Error in gb: Specify variables) error
! 327: } { } ifelse
! 328: wv isInteger {
! 329: [v ring_of_differential_operators
! 330: 0] define_ring
! 331: /termorder 1 def
! 332: }{
! 333: [v ring_of_differential_operators
! 334: wv weight_vector
! 335: 0] define_ring
! 336: wv gb.isTermOrder /termorder set
! 337: } ifelse
! 338: } {
! 339: %% Use the ring structre given by the input.
! 340: v isInteger not {
! 341: (Warning : the given ring definition is not used.) message
! 342: } { } ifelse
! 343: rr ring_def
! 344: /wv rr gb.getWeight def
! 345: wv gb.isTermOrder /termorder set
! 346: } ifelse
! 347: %%% Enf of the preprocess
! 348:
! 349:
! 350: termorder {
! 351: f { {. dehomogenize} map } map /f set
! 352: [f] groebner_sugar 0 get /gg set
! 353: }{
! 354: f { {. dehomogenize} map} map /f set
! 355: f fromVectors { homogenize } map /f set
! 356: [f] groebner 0 get /gg set
! 357: }ifelse
! 358: wv isInteger {
! 359: /ans [gg gg {init} map] def
! 360: }{
! 361: /ans [gg gg {wv 0 get weightv init} map] def
! 362: }ifelse
! 363:
! 364: %% Postprocess : recover the matrix expression.
! 365: mm {
! 366: ans { /tmp set [mm tmp] toVectors } map
! 367: /ans set
! 368: }{ }
! 369: ifelse
! 370: %%
! 371:
! 372: /arg1 ans def
! 373: ] pop
! 374: popEnv
! 375: popVariables
! 376: arg1
! 377: } def
! 378: (gb ) messagen-quiet
! 379:
! 380: /pgb {
! 381: /arg1 set
! 382: [/in-pgb /aa /typev /setarg /f /v
! 383: /gg /wv /termorder /vec /ans /rr /mm
! 384: ] pushVariables
! 385: [(CurrentRingp) (KanGBmessage) (UseCriterion1)] pushEnv
! 386: [
! 387:
! 388: /aa arg1 def
! 389: aa isArray { } { (<< array >> pgb) error } ifelse
! 390: /setarg 0 def
! 391: /wv 0 def
! 392: aa { tag } map /typev set
! 393: typev [ ArrayP ] eq
! 394: { /f aa 0 get def
! 395: /v gb.v def
! 396: /setarg 1 def
! 397: } { } ifelse
! 398: typev [ArrayP StringP] eq
! 399: { /f aa 0 get def
! 400: /v aa 1 get def
! 401: /setarg 1 def
! 402: } { } ifelse
! 403: typev [ArrayP ArrayP] eq
! 404: { /f aa 0 get def
! 405: /v aa 1 get from_records def
! 406: /setarg 1 def
! 407: } { } ifelse
! 408: typev [ArrayP StringP ArrayP] eq
! 409: { /f aa 0 get def
! 410: /v aa 1 get def
! 411: /wv aa 2 get def
! 412: /setarg 1 def
! 413: } { } ifelse
! 414: typev [ArrayP ArrayP ArrayP] eq
! 415: { /f aa 0 get def
! 416: /v aa 1 get from_records def
! 417: /wv aa 2 get def
! 418: /setarg 1 def
! 419: } { } ifelse
! 420:
! 421: setarg { } { (pgb : Argument mismatch) error } ifelse
! 422:
! 423: [(KanGBmessage) gb.verbose ] system_variable
! 424:
! 425: %%% Start of the preprocess
! 426: f getRing /rr set
! 427: %% To the normal form : matrix expression.
! 428: f gb.toMatrixOfString /f set
! 429: /mm gb.itWasMatrix def
! 430:
! 431: rr tag 0 eq {
! 432: %% Define our own ring
! 433: v isInteger {
! 434: (Error in pgb: Specify variables) error
! 435: } { } ifelse
! 436: wv isInteger {
! 437: [v ring_of_polynomials
! 438: 0] define_ring
! 439: /termorder 1 def
! 440: }{
! 441: [v ring_of_polynomials
! 442: wv weight_vector
! 443: 0] define_ring
! 444: wv gb.isTermOrder /termorder set
! 445: } ifelse
! 446: } {
! 447: %% Use the ring structre given by the input.
! 448: v isInteger not {
! 449: (Warning : the given ring definition is not used.) message
! 450: } { } ifelse
! 451: rr ring_def
! 452: /wv rr gb.getWeight def
! 453: wv gb.isTermOrder /termorder set
! 454: } ifelse
! 455: %%% Enf of the preprocess
! 456:
! 457:
! 458: termorder {
! 459: f { {. dehomogenize} map } map /f set
! 460: [(UseCriterion1) 1] system_variable
! 461: [f] groebner_sugar 0 get /gg set
! 462: [(UseCriterion1) 0] system_variable
! 463: }{
! 464: f { {. dehomogenize} map} map /f set
! 465: f fromVectors { homogenize } map /f set
! 466: [(UseCriterion1) 1] system_variable
! 467: [f] groebner 0 get /gg set
! 468: [(UseCriterion1) 0] system_variable
! 469: }ifelse
! 470: wv isInteger {
! 471: /ans [gg gg {init} map] def
! 472: }{
! 473: /ans [gg gg {wv 0 get weightv init} map] def
! 474: }ifelse
! 475:
! 476: %% Postprocess : recover the matrix expression.
! 477: mm {
! 478: ans { /tmp set [mm tmp] toVectors } map
! 479: /ans set
! 480: }{ }
! 481: ifelse
! 482: %%
! 483:
! 484: /arg1 ans def
! 485: ] pop
! 486: popEnv
! 487: popVariables
! 488: arg1
! 489: } def
! 490:
! 491: /pgb.old {
! 492: /arg1 set
! 493: [/in-pgb /aa /typev /setarg /f /v
! 494: /gg /wv /termorder /vec /ans
! 495: ] pushVariables
! 496: [(CurrentRingp) (KanGBmessage) (UseCriterion1)] pushEnv
! 497: [
! 498:
! 499: /aa arg1 def
! 500: aa isArray { } { (array pgb) message (pgb) usage error } ifelse
! 501: /setarg 0 def
! 502: /wv 0 def
! 503: aa { tag } map /typev set
! 504: typev [ ArrayP ] eq
! 505: { /f aa 0 get def
! 506: /v gb.v def
! 507: /setarg 1 def
! 508: } { } ifelse
! 509: typev [ArrayP StringP] eq
! 510: { /f aa 0 get def
! 511: /v aa 1 get def
! 512: /setarg 1 def
! 513: } { } ifelse
! 514: typev [ArrayP ArrayP] eq
! 515: { /f aa 0 get def
! 516: /v aa 1 get from_records def
! 517: /setarg 1 def
! 518: } { } ifelse
! 519: typev [ArrayP StringP ArrayP] eq
! 520: { /f aa 0 get def
! 521: /v aa 1 get def
! 522: /wv aa 2 get def
! 523: /setarg 1 def
! 524: } { } ifelse
! 525: typev [ArrayP ArrayP ArrayP] eq
! 526: { /f aa 0 get def
! 527: /v aa 1 get from_records def
! 528: /wv aa 2 get def
! 529: /setarg 1 def
! 530: } { } ifelse
! 531:
! 532: setarg { } { (pgb : Argument mismatch) message error } ifelse
! 533:
! 534: [(KanGBmessage) gb.verbose ] system_variable
! 535:
! 536: %% Input must not be vectors.
! 537: f { toString } map /f set
! 538:
! 539: wv isInteger {
! 540: [v ring_of_polynomials
! 541: 0] define_ring
! 542: /termorder 1 def
! 543: }{
! 544: [v ring_of_polynomials
! 545: wv weight_vector
! 546: 0] define_ring
! 547: wv gb.isTermOrder /termorder set
! 548: } ifelse
! 549: termorder {
! 550: f { . dehomogenize } map /f set
! 551: [(UseCriterion1) 1] system_variable
! 552: [f] groebner_sugar 0 get /gg set
! 553: [(UseCriterion1) 0] system_variable
! 554: }{
! 555: f { . dehomogenize homogenize} map /f set
! 556: [(UseCriterion1) 1] system_variable
! 557: [f] groebner 0 get /gg set
! 558: [(UseCriterion1) 0] system_variable
! 559: }ifelse
! 560: wv isInteger {
! 561: /ans [gg gg {init} map] def
! 562: }{
! 563: /ans [gg gg {wv 0 get weightv init} map] def
! 564: }ifelse
! 565: /arg1 ans def
! 566: ] pop
! 567: popEnv
! 568: popVariables
! 569: arg1
! 570: } def
! 571: (pgb ) messagen-quiet
! 572:
! 573: /gb.toMatrixOfString {
! 574: /arg1 set
! 575: [/in-gb.toMatrixOfString /ff /aa /ans] pushVariables
! 576: [
! 577: /aa arg1 def
! 578: aa length 0 eq { /ans [ ] def /gb.toMatrixOfString.LLL goto }{ } ifelse
! 579: aa 0 get isArray {
! 580: /gb.itWasMatrix aa 0 get length def
! 581: }{
! 582: /gb.itWasMatrix 0 def
! 583: } ifelse
! 584: aa {
! 585: /ff set
! 586: ff isArray {
! 587: ff {toString} map /ff set
! 588: }{
! 589: [ff toString] /ff set
! 590: } ifelse
! 591: ff
! 592: } map /ans set
! 593: /gb.toMatrixOfString.LLL
! 594: /arg1 ans def
! 595: ] pop
! 596: popVariables
! 597: arg1
! 598: } def
! 599: [(gb.toMatrixOfString)
! 600: [(It translates given input into a matrix form which is a data structure)
! 601: (for computations of kernel, image, cokernel, etc.)
! 602: (gb.itWasMatrix is set to the length of the input vector.)
! 603: $Example 1: $
! 604: $ [ (x). (y).] gb.toMatrixOfString ==> [[(x)] [(y)]] $
! 605: $ gb.itWasMatrix is 0.$
! 606: $Example 2: $
! 607: $ [ [(x). (1).] [(y). (0).]] gb.toMatrixOfString ==> [ [(x) (1)] [(y) (0)]] $
! 608: $ gb.itWasMatrix is 2.$
! 609: ]] putUsages
! 610:
! 611: /gb.toMatrixOfPoly {
! 612: /arg1 set
! 613: [/in-gb.toMatrixOfPoly /ff /aa /ans] pushVariables
! 614: [
! 615: /aa arg1 def
! 616: aa length 0 eq { /ans [ ] def /gb.toMatrixOfPoly.LLL goto }{ } ifelse
! 617: aa 0 get isArray {
! 618: /gb.itWasMatrix aa 0 get length def
! 619: }{
! 620: /gb.itWasMatrix 0 def
! 621: } ifelse
! 622: aa {
! 623: /ff set
! 624: ff isArray {
! 625: }{
! 626: [ff] /ff set
! 627: } ifelse
! 628: ff
! 629: } map /ans set
! 630: /gb.toMatrixOfPoly.LLL
! 631: /arg1 ans def
! 632: ] pop
! 633: popVariables
! 634: arg1
! 635: } def
! 636: [(gb.toMatrixOfPoly)
! 637: [(It translates given input into a matrix form which is a data structure)
! 638: (for computations of kernel, image, cokernel, etc.)
! 639: (gb.itWasMatrix is set to the length of the input vector.)
! 640: $Example 1: $
! 641: $ [ (x). (y).] gb.toMatrixOfPoly ==> [[(x)] [(y)]] $
! 642: $ gb.itWasMatrix is 0.$
! 643: $Example 2: $
! 644: $ [ [(x). (1).] [(y). (0).]] gb.toMatrixOfPoly ==> [ [(x) (1)] [(y) (0)]] $
! 645: $ gb.itWasMatrix is 2.$
! 646: ]] putUsages
! 647:
! 648: /gb.getWeight {
! 649: /arg1 set
! 650: [/in-gb.getWeight /rr /ww /vv /ans /nn /ii] pushVariables
! 651: [(CurrentRingp)] pushEnv
! 652: [
! 653: /rr arg1 def
! 654: rr ring_def
! 655: getVariableNames /vv set
! 656: [(orderMatrix)] system_variable 0 get /ww set
! 657: /nn vv length 1 sub def
! 658: [0 1 nn {
! 659: /ii set
! 660: ww ii get 0 eq {
! 661: } {
! 662: vv ii get
! 663: ww ii get
! 664: } ifelse
! 665: } for
! 666: ] /ans set
! 667: /arg1 [ans] def
! 668: ] pop
! 669: popEnv
! 670: popVariables
! 671: arg1
! 672: } def
! 673: [(gb.getWeight)
! 674: [(ring gb.getWeight wv)
! 675: (It gets the weight vector field of the ring ring.)
! 676: ]] putUsages
! 677:
! 678:
! 679: /gb.isTermOrder {
! 680: /arg1 set
! 681: [/in-gb.isTermOrder /vv /ww /yes /i /j] pushVariables
! 682: [
! 683: /vv arg1 def
! 684: /yes 1 def
! 685: 0 1 vv length 1 sub {
! 686: /i set
! 687: /ww vv i get def
! 688: 0 1 ww length 1 sub {
! 689: /j set
! 690: ww j get isInteger {
! 691: ww j get 0 lt { /yes 0 def } { } ifelse
! 692: }{ } ifelse
! 693: }for
! 694: }for
! 695: /arg1 yes def
! 696: ] pop
! 697: popVariables
! 698: arg1
! 699: } def
! 700: [(gb)
! 701: [(a gb b)
! 702: (array a; array b;)
! 703: (b : [g ii]; array g; array in; g is a Grobner basis of f)
! 704: ( in the ring of differential operators.)
! 705: $ ii is the initial ideal in case of w is given or <<a>> belongs$
! 706: $ to a ring. In the other cases, it returns the initial monominal.$
! 707: (a : [f ]; array f; f is a set of generators of an ideal in a ring.)
! 708: (a : [f v]; array f; string v; v is the variables. )
! 709: (a : [f v w]; array f; string v; array of array w; w is the weight matirx.)
! 710: ( )
! 711: $Example 1: [ [( (x Dx)^2 + (y Dy)^2 -1) ( x y Dx Dy -1)] (x,y) $
! 712: $ [ [ (Dx) 1 ] ] ] gb pmat ; $
! 713: (Example 2: )
! 714: (To put h=1, type in, e.g., )
! 715: $ [ [(2 x Dx + 3 y Dy+6) (2 y Dx + 3 x^2 Dy)] (x,y) $
! 716: $ [[(x) -1 (Dx) 1 (y) -1 (Dy) 1]]] gb /gg set gg dehomogenize pmat ;$
! 717: ( )
! 718: $Example 3: [ [( (x Dx)^2 + (y Dy)^2 -1) ( x y Dx Dy -1)] (x,y) $
! 719: $ [ [ (Dx) 1 (Dy) 1] ] ] gb pmat ; $
! 720: ( )
! 721: $Example 4: [[ [(x^2) (y+x)] [(x+y) (y^3)] [(2 x^2+x y) (y+x+x y^3)]] (x,y) $
! 722: $ [ [ (x) -1 (y) -1] ] ] gb pmat ; $
! 723: ( )
! 724: (cf. gb, groebner, groebner_sugar, syz. )
! 725: ]] putUsages
! 726:
! 727: [(pgb)
! 728: [(a pgb b)
! 729: (array a; array b;)
! 730: (b : [g ii]; array g; array in; g is a Grobner basis of f)
! 731: ( in the ring of polynomials.)
! 732: $ ii is the initial ideal in case of w is given or <<a>>belongs$
! 733: $ to a ring. In the other cases, it returns the initial monominal.$
! 734: (a : [f ]; array f; f is a set of generators of an ideal in a ring.)
! 735: (a : [f v]; array f; string v; v is the variables.)
! 736: (a : [f v w]; array f; string v; array of array w; w is the weight matirx.)
! 737: $Example 1: [(x,y) ring_of_polynomials 0] define_ring $
! 738: $ [ [(x^2+y^2-4). (x y -1).] ] pgb :: $
! 739: $Example 2: [ [(x^2+y^2) (x y)] (x,y) [ [(x) -1 (y) -1] ] ] pgb :: $
! 740: (cf. gb, groebner, groebner_sugar, syz. )
! 741: ]] putUsages
! 742:
! 743:
! 744: %/syz.v 1 def
! 745: /syz.v 1 def
! 746: /syz.verbose 0 def
! 747: /syz {
! 748: /arg1 set
! 749: [/in-syz /aa /typev /setarg /f /v
! 750: /gg /wv /termorder /vec /ans /ggall /vectorInput /vsize /gtmp /gtmp2
! 751: /rr /mm
! 752: ] pushVariables
! 753: [(CurrentRingp) (KanGBmessage)] pushEnv
! 754: [
! 755:
! 756: /aa arg1 def
! 757: aa isArray { } { (<< array >> syz) error } ifelse
! 758: /setarg 0 def
! 759: /wv 0 def
! 760: aa { tag } map /typev set
! 761: typev [ ArrayP ] eq
! 762: { /f aa 0 get def
! 763: /v syz.v def
! 764: /setarg 1 def
! 765: } { } ifelse
! 766: typev [ArrayP StringP] eq
! 767: { /f aa 0 get def
! 768: /v aa 1 get def
! 769: /setarg 1 def
! 770: } { } ifelse
! 771: typev [ArrayP ArrayP] eq
! 772: { /f aa 0 get def
! 773: /v aa 1 get from_records def
! 774: /setarg 1 def
! 775: } { } ifelse
! 776: typev [ArrayP StringP ArrayP] eq
! 777: { /f aa 0 get def
! 778: /v aa 1 get def
! 779: /wv aa 2 get def
! 780: /setarg 1 def
! 781: } { } ifelse
! 782: typev [ArrayP ArrayP ArrayP] eq
! 783: { /f aa 0 get def
! 784: /v aa 1 get from_records def
! 785: /wv aa 2 get def
! 786: /setarg 1 def
! 787: } { } ifelse
! 788:
! 789: setarg { } { (syz : Argument mismatch) error } ifelse
! 790:
! 791: [(KanGBmessage) syz.verbose ] system_variable
! 792:
! 793:
! 794:
! 795: %%% Start of the preprocess
! 796: f getRing /rr set
! 797: %% To the normal form : matrix expression.
! 798: f gb.toMatrixOfString /f set
! 799: /mm gb.itWasMatrix def
! 800: mm 0 gt {
! 801: /vectorInput 1 def
! 802: }{
! 803: /vectorInput 1 def
! 804: } ifelse
! 805:
! 806: rr tag 0 eq {
! 807: %% Define our own ring
! 808: v isInteger {
! 809: (Error in syz: Specify variables) error
! 810: } { } ifelse
! 811: wv isInteger {
! 812: [v ring_of_differential_operators
! 813: 0] define_ring
! 814: /termorder 1 def
! 815: }{
! 816: [v ring_of_differential_operators
! 817: wv weight_vector
! 818: 0] define_ring
! 819: wv gb.isTermOrder /termorder set
! 820: } ifelse
! 821: }{
! 822: %% Use the ring structre given by the input.
! 823: v isInteger not {
! 824: (Warning : the given ring definition is not used.) message
! 825: } { } ifelse
! 826: rr ring_def
! 827: /wv rr gb.getWeight def
! 828: wv gb.isTermOrder /termorder set
! 829: } ifelse
! 830: %%% Enf of the preprocess
! 831:
! 832: termorder {
! 833: f { {. dehomogenize} map } map /f set
! 834: [f [(needBack) (needSyz)]] groebner_sugar /ggall set
! 835: ggall 2 get /gg set
! 836: }{
! 837: f { {. dehomogenize } map homogenize } map /f set
! 838: [f [(needBack) (needSyz)]] groebner /ggall set
! 839: ggall 2 get /gg set
! 840: }ifelse
! 841: vectorInput {
! 842: /vsize f 0 get length def %% input vector size.
! 843: /gtmp ggall 0 get def
! 844: [vsize gtmp] toVectors /gtmp set
! 845: ggall 0 gtmp put
! 846: }{ } ifelse
! 847: /arg1 [gg dehomogenize ggall] def
! 848: ] pop
! 849: popEnv
! 850: popVariables
! 851: arg1
! 852: } def
! 853: (syz ) messagen-quiet
! 854:
! 855: [(syz)
! 856: [(a syz [b c])
! 857: (array a; array b; array c)
! 858: (b is a set of generators of the syzygies of f.)
! 859: (c = [gb, backward transformation, syzygy without dehomogenization].)
! 860: (See groebner.)
! 861: (a : [f ]; array f; f is a set of generators of an ideal in a ring.)
! 862: (a : [f v]; array f; string v; v is the variables.)
! 863: (a : [f v w]; array f; string v; array of array w; w is the weight matirx.)
! 864: $Example 1: [(x,y) ring_of_polynomials 0] define_ring $
! 865: $ [ [(x^2+y^2-4). (x y -1).] ] syz :: $
! 866: $Example 2: [ [(x^2+y^2) (x y)] (x,y) [ [(x) -1 (y) -1] ] ] syz :: $
! 867: $Example 3: [ [( (x Dx)^2 + (y Dy)^2 -1) ( x y Dx Dy -1)] (x,y) $
! 868: $ [ [ (Dx) 1 ] ] ] syz pmat ; $
! 869: $Example 4: [ [(2 x Dx + 3 y Dy+6) (2 y Dx + 3 x^2 Dy)] (x,y) $
! 870: $ [[(x) -1 (Dx) 1 (y) -1 (Dy) 1]]] syz pmat ;$
! 871: $Example 5: [ [ [(x^2) (y+x)] [(x+y) (y^3)] [(2 x^2+x y) (y+x+x y^3)]] $
! 872: $ (x,y) ] syz pmat ;$
! 873: $Example 6: [ [ [(x^2) (y+x)] [(x+y) (y^3)] [(2 x^2+x y) (y+x+x y^3)]] $
! 874: $ (x,y) [[(x) -1 (y) -2]] ] syz pmat ;$
! 875: $Example 7: [ [ [(0) (0)] [(0) (0)] [(x) (y)]] $
! 876: $ [(x) (y)]] syz pmat ;$
! 877: ]] putUsages
! 878:
! 879:
! 880: %%%%%%%%%%%%%%%%%% package fs %%%%%%%%%%%%%%%%%%%%%%%
! 881: [(genericAnn)
! 882: [ (f [s v1 v2 ... vn] genericAnn [L1 ... Lm])
! 883: (L1, ..., Lm are annihilating ideal for f^s.)
! 884: (f is a polynomial of v1, ..., vn)
! 885: (<string> | <poly> f, s, v1, ..., vn ; <poly> L1, ..., Lm )
! 886: $Example: (x^3+y^3+z^3) [(s) (x) (y) (z)] genericAnn$
! 887: ]
! 888: ] putUsages ( genericAnn ) messagen-quiet
! 889: /fs.verbose 0 def
! 890: /genericAnn {
! 891: /arg2 set /arg1 set
! 892: [/in-genericAnn /f /vlist /s /vvv /nnn /rrr
! 893: /v1 /ops /ggg /ggg0
! 894: ] pushVariables
! 895: [(CurrentRingp) (KanGBmessage)] pushEnv
! 896: [
! 897: /f arg1 def /vlist arg2 def
! 898: f toString /f set
! 899: vlist { toString } map /vlist set
! 900: [(KanGBmessage) fs.verbose] system_variable
! 901: /s vlist 0 get def
! 902: /vvv (_u,_v,_t,) vlist rest { (,) 2 cat_n } map aload length /nnn set
! 903: s nnn 2 add cat_n def
! 904: fs.verbose { vvv message } { }ifelse
! 905: [vvv ring_of_differential_operators
! 906: [[(_u) 1 (_v) 1]] weight_vector 0] define_ring /rrr set
! 907:
! 908: [ (_u*_t). f . sub (_u*_v-1). ]
! 909: vlist rest { /v1 set
! 910: %%D-clean f . (D) v1 2 cat_n . 1 diff0 (_v*D_t). mul
! 911: f . @@@.Dsymbol v1 2 cat_n . 1 diff0 [(_v*) @@@.Dsymbol (_t)] cat . mul
! 912: @@@.Dsymbol v1 2 cat_n . add } map
! 913: join
! 914: /ops set
! 915: ops {[[(h). (1).]] replace } map /ops set
! 916: fs.verbose { ops message } { }ifelse
! 917: [ops] groebner_sugar 0 get /ggg0 set
! 918: fs.verbose { ggg0 message } { } ifelse
! 919: ggg0 [(_u) (_v)] eliminatev
! 920: %%D-clean { [(_t).] [ (D_t).] [s .] distraction
! 921: { [(_t).] [ [@@@.Dsymbol (_t)] cat .] [s .] distraction
! 922: [[s . << (0). s . sub (1). sub >>]] replace
! 923: } map /arg1 set
! 924: ] pop
! 925: popEnv
! 926: popVariables
! 927: arg1
! 928: } def
! 929:
! 930: %% Find differential equations for f^(m), r0 the minimal integral root.
! 931: [(annfs)
! 932: [( [ f v m r0] annfs g )
! 933: (It returns the annihilating ideal of f^m where r0 must be smaller)
! 934: (or equal to the minimal integral root of the b-function.)
! 935: (Or, it returns the annihilating ideal of f^r0, r0 and the b-function)
! 936: (where r0 is the minial integral root of b.)
! 937: (For the algorithm, see J. Pure and Applied Algebra 117&118(1997), 495--518.)
! 938: (Example 1: [(x^2+y^2+z^2+t^2) (x,y,z,t) -1 -2] annfs :: )
! 939: $ It returns the annihilating ideal of (x^2+y^2+z^2+t^2)^(-1).$
! 940: (Example 2: [(x^2+y^2+z^2+t^2) (x,y,z,t)] annfs :: )
! 941: $ It returns the annihilating ideal of f^r0 and [r0, b-function]$
! 942: $ where r0 is the minimal integral root of the b-function.$
! 943: (Example 3: [(x^2+y^2+z^2) (x,y,z) -1 -1] annfs :: )
! 944: (Example 4: [(x^3+y^3+z^3) (x,y,z)] annfs :: )
! 945: (Example 5: [((x1+x2+x3)(x1 x2 + x2 x3 + x1 x3) - t x1 x2 x3 ) )
! 946: ( (t,x1,x2,x3) -1 -2] annfs :: )
! 947: ( Note that the example 4 uses huge memory space.)
! 948: ]] putUsages
! 949: ( annfs ) messagen-quiet
! 950: /annfs.verbose fs.verbose def
! 951: /annfs.v [(x) (y) (z)] def
! 952: /annfs.s (_s) def
! 953: %% The first variable must be s.
! 954: /annfs {
! 955: /arg1 set
! 956: [/in-annfs /aa /typev /setarg /v /m /r0 /gg /ss /fs /gg2
! 957: /ans /vtmp /w2 /velim /bbb /rrr /r0
! 958: ] pushVariables
! 959: [(CurrentRingp) (KanGBmessage)] pushEnv
! 960: [
! 961:
! 962: /aa arg1 def
! 963: aa isArray { } { ( << array >> annfs) error } ifelse
! 964: /setarg 0 def
! 965: aa { tag } map /typev set
! 966: /r0 [ ] def
! 967: /m [ ] def
! 968: /v annfs.v def
! 969: aa 0 << aa 0 get toString >> put
! 970: typev [ StringP ] eq
! 971: { /f aa 0 get def
! 972: /setarg 1 def
! 973: } { } ifelse
! 974: typev [StringP StringP] eq
! 975: { /f aa 0 get def
! 976: /v [ aa 1 get to_records pop ] def
! 977: /setarg 1 def
! 978: } { } ifelse
! 979: typev [StringP ArrayP] eq
! 980: { /f aa 0 get def
! 981: /v aa 1 get def
! 982: /setarg 1 def
! 983: } { } ifelse
! 984: typev [StringP ArrayP IntegerP IntegerP] eq
! 985: { /f aa 0 get def
! 986: /v aa 1 get def
! 987: /m aa 2 get def
! 988: /r0 aa 3 get def
! 989: /setarg 1 def
! 990: } { } ifelse
! 991: typev [StringP StringP IntegerP IntegerP] eq
! 992: { /f aa 0 get def
! 993: /v [ aa 1 get to_records pop ] def
! 994: /m aa 2 get def
! 995: /r0 aa 3 get def
! 996: /setarg 1 def
! 997: } { } ifelse
! 998: setarg 1 eq { } { (annfs : wrong argument) error } ifelse
! 999:
! 1000: [annfs.s] v join /v set
! 1001:
! 1002: /ss v 0 get def
! 1003: annfs.verbose {
! 1004: (f, v, s, f^{m}, m+r0 = ) messagen
! 1005: [ f (, ) v (, ) ss (, )
! 1006: (f^) m (,) m (+) r0 ] {messagen} map ( ) message
! 1007: } { } ifelse
! 1008:
! 1009: f v genericAnn /fs set
! 1010:
! 1011: annfs.verbose {
! 1012: (genericAnn is ) messagen fs message
! 1013: } { } ifelse
! 1014: [(KanGBmessage) annfs.verbose] system_variable
! 1015:
! 1016: m isArray {
! 1017: %% Now, let us find the b-function. /vtmp /w2 /velim /bbb /rrr /r0
! 1018: v rest { /vtmp set vtmp @@@.Dsymbol vtmp 2 cat_n } map /velim set
! 1019: velim { 1 } map /w2 set
! 1020: annfs.verbose { w2 message } { } ifelse
! 1021: [v from_records ring_of_differential_operators
! 1022: [w2] weight_vector 0] define_ring
! 1023: [ fs { toString . } map [ f toString . ] join ]
! 1024: groebner_sugar 0 get velim eliminatev 0 get /bbb set
! 1025: [[(s) annfs.s] from_records ring_of_polynomials 0] define_ring
! 1026: bbb toString . [[annfs.s . (s).]] replace /bbb set
! 1027: annfs.verbose { bbb message } { } ifelse
! 1028: bbb findIntegralRoots /rrr set
! 1029: rrr 0 get /r0 set %% minimal integral root.
! 1030: annfs.verbose { rrr message } { } ifelse
! 1031: fs 0 get (ring) dc ring_def
! 1032: fs { [[annfs.s . r0 toString .]] replace } map /ans set
! 1033: /ans [ans [r0 bbb]] def
! 1034: /annfs.label1 goto
! 1035: } { } ifelse
! 1036: m 0 ge {
! 1037: (annfs works only for getting annihilating ideal for f^(negative))
! 1038: error
! 1039: } { } ifelse
! 1040: r0 isArray {
! 1041: [(Need to compute the minimal root of b-function) nl
! 1042: (It has not been implemented.) ] cat
! 1043: error
! 1044: } { } ifelse
! 1045:
! 1046: [v from_records ring_of_differential_operators 0] define_ring
! 1047: fs {toString . dehomogenize [[ss . r0 (poly) dc]] replace}
! 1048: map /gg set
! 1049: annfs.verbose { gg message } { } ifelse
! 1050:
! 1051: [ [f . << m r0 sub >> npower ] gg join
! 1052: [(needBack) (needSyz)]] groebner_sugar 2 get /gg2 set
! 1053:
! 1054: gg2 { 0 get } map /ans set
! 1055: /ans ans { dup (0). eq {pop} { } ifelse } map def
! 1056:
! 1057: /annfs.label1
! 1058: /arg1 ans def
! 1059: ] pop
! 1060: popEnv
! 1061: popVariables
! 1062: arg1
! 1063: } def
! 1064:
! 1065: /genericAnnWithL.s (s) def
! 1066: /annfs.verify 0 def
! 1067: /genericAnnWithL {
! 1068: /arg1 set
! 1069: [/in-genericAnnWithL /aa /typev /setarg /v /m /r0 /gg /ss /fs /gg2
! 1070: /ans /vtmp /w2 /velim /bbb /rrr /r0 /myL /mygb /jj
! 1071: ] pushVariables
! 1072: [(CurrentRingp) (KanGBmessage) (Homogenize)] pushEnv
! 1073: [
! 1074:
! 1075: /aa arg1 def
! 1076: aa isArray { } { ( << array >> annfs) error } ifelse
! 1077: /setarg 0 def
! 1078: aa { tag } map /typev set
! 1079: /r0 [ ] def
! 1080: /m [ ] def
! 1081: /v annfs.v def
! 1082: aa 0 << aa 0 get toString >> put
! 1083: typev [ StringP ] eq
! 1084: { /f aa 0 get def
! 1085: /setarg 1 def
! 1086: } { } ifelse
! 1087: typev [StringP StringP] eq
! 1088: { /f aa 0 get def
! 1089: /v [ aa 1 get to_records pop ] def
! 1090: /setarg 1 def
! 1091: } { } ifelse
! 1092: typev [StringP ArrayP] eq
! 1093: { /f aa 0 get def
! 1094: /v aa 1 get def
! 1095: /setarg 1 def
! 1096: } { } ifelse
! 1097: setarg 1 eq { } { (genericAnnWithL : wrong argument) error } ifelse
! 1098:
! 1099: [genericAnnWithL.s] v join /v set
! 1100:
! 1101: /ss v 0 get def
! 1102: annfs.verbose {
! 1103: (f, v, s, f^{m}, m+r0 = ) messagen
! 1104: [ f (, ) v (, ) ss (, )
! 1105: (f^) m (,) m (+) r0 ] {messagen} map ( ) message
! 1106: } { } ifelse
! 1107:
! 1108: f v genericAnn /fs set
! 1109:
! 1110: annfs.verbose {
! 1111: (genericAnn is ) messagen fs message
! 1112: } { } ifelse
! 1113: [(KanGBmessage) annfs.verbose] system_variable
! 1114:
! 1115: m isArray {
! 1116: %% Now, let us find the b-function. /vtmp /w2 /velim /bbb /rrr /r0
! 1117: v rest { /vtmp set vtmp @@@.Dsymbol vtmp 2 cat_n } map /velim set
! 1118: velim { 1 } map /w2 set
! 1119: annfs.verbose { w2 message } { } ifelse
! 1120: [v from_records ring_of_differential_operators
! 1121: [w2] weight_vector 0] define_ring
! 1122:
! 1123: [ [ f toString . ] fs { toString . } map join [(needBack)]]
! 1124: groebner_sugar /mygb set
! 1125: mygb 0 get velim eliminatev 0 get /bbb set
! 1126: mygb 0 get bbb position /jj set
! 1127: mygb 1 get jj get 0 get /myL set
! 1128:
! 1129: annfs.verbose { bbb message } { } ifelse
! 1130:
! 1131: annfs.verify {
! 1132: (Verifying L f - b belongs to genericAnn(f)) message
! 1133: [(Homogenize) 0] system_variable
! 1134: << myL f . mul bbb sub >>
! 1135: [fs { toString . } map] groebner_sugar 0 get
! 1136: reduction 0 get message
! 1137: (Is it zero? Then it's fine.) message
! 1138: } { } ifelse
! 1139:
! 1140: /ans [bbb [myL fs] ] def
! 1141: /annfs.label1 goto
! 1142: } { } ifelse
! 1143:
! 1144: /annfs.label1
! 1145: /arg1 ans def
! 1146: ] pop
! 1147: popEnv
! 1148: popVariables
! 1149: arg1
! 1150: } def
! 1151:
! 1152:
! 1153: [(genericAnnWithL)
! 1154: [$[f v] genericAnnWithL [b [L I]]$
! 1155: $String f,v; poly b,L; array of poly I;$
! 1156: $f is a polynomial given by a string. v is the variables.$
! 1157: $ v must not contain names s, e.$
! 1158: $b is the b-function (Bernstein-Sato polynomial) for f and$
! 1159: $ L is the operator satisfying L f^{s+1} = b(s) f^s $
! 1160: $ I is the annihilating ideal of f^s.$
! 1161: $cf. bfunction, annfs, genericAnn.$
! 1162: $Example 1: [(x^2+y^2) (x,y)] genericAnnWithL ::$
! 1163: $Example 2: [(x^2+y^2+z^2) (x,y,z)] genericAnnWithL ::$
! 1164: $Example 3: [(x^3-y^2 z^2) (x,y,z)] genericAnnWithL ::$
! 1165: ]] putUsages
! 1166:
! 1167:
! 1168: ( ) message-quiet ;
! 1169:
! 1170:
! 1171:
! 1172:
! 1173:
! 1174:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>