Annotation of OpenXM/src/kan96xx/Doc/factor-a.sm1.org, 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: (factor-a.sm1 : kan/sm1 package to factor polynomials by calling risa/asir.)
! 10: message
! 11: ( : kan/sm1 package to simplify rationals by calling risa/asir.)
! 12: message
! 13: ( : kan/sm1 package to compute hilbert polynomials by calling sm0.)
! 14: message
! 15: ( Version June 30, 1997. It runs on kan/sm1 version 951228 or later.) message
! 16:
! 17:
! 18: [(factor)
! 19: [(polynomial factor list_of_strings)
! 20: (Example: (x^2-1). factor :: ---> [[$1$ $1$] [$x-1$ $1$] [$x+1$ $1$]])
! 21: (cf.: data_conversion, map, get, pushfile)
! 22: (Note: The function call creates work files asir-tmp.t, asir-tmp.tt,)
! 23: ( asir-tmp-out.t, asri-tmp-log.t and asir-tmp-out.tt )
! 24: ( in the current directory.)
! 25: ]
! 26: ] putUsages
! 27:
! 28: %% /f (Dx^10*d*a-d*a) def
! 29:
! 30: /factor-asir-1 {
! 31: /arg1 set
! 32: [/f /fd /fnewline] pushVariables
! 33: [
! 34: arg1 /f set
! 35: %% (factor-asir-1 is tested with Asir version 950831 on Linux.) message
! 36: (asir-tmp.t) (w) file /fd set
! 37: /fnewline { fd 10 (string) data_conversion writestring } def
! 38: fd $output("asir-tmp-out.t");$ writestring fnewline
! 39: fd $fctr($ writestring
! 40: fd f writestring
! 41: fd $); output(); quit(); $ writestring fnewline
! 42: fd closefile
! 43: (/bin/rm -f asir-tmp.tt) system
! 44: (sed "s/D/kanD/g" asir-tmp.t | sed "s/E/kanE/g" | sed "s/Q/kanQ/g" >asir-tmp.tt) system
! 45: (/bin/rm -f asir-tmp-out.t asir-tmp-out.tt asir-tmp-log.t) system
! 46: (asir <asir-tmp.tt >asir-tmp-log.t) system
! 47: (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" >asir-tmp-out.tt) system
! 48: ] pop
! 49: popVariables
! 50: } def
! 51:
! 52: /clean-workfiles {
! 53: (/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) system
! 54: } def
! 55:
! 56:
! 57: %% comment: there is not data conversion function from string --> array
! 58: %% e.g. (abc) ---> [0x61, 0x62, 0x63]
! 59: %% We can do (abc) 1 10 put, but "get" does not work for strings.
! 60:
! 61: %% f factor-asir-1
! 62:
! 63: %%/aaa
! 64: %% ({{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}})
! 65: %%def
! 66:
! 67: /asir-list-to-kan {
! 68: /arg1 set
! 69: [/aaa /ftmp /ftmp2] pushVariables
! 70: [
! 71: /aaa arg1 def
! 72: [ aaa to_records pop ] /ftmp set
! 73: ftmp { to_records pop [ 3 1 roll ] } map /ftmp2 set
! 74: /arg1 ftmp2 def
! 75: ] pop
! 76: popVariables
! 77: arg1
! 78: } def
! 79:
! 80: /foo {
! 81: (input string is in f) message
! 82: f ::
! 83: f factor-asir-1
! 84: %% (asir-tmp-out.tt) run
! 85: %% (answer in @asir.out) message
! 86: %% bug of run.
! 87: (asir-tmp-out.tt) pushfile /@asir.out set
! 88: @asir.out asir-list-to-kan /ff2 set
! 89: (answer in ff2) message
! 90: } def
! 91:
! 92: /factor {
! 93: (string) data_conversion
! 94: factor-asir-1
! 95: (asir-tmp-out.tt) pushfile asir-list-to-kan
! 96: } def
! 97:
! 98: %%%%%%%%%%%%%%%%% macros for simplification (reduction, cancel)
! 99: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 100: [(cancel)
! 101: [(polynomial cancel list_of_strings)
! 102: (This function simplifies rationals.)
! 103: (Example: $x^2-1$. $x+1$. div cancel :: ---> [[$x-1$ , $1$]])
! 104: (Note: The function call creates work files asir-tmp.t, asir-tmp.tt,)
! 105: ( asir-tmp-out.t, asri-tmp-log.t and asir-tmp-out.tt )
! 106: ( in the current directory.)
! 107: ]
! 108: ] putUsages
! 109:
! 110: /reduce-asir-1 {
! 111: /arg1 set
! 112: [/f /fd /fnewline] pushVariables
! 113: [
! 114: arg1 /f set
! 115: %% (reduce-asir-1 is tested with Asir version 950831 on Linux.) message
! 116: (asir-tmp.t) (w) file /fd set
! 117: /fnewline { fd 10 (string) data_conversion writestring } def
! 118: fd $output("asir-tmp-out.t");$ writestring fnewline
! 119: fd $AsirTmp012=red($ writestring
! 120: fd f writestring
! 121: fd $)$ writestring
! 122: fd ($ ) writestring fnewline
! 123: fd $AsirTmp013=ptozp(nm(AsirTmp012))$ writestring
! 124: fd ($ ) writestring fnewline
! 125: fd $AsirTmp014=red(nm(AsirTmp012)/AsirTmp013)$ writestring
! 126: fd ($ ) writestring fnewline
! 127: fd $[[nm(AsirTmp014)*AsirTmp013,dn(AsirTmp014)*dn(AsirTmp012)]];output();quit(); $ writestring fnewline
! 128: fd closefile
! 129: (/bin/rm -f asir-tmp.tt) system
! 130: (sed "s/D/kanD/g" asir-tmp.t | sed "s/E/kanE/g" | sed "s/Q/kanQ/g" >asir-tmp.tt) system
! 131: (/bin/rm -f asir-tmp-out.t asir-tmp-out.tt asir-tmp-log.t) system
! 132: (asir <asir-tmp.tt >asir-tmp-log.t) system
! 133: (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
! 134:
! 135:
! 136: ] pop
! 137: popVariables
! 138: } def
! 139:
! 140: /cancel {
! 141: (string) data_conversion
! 142: reduce-asir-1
! 143: (asir-tmp-out.tt) pushfile asir-list-to-kan
! 144: } def
! 145:
! 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 :: ---> [$n !$ $a_d x^d + ...$] )
! 167: (Example: [(x^2-1). (x y -2).] (x,y) hilbert (x) hilbReduce --> m x^d + ...::)
! 168: ( where m is the multiplicity.)
! 169: (cf.: hilbReduce, data_conversion, map, get, pushfile)
! 170: (Note: The function call creates work files sm0-tmp.t, sm0-tmp-out.tt,)
! 171: ( sm0-tmp-log.t and sm0-tmp-out.t in the current directory.)
! 172: ]
! 173: ] putUsages
! 174:
! 175:
! 176: %% Ex. [(x^2) (y^3) (x y)] (x,y) execSm0
! 177: /execSm0 {
! 178: /arg2 set
! 179: /arg1 set
! 180: [/monoms /fd /tmp /vars] pushVariables
! 181: [
! 182: /monoms arg1 def
! 183: /vars arg2 def
! 184: (/bin/rm -f sm0-tmp-out.t sm0-tmp-out.tt sm0-tmp-log.t) system
! 185: (sm0-tmp.t) (w) file /fd set
! 186: fd ( ${-p,0}$ options ) writestring
! 187: fd ( $) writestring
! 188: ${$ vars $}$ 3 cat_n /tmp set
! 189: fd tmp writestring
! 190: fd ($ ) writestring
! 191: fd ( polynomial_ring set_up_ring ${-proof}$ options ) writestring
! 192: fd monoms writeArray
! 193: fd ( /ff = ff yaGroebner /gg = gg hilbert2 /ans = ) writestring
! 194: fd (ans :: ans decompose $sm0-tmp-out.t$ printn_to_file quit) writestring
! 195: fd closefile
! 196: (sm0 -f sm0-tmp.t >>sm0-tmp-log.t) system
! 197: (When the output is [$ a V^k + ... $ $p!$], the multiplicity is ) message
! 198: $ (k! a)/p! $ message
! 199: ( ) message
! 200: ] pop
! 201: popVariables
! 202: } def
! 203:
! 204:
! 205: /writeArray {
! 206: /arg2 set /arg1 set
! 207: [/fd /arr /k] pushVariables
! 208: [ /fd arg1 def
! 209: /arr arg2 def
! 210: fd ([ ) writestring
! 211: 0 1 arr length 1 sub
! 212: {
! 213: /k set
! 214: fd ($ ) writestring
! 215: fd arr k get writestring
! 216: fd ($ ) writestring
! 217: } for
! 218: fd ( ] ) writestring
! 219: ] pop
! 220: popVariables
! 221: } def
! 222:
! 223: [(hilbReduce)
! 224: [([f,g] v hilbReduce h)
! 225: $ [(x-z). (y^3).] (x,y,z) hilbert (x) hilbReduce $
! 226: ]
! 227: ] putUsages
! 228: /hilbReduce {
! 229: /arg2 set
! 230: /arg1 set
! 231: [/hhh /f /d /vv /ans] pushVariables
! 232: [
! 233: /hhh arg1 def
! 234: /vv arg2 def
! 235: /f hhh 1 get . def
! 236: f vv . degree /vv set
! 237: hhh 0 get /d set d << d length 1 sub >> 0 put %% remove !
! 238: << d .. >> << d .. (integer) dc >> factorial /d set
! 239: d << vv (universalNumber) dc vv factorial >> idiv /d set
! 240: [(divByN) f d] gbext /ans set
! 241: ans 1 get (0). eq
! 242: { }
! 243: { (hilbReduce : Invalid hilbert function ) message error } ifelse
! 244: ans 0 get /arg1 set
! 245: ] pop
! 246: popVariables
! 247: arg1
! 248: } def[(hilbReduce)
! 249: [([f,g] v hilbReduce h)
! 250: $ [(x-z). (y^3).] (x,y,z) hilbert (x) hilbReduce $
! 251: ]
! 252: ] putUsages
! 253: /hilbReduce {
! 254: /arg2 set
! 255: /arg1 set
! 256: [/hhh /f /d /vv /ans] pushVariables
! 257: [
! 258: /hhh arg1 def
! 259: /vv arg2 def
! 260: /f hhh 1 get . def
! 261: f vv . degree /vv set
! 262: hhh 0 get /d set d << d length 1 sub >> 0 put %% remove !
! 263: << d .. >> << d .. (integer) dc >> factorial /d set
! 264: d << vv (universalNumber) dc vv factorial >> idiv /d set
! 265: [(divByN) f d] gbext /ans set
! 266: ans 1 get (0). eq
! 267: { }
! 268: { (hilbReduce : Invalid hilbert function ) message error } ifelse
! 269: ans 0 get /arg1 set
! 270: ] pop
! 271: popVariables
! 272: arg1
! 273: } def
! 274:
! 275: (Loaded macros "factor", "cancel", "hilbert", "hilbReduce".) message
! 276:
! 277:
! 278:
! 279:
! 280:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>