Annotation of OpenXM/src/k097/factor-b.sm1, Revision 1.1
1.1 ! maekawa 1: %% This package requires kan/sm1 version 951228 or later.
! 2: %% The binary file of kan/sm1 of this version is temporary obtainable from
! 3: %% ftp.math.s.kobe-u.ac.jp. The file /pub/kan/sm1.binary.sunos4.3.japanese
! 4: %% is for sun with JLE.
! 5: %% How to Install
! 6: %% 1.Copy this file and rename it to sm1 (mv sm1.binary.sunos4.3.japanese sm1).
! 7: %% 2.Add executable property (chmod +x sm1).
! 8:
! 9:
! 10: %% NEW feature of factor-b.sm1. [ ---> kanLeftBrace, ] ---> kanRightBrace
! 11: {
! 12: (factor-b.sm1 : kan/sm1 package to factor polynomials by calling risa/asir.)
! 13: message
! 14: ( : kan/sm1 package to simplify rationals by calling risa/asir.)
! 15: message
! 16: ( : kan/sm1 package to compute hilbert polynomials by calling sm0.)
! 17: message
! 18: ( Version June 30, 1997. It runs on kan/sm1 version 951228 or later.) message
! 19: }
! 20:
! 21: [(factor)
! 22: [(polynomial factor list_of_strings)
! 23: (Example: (x^2-1). factor :: ---> [[$1$ $1$] [$x-1$ $1$] [$x+1$ $1$]])
! 24: (cf.: data_conversion, map, get, pushfile)
! 25: (Note: The function call creates work files asir-tmp.t, asir-tmp.tt,)
! 26: ( asir-tmp-out.t, asir-tmp-log.t and asir-tmp-out.tt )
! 27: ( in the current directory.)
! 28: ]
! 29: ] putUsages
! 30:
! 31: %% /f (Dx^10*d*a-d*a) def
! 32:
! 33: /factor-asir-1 {
! 34: /arg1 set
! 35: [/f /fd /fnewline] pushVariables
! 36: [
! 37: arg1 /f set
! 38: %%(factor-asir-1 is tested with Asir version 950831 on Linux.) message
! 39: (asir-tmp.t) (w) file /fd set
! 40: /fnewline { fd 10 (string) data_conversion writestring } def
! 41: fd $output("asir-tmp-out.t");$ writestring fnewline
! 42: fd $fctr($ writestring
! 43: fd f writestring
! 44: fd $); output(); quit(); $ writestring fnewline
! 45: fd closefile
! 46: (/bin/rm -f asir-tmp.tt) system
! 47: (sed "s/D/kanD/g" asir-tmp.t | sed "s/E/kanE/g" | sed "s/Q/kanQ/g" | sed "s/\[/kanLeftBrace/g" | sed "s/\]/kanRightBrace/g" | sed "s/\,/kanComma/g" >asir-tmp.tt) system
! 48: (/bin/rm -f asir-tmp-out.t asir-tmp-out.tt asir-tmp-log.t) system
! 49: (asir <asir-tmp.tt >asir-tmp-log.t) system
! 50: (sed "s/\[1\]/ /g" asir-tmp-out.t | sed "s/\[2\]/ /g" | sed "1s/1/ /g"| sed "s/\[/{/g" | sed "s/\]/}/g" | sed "s/kanD/D/g" | sed "s/kanE/E/g" | sed "s/kanQ/Q/g" | sed "s/kanLeftBrace/\[/g" | sed "s/kanRightBrace/\]/g" | sed "s/kanComma/\,/g" >asir-tmp-out.tt) system
! 51: ] pop
! 52: popVariables
! 53: } def
! 54:
! 55: /clean-workfiles {
! 56: (/bin/rm -f asir-tmp-out.t asir-tmp-out.tt asir-tmp.t asir-tmp.tt sm0-tmp.t sm0-tmp-out.t asir-tmp-log.t sm0-tmp-out.tt) system
! 57: } def
! 58:
! 59:
! 60: %% comment: there is not data conversion function from string --> array
! 61: %% e.g. (abc) ---> [0x61, 0x62, 0x63]
! 62: %% We can do (abc) 1 10 put, but "get" does not work for strings.
! 63:
! 64: %% f factor-asir-1
! 65:
! 66: %%/aaa
! 67: %% ({{1,1},{x-1,1},{x+1,1},{x^4+x^3+x^2+x+1,1},{x^4-x^3+x^2-x+1,1}})
! 68: %%def
! 69:
! 70: /asir-list-to-kan {
! 71: /arg1 set
! 72: [/aaa /ftmp /ftmp2] pushVariables
! 73: [
! 74: /aaa arg1 def
! 75: [ aaa to_records pop ] /ftmp set
! 76: ftmp { to_records pop [ 3 1 roll ] } map /ftmp2 set
! 77: /arg1 ftmp2 def
! 78: ] pop
! 79: popVariables
! 80: arg1
! 81: } def
! 82:
! 83: /foo {
! 84: (input string is in f) message
! 85: f ::
! 86: f factor-asir-1
! 87: %% (asir-tmp-out.tt) run
! 88: %% (answer in @asir.out) message
! 89: %% bug of run.
! 90: (asir-tmp-out.tt) pushfile /@asir.out set
! 91: @asir.out asir-list-to-kan /ff2 set
! 92: (answer in ff2) message
! 93: } def
! 94:
! 95: /factor {
! 96: (string) data_conversion
! 97: factor-asir-1
! 98: (asir-tmp-out.tt) pushfile asir-list-to-kan
! 99: } def
! 100:
! 101: %%%%%%%%%%%%%%%%% macros for simplification (reduction, cancel)
! 102: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 103: [(cancel)
! 104: [(polynomial cancel list_of_strings)
! 105: (This function simplifies rationals.)
! 106: (Example: $x^2-1$. $x+1$. div cancel :: ---> [[$x-1$ , $1$]])
! 107: (Note: The function call creates work files asir-tmp.t, asir-tmp.tt,)
! 108: ( asir-tmp-out.t, asri-tmp-log.t and asir-tmp-out.tt )
! 109: ( in the current directory.)
! 110: ]
! 111: ] putUsages
! 112:
! 113: /reduce-asir-1 {
! 114: /arg1 set
! 115: [/f /fd /fnewline] pushVariables
! 116: [
! 117: arg1 /f set
! 118: %% (reduce-asir-1 is tested with Asir version 950831 on Linux.) message
! 119: (asir-tmp.t) (w) file /fd set
! 120: /fnewline { fd 10 (string) data_conversion writestring } def
! 121: fd $output("asir-tmp-out.t");$ writestring fnewline
! 122: fd $AsirTmp012=red($ writestring
! 123: fd f writestring
! 124: fd $)$ writestring
! 125: fd ($ ) writestring fnewline
! 126: fd $AsirTmp013=ptozp(nm(AsirTmp012))$ writestring
! 127: fd ($ ) writestring fnewline
! 128: fd $AsirTmp014=red(nm(AsirTmp012)/AsirTmp013)$ writestring
! 129: fd ($ ) writestring fnewline
! 130: fd $[[nm(AsirTmp014)*AsirTmp013,dn(AsirTmp014)*dn(AsirTmp012)]];output();quit(); $ writestring fnewline
! 131: fd closefile
! 132: (/bin/rm -f asir-tmp.tt) system
! 133: (sed "s/D/kanD/g" asir-tmp.t | sed "s/E/kanE/g" | sed "s/Q/kanQ/g" >asir-tmp.tt) system
! 134: (/bin/rm -f asir-tmp-out.t asir-tmp-out.tt asir-tmp-log.t) system
! 135: (asir <asir-tmp.tt >asir-tmp-log.t) system
! 136: (sed "s/\[1\]/ /g" asir-tmp-out.t | sed "s/\[2\]/ /g" |sed "s/\[3\]/ /g" |sed "s/\[4\]/ /g" |sed "s/\[5\]/ /g" | sed "1s/1/ /g"| sed "s/\[/{/g" | sed "s/\]/}/g" | sed "s/kanD/D/g" | sed "s/kanE/E/g" | sed "s/kanQ/Q/g" | sed "s/kanLeftBrace/\[/g" | sed "s/kanRightBrace/\]/g" | sed "s/kanComma/\,/g" >asir-tmp-out.tt) system
! 137: ] pop
! 138: popVariables
! 139: } def
! 140:
! 141: /cancel {
! 142: (string) data_conversion
! 143: reduce-asir-1
! 144: (asir-tmp-out.tt) pushfile asir-list-to-kan
! 145: } def
! 146: %%%%%%%%%%%%%%%%% macros for Hilbert functions
! 147: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 148: /hilbert {
! 149: /arg2 set
! 150: /arg1 set
! 151: [/bases /vars] pushVariables
! 152: [
! 153: /bases arg1 def
! 154: /vars arg2 def
! 155: bases {init (string) data_conversion} map /bases set
! 156: bases vars execSm0
! 157:
! 158: (sed '1s/^\$/{/g' sm0-tmp-out.t | sed '1s/\$$/ , /g' | sed '2s/^\$//g' | sed '2s/\$$/}/g' | sed 's/V//g' >sm0-tmp-out.tt) system
! 159: ] pop
! 160: popVariables
! 161: [ (sm0-tmp-out.tt) pushfile to_records pop]
! 162: } def
! 163: [(hilbert)
! 164: [(------------------------------------------------------------------------)
! 165: (list_of_polynomials variables hilbert hilbert_function)
! 166: (Example: [(x^2-1). (x y -2).] (x,y) hilbert :: ---> [$...$ $,,,$] )
! 167: (cf.: data_conversion, map, get, pushfile)
! 168: (Note: The function call creates work files sm0-tmp.t, sm0-tmp-out.tt,)
! 169: ( sm0-tmp-log.t and sm0-tmp-out.t in the current directory.)
! 170: ]
! 171: ] putUsages
! 172:
! 173:
! 174: %% Ex. [(x^2) (y^3) (x y)] (x,y) execSm0
! 175: /execSm0 {
! 176: /arg2 set
! 177: /arg1 set
! 178: [/monoms /fd /tmp /vars] pushVariables
! 179: [
! 180: /monoms arg1 def
! 181: /vars arg2 def
! 182: (/bin/rm -f sm0-tmp-out.t sm0-tmp-out.tt sm0-tmp-log.t) system
! 183: (sm0-tmp.t) (w) file /fd set
! 184: fd ( ${-p,0}$ options ) writestring
! 185: fd ( $) writestring
! 186: ${$ vars $}$ 3 cat_n /tmp set
! 187: fd tmp writestring
! 188: fd ($ ) writestring
! 189: fd ( polynomial_ring set_up_ring ${-proof}$ options ) writestring
! 190: fd monoms writeArray
! 191: fd ( /ff = ff yaGroebner /gg = gg hilbert2 /ans = ) writestring
! 192: fd (ans :: ans decompose $sm0-tmp-out.t$ printn_to_file quit) writestring
! 193: fd closefile
! 194: (sm0 -f sm0-tmp.t >sm0-tmp-log.t) system
! 195: (When the output is [$ a V^k + ... $ $p!$], the multiplicity is ) message
! 196: $ (k! a)/p! $ message
! 197: ( ) message
! 198: ] pop
! 199: popVariables
! 200: } def
! 201:
! 202:
! 203: /writeArray {
! 204: /arg2 set /arg1 set
! 205: [/fd /arr /k] pushVariables
! 206: [ /fd arg1 def
! 207: /arr arg2 def
! 208: fd ([ ) writestring
! 209: 0 1 arr length 1 sub
! 210: {
! 211: /k set
! 212: fd ($ ) writestring
! 213: fd arr k get writestring
! 214: fd ($ ) writestring
! 215: } for
! 216: fd ( ] ) writestring
! 217: ] pop
! 218: popVariables
! 219: } def
! 220:
! 221:
! 222:
! 223: %%(Loaded macros "factor", "hilbert".) message
! 224:
! 225: [(primadec)
! 226: [([polynomials] [variables] primadec list_of_strings)
! 227: (cf.: data_conversion, map, get, pushfile)
! 228: (Note: The function call creates work files asir-tmp.t, asir-tmp.tt,)
! 229: ( asir-tmp-out.t, asir-tmp-log.t and asir-tmp-out.tt )
! 230: ( in the current directory.)
! 231: ]
! 232: ] putUsages
! 233:
! 234:
! 235: /sendcommand-to-asir2 { %% arg1 arg2 command sendcommand-to-asir2
! 236: /arg3 set /arg2 set /arg1 set
! 237: [/f /fd /fnewline /com /g] pushVariables
! 238: [
! 239: arg1 /f set arg2 /g set arg3 /com set
! 240: (asir-tmp.t) (w) file /fd set
! 241: /fnewline { fd 10 (string) data_conversion writestring } def
! 242: fd $load("gr"); load("primdec"); output("asir-tmp-out.t");$ writestring fnewline
! 243: fd com $($ 2 cat_n writestring
! 244: fd f writestring
! 245: fd $,$ writestring
! 246: fd g writestring
! 247: fd $); output(); quit(); $ writestring fnewline
! 248: fd closefile
! 249: (/bin/rm -f asir-tmp.tt) system
! 250: (sed "s/D/kanD/g" asir-tmp.t | sed "s/E/kanE/g" | sed "s/Q/kanQ/g" >asir-tmp.tt) system
! 251: (/bin/rm -f asir-tmp-out.t asir-tmp-out.tt asir-tmp-log.t) system
! 252: (asir <asir-tmp.tt >asir-tmp-log.t) system
! 253: (sed "s/\[147\]/ /g" asir-tmp-out.t | sed "s/\[148\]/ /g" | sed "1s/1/ /g"| sed "s/kanD/D/g" | sed "s/kanE/E/g" | sed "s/kanQ/Q/g" >asir-tmp-out.tt) system
! 254: ] pop
! 255: popVariables
! 256: } def
! 257:
! 258: /clean-workfiles {
! 259: (/bin/rm -f asir-tmp-out.t asir-tmp-out.tt asir-tmp.t asir-tmp.tt sm0-tmp.t sm0-tmp-out.t asir-tmp-log.t sm0-tmp-out.tt) system
! 260: } def
! 261:
! 262:
! 263: /asir-list-to-kan {
! 264: /arg1 set
! 265: [/aaa /ftmp /ftmp2] pushVariables
! 266: [
! 267: /aaa arg1 def
! 268: [ aaa to_records pop ] /ftmp set
! 269: ftmp { to_records pop [ 3 1 roll ] } map /ftmp2 set
! 270: /arg1 ftmp2 def
! 271: ] pop
! 272: popVariables
! 273: arg1
! 274: } def
! 275:
! 276:
! 277: /primadec {
! 278: /arg2 set /arg1 set
! 279: [/f /g] pushVariables
! 280: [
! 281: /f arg1 def /g arg2 def
! 282: f { (string) dc removeBrace } map toString
! 283: g { (string) dc removeBrace } map toString (primadec)
! 284: sendcommand-to-asir2
! 285: (asir-tmp-out.tt) pushfile asir-list-to-kan /arg1
! 286: ] pop popVariables
! 287: arg1
! 288: } def
! 289:
! 290: /removeBrace { %% string removeBrace string
! 291: %% (z[1]^2-1) removeBrace (z_1 ^2-1)
! 292: /arg1 set
! 293: [/f /i /ans /fa] pushVariables
! 294: [
! 295: /f arg1 def f 1 copy /f set
! 296: f (array) dc /fa set
! 297: 0 1 fa length 1 sub {
! 298: /i set
! 299: fa i get 91 eq
! 300: { f i 95 put }
! 301: { } ifelse
! 302: fa i get 93 eq
! 303: { f i 32 put }
! 304: { } ifelse
! 305: } for
! 306: % fa aload length cat_n /arg1 set %% This may cause operand stack overflow.
! 307: f /arg1 set
! 308: ] pop
! 309: popVariables
! 310: arg1
! 311: } def
! 312:
! 313:
! 314:
! 315:
! 316:
! 317:
! 318:
! 319:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>