[BACK]Return to r-interface.sm1 CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Doc

Annotation of OpenXM/src/kan96xx/Doc/r-interface.sm1, Revision 1.1

1.1     ! maekawa     1: %% oaku/Restriction/r-interface.sm1   1998,  4/30. 5/8. 5/12, 11/14
        !             2: %% 1999, 9/9
        !             3: %% lib/r-interface.sm1
        !             4: %%
        !             5: %% r-interface.sm1 is kept in this directory for the compatibility to
        !             6: %% old demo programs and packages.  It is being merged to
        !             7: %%     resol0.sm1        cf. tower.sm1, tower-sugar.sm1, restall_s.sm1,
        !             8: %%                           restall.sm1
        !             9: %% 1999, 9/9 : this file is stilled being modified for vector input.
        !            10: %%             wbfRoots (oxasir.sm1, intw.sm1) is used to get b-function
        !            11: %%             for modules. Note that wbfRoots works only for generic
        !            12: %%             weights.
        !            13: %%
        !            14: /r-interface.version (2.981105) def
        !            15: /r-interface.verbose 0 def
        !            16: /deRham.verbose 0 def
        !            17: %% /BFnotruncate 1 def  Controlled from cohom.sm1
        !            18:
        !            19: r-interface.version [(Version)] system_variable gt
        !            20: { (This package requires the latest version of kan/sm1) message
        !            21:   (Please get it from http://www.math.kobe-u.ac.jp/KAN) message
        !            22:   error
        !            23: } { } ifelse
        !            24:
        !            25: [(restriction)
        !            26:  [
        !            27:   ( [[f1 f2 ...] [t1 t2 ...] [vars params] [k0 k1 limitdeg ]] restriction )
        !            28:   (  [ 0-th cohomology group,  (-1)-th cohomology group, .... ] )
        !            29:   ( )
        !            30:   ( [[f1 f2 ...] [t1 t2 ...] [vars params] limitdeg] restriction )
        !            31:   ( )
        !            32:   (This function can be used by loading the experimental package cohom.sm1.)
        !            33:   (Restriction of the D-ideal [f1 f2 ...] to t1=0, t2=0, ... is computed. )
        !            34:   (vars is a list of the variables and params is a list of parameters. )
        !            35:   (k0 is the minimum integral root of the b-function and k1 is the maximum)
        !            36:   (integral root of the b-function. If these values are not given and)
        !            37:   (they are small, then they are automatically computed. The program returns)
        !            38:   ( 0-th, ..., -limitdeg-th cohomology groups.)
        !            39:   ([vars params] and [k0 k1 deg] are optional arguments.)
        !            40:   (If vars and params are not given, the values of the global variables)
        !            41:   (BFvarlist and BFparlist will be used.)
        !            42:   (   )
        !            43:   (For the algorithm, see math.AG/9805006, http://xxx.langl.gov)
        !            44:   (  )
        !            45:   (Example 1: cf. math.AG/9801114, Example 1.4 )
        !            46:   $  [[(- 2 x Dx - 3 y Dy +1) (3 y Dx^2 - 2 x Dy)] $
        !            47:   $     [(x) (y)] [[(x) (y)] [ ]]] restriction  ::   $
        !            48:   $[    [    0 , [   ]  ]  , [    1 , [   ]  ]  , [    1 , [   ]  ]  ] $
        !            49:   $       H^0 = 0,     H^(-1)= C^1/(no relation), H^(-2)=C^1/(no relation).$
        !            50:   (Example 2: )
        !            51:   $[[(x Dx-1) (Dy^2)] [(y)] [[(x) (y)] [ ]]] restriction ::$
        !            52:   $[    [    2 , [    -x*Dx+1 , -x*e*Dx+e ]  ]  , [    0 , [   ]  ]  ]$
        !            53:   $     H^0=D_1^2/([-x Dx+1,0],[0, -x Dx + 1]),  H^(-1) = 0 $
        !            54:   $     where  e^0, e^1, e^2, ..., e^(m-1) are standard basis vectors of$
        !            55:   $            rank m free module (D_1)^m. D_1 is the ring of differential$
        !            56:   $            opertors of one variable x.$
        !            57:   (Example 3: )
        !            58:   $[[(x Dx-1) (Dy^2)] [(y)] [[(x) (y)] [ ]] 0] restriction ::$
        !            59:   (Example 4: )
        !            60:   $[[[(0) (x^2 Dx+x)] [(Dx^2+x Dx^3) (0)]] [(x)] [[(x)] [ ]]] restriction ::$
        !            61:   $In case of vector input,  RESTRICTION VARIABLES MUST APPEAR FIRST$
        !            62:   $in the list of variable. We are using wbfRoots to get the roots of $
        !            63:   $b-functions, so we can use only generic weight vector for now.$
        !            64: ]
        !            65: ] putUsages
        !            66:
        !            67: /restriction {
        !            68:   /arg1 set
        !            69:   [/in-restriction /ppp /verbose /nnn /k0 /k1 /limitdeg
        !            70:    /x-vars  /params  /mmm /zzz /rest.bfunc
        !            71:    /gg  %% it is not used in restriction, but restall*.sm1 destroys gg.
        !            72:    /vectorInput /wvec
        !            73:   ] pushVariables
        !            74:   [(CurrentRingp) (KanGBmessage)] pushEnv
        !            75:   [
        !            76:      /ppp arg1 def
        !            77:      /verbose 1 def
        !            78:      ppp
        !            79:      (restriction: argument must be an array.)
        !            80:      rest.listq pop
        !            81:
        !            82:      /nnn ppp length def
        !            83:      nnn 2 lt nnn 4 gt or
        !            84:      { (restriction: too many or too few arguments) message
        !            85:        (restriction) usage  error } { } ifelse
        !            86:
        !            87:      nnn 3 eq nnn 4 eq or
        !            88:      {
        !            89:        %% set up global variables.
        !            90:        ppp 2 get
        !            91:        (restriction: the third argument must be [vars params] or [vars]. For example, [[(x) (y)]].)
        !            92:        rest.listq pop
        !            93:
        !            94:        ppp 2 get length 2 eq { }
        !            95:        { ppp 2 get length 1 eq {
        !            96:          ppp 2 << ppp 2 get [ ] append  >> put
        !            97:          }
        !            98:          {
        !            99:           (restriction: the third argument must be [vars params]) message
        !           100:            error } ifelse
        !           101:        } ifelse
        !           102:        ppp 2 get 0 get (vars must be an array.) rest.listq
        !           103:                        { toString} map /x-vars set
        !           104:        ppp 2 get 1 get (params must be an array.) rest.listq
        !           105:                        { toString} map /params set
        !           106:      }
        !           107:      {/x-vars BFvarlist def /params BFparlist def } ifelse
        !           108:
        !           109:
        !           110:
        !           111:      /mmm ppp 0 get def  %% module
        !           112:      /zzz ppp 1 get def  %% algebraic set (zero set)
        !           113:      mmm
        !           114:      (restriction: the first argument must be list of polynomials)
        !           115:      rest.listq pop
        !           116:
        !           117:      mmm length 0 eq {
        !           118:        (restriction: the input matrix does not contain generators.) message
        !           119:         error
        !           120:      } { } ifelse
        !           121:      mmm 0 get isArray {
        !           122:        /vectorInput 1 def
        !           123:      } {
        !           124:        /vectorInput 0 def
        !           125:      } ifelse
        !           126:      %% (vectorInput=) messagen vectorInput message
        !           127:
        !           128:      zzz
        !           129:      (restriction: the second argument must be list of polynomials)
        !           130:      rest.listq pop
        !           131:
        !           132:      [x-vars params join from_records ring_of_differential_operators 0]
        !           133:      define_ring
        !           134:      vectorInput {
        !           135:        mmm { {toString . dehomogenize}map } map /mmm set
        !           136:
        !           137:        mmm { {toString} map } map /mmm set
        !           138:      }{
        !           139:        mmm { toString . dehomogenize } map /mmm set
        !           140:
        !           141:        mmm { toString } map /mmm set
        !           142:      } ifelse
        !           143:      zzz { toString } map /zzz set
        !           144:
        !           145:      x-vars rest.checkReserved
        !           146:      params rest.checkReserved
        !           147:
        !           148:      /BFvarlist x-vars def /BFparlist params def
        !           149:
        !           150:      [(KanGBmessage) r-interface.verbose] system_variable
        !           151:
        !           152:
        !           153:      nnn 2 eq nnn 3 eq or
        !           154:      {  %% set up k0, k1 and limitdeg by computing b-functions.
        !           155:         vectorInput {
        !           156:           r-interface.load.oxasir.wint
        !           157:           /wvec zzz { -1 } map zzz { xtoDx } map { 1 } map join def
        !           158:           [mmm BFvarlist wvec] messagen ( wbfRoots ) message
        !           159:           [mmm BFvarlist wvec] wbfRoots /tmp set
        !           160:         }{
        !           161:           [mmm zzz] messagen (bfm ) message
        !           162:           mmm zzz bfm /rest.bfunc00 set
        !           163:           rest.bfunc00 length 0 eq {
        !           164:             (restriction: No b-function. The input may not be holonomic.) error
        !           165:           } { } ifelse
        !           166:           rest.bfunc00 0 get /rest.bfunc set
        !           167:           (b-function is ) messagen rest.bfunc message
        !           168:           rest.bfunc findIntegralRoots /tmp set
        !           169:         } ifelse
        !           170:         tmp length 0 eq
        !           171:         { (All cohomology groups are zero.) message
        !           172:            /arg1 null def
        !           173:            /r-interface.sortir goto
        !           174:         } { } ifelse
        !           175:         tmp 0 get /k0 set
        !           176:         tmp << tmp length 1 sub >> get /k1 set
        !           177:         /limitdeg zzz length def
        !           178:       }
        !           179:       {
        !           180:          ppp 3 get isInteger
        !           181:          {
        !           182:             /limitdeg ppp 3 get def
        !           183:             vectorInput {
        !           184:              r-interface.load.oxasir.wint
        !           185:               /wvec zzz { -1 } map zzz { xtoDx } map { 1 } map join def
        !           186:               [mmm BFvarlist wvec] messagen ( wbfRoots ) message
        !           187:               [mmm BFvarlist wvec] wbfRoots /tmp set
        !           188:             }{
        !           189:               [mmm zzz] messagen (bfm ) message
        !           190:               mmm zzz bfm /rest.bfunc00 set
        !           191:               rest.bfunc00 length 0 eq {
        !           192:                 (restriction: No b-function. The input may not be holonomic.) error
        !           193:               } { } ifelse
        !           194:               rest.bfunc00 0 get /rest.bfunc set
        !           195:               (b-function is ) messagen rest.bfunc message
        !           196:               rest.bfunc findIntegralRoots /tmp set
        !           197:             } ifelse
        !           198:             tmp length 0 eq
        !           199:             { (All cohomology groups are zero.) message
        !           200:               /arg1 null def
        !           201:              /r-interface.sortir goto
        !           202:             } { } ifelse
        !           203:             tmp 0 get /k0 set
        !           204:             tmp << tmp length 1 sub >> get /k1 set
        !           205:          } {
        !           206:           ppp 3 get
        !           207:           (restriction: the fourth argument must be [k0 k1 limitdeg])
        !           208:           rest.listq pop
        !           209:
        !           210:           ppp 3 get length 3 eq { }
        !           211:           { (restriction: the fourth argument must be [k0 k1 limitdeg]) message
        !           212:             error } ifelse
        !           213:           ppp 3 get 0 get /k0 set
        !           214:           ppp 3 get 1 get /k1 set
        !           215:           ppp 3 get 2 get /limitdeg set
        !           216:          }ifelse
        !           217:       } ifelse
        !           218:
        !           219:      BFnotruncate {
        !           220:        [mmm zzz k1 limitdeg] messagen ( restall1_s ) message
        !           221:         mmm zzz k1 limitdeg restall1_s /arg1 set
        !           222:      } {
        !           223:        [mmm zzz k0 k1 limitdeg] messagen ( restall_s ) message
        !           224:         mmm zzz k0 k1 limitdeg restall_s /arg1 set
        !           225:      } ifelse
        !           226:      /r-interface.sortir
        !           227:    ] pop
        !           228:    popEnv
        !           229:    popVariables
        !           230:    arg1
        !           231: } def
        !           232:
        !           233: /rest.listq {
        !           234:   /arg2 set /arg1 set
        !           235:   [/in-rest.listq /sss /aaa] pushVariables
        !           236:   [
        !           237:      /aaa arg1 def /sss arg2 def
        !           238:      aaa isArray { }
        !           239:      {  sss message
        !           240:         error
        !           241:      } ifelse
        !           242:      /arg1 aaa def
        !           243:    ]pop
        !           244:    popVariables
        !           245:   arg1
        !           246: } def
        !           247:
        !           248: /rest.checkReserved {
        !           249:    % check if s is used.
        !           250:   /arg1 set
        !           251:   [/in-rest.checkReserved /vlist /tmp] pushVariables
        !           252:   [ /vlist arg1 def
        !           253:     vlist (s) position /tmp set
        !           254:     tmp -1 gt
        !           255:     { (s is the reserved variable.) error }
        !           256:     { } ifelse
        !           257:   ] pop
        !           258:   popVariables
        !           259: } def
        !           260:
        !           261: [(integration)
        !           262: [
        !           263:   ( [[f1 f2 ...] [t1 t2 ...] [vars params] [k0 k1 limitdeg ]] integration )
        !           264:   (  [ 0-th cohomology group,  (-1)-th cohomology group, .... ] )
        !           265:   ( )
        !           266:   ( [[f1 f2 ...] [t1 t2 ...] [vars params] limitdeg] integration )
        !           267:   ( )
        !           268:   (This function can be used by loading the experimental package cohom.sm1.)
        !           269:   (Integration of the D-ideal [f1 f2 ...] to t1=0, t2=0, ... is computed. )
        !           270:   (vars is a list of the variables and params is a list of parameters. )
        !           271:   (k0 is the minimum integral root of the b-function and k1 is the maximum)
        !           272:   (integral root of the b-function. If these values are not given and)
        !           273:   (they are small, then they are automatically computed. The program returns)
        !           274:   ( 0-th, ..., -limitdeg-th cohomology groups.)
        !           275:   ([vars params] and [k0 k1 deg] are optional arguments.)
        !           276:   (If vars and params are not given, the values of the global variables)
        !           277:   (BFvarlist and BFparlist will be used.)
        !           278:   (The operator restriciton will be used after the laplace transformation.)
        !           279:   (   )
        !           280:   (For the algorithm, see math.AG/9805006, http://xxx.langl.gov)
        !           281:   (  )
        !           282:   (Example 1: )
        !           283:   $[[(x (x-1)) (x) ] annfs 0 get
        !           284:      [(x)] [[(x)] [ ]]] integration ::$
        !           285:   (Example 2: )
        !           286:   $[ [(Dt - (3 t^2-x)) (Dx + t)] [(t)]
        !           287:      [[(t) (x)] [ ]] 0] integration ::$
        !           288:   (Example 3: )
        !           289:   $[ [[(Dt - (3 t^2-x)) (0)] [ (Dx + t) (0)]] [(t)]
        !           290:      [[(t) (x)] [ ]] 0] integration ::$
        !           291:   $In case of vector input, INTEGRAL VARIABLES MUST APPEAR FIRST$
        !           292:   $in the list of variable. We are using wbfRoots to get the roots of $
        !           293:   $b-functions, so we can use only generic weight vector for now.$
        !           294: ]
        !           295: ] putUsages
        !           296:
        !           297: /integration {
        !           298:   /arg1 set
        !           299:   [/in-integration /intvars /intvarsD /vars /params /inputs /aaa
        !           300:    /vectorInput
        !           301:   ] pushVariables
        !           302:   [
        !           303:      /aaa arg1 def
        !           304:      /inputs aaa 0 get def
        !           305:      /intvars aaa 1 get def
        !           306:      /vars   aaa 2 get 0 get def
        !           307:      /params aaa 2 get 1 get def
        !           308:      [ vars params join from_records ring_of_differential_operators 0]
        !           309:      define_ring  pop
        !           310:      inputs 0 get isArray {
        !           311:        /vectorInput 1 def
        !           312:      }{
        !           313:        /vectorInput 0 def
        !           314:      } ifelse
        !           315:      vectorInput {
        !           316:        inputs { {toString . dehomogenize} map } map /inputs set
        !           317:      }{
        !           318:        inputs { toString . dehomogenize } map /inputs set
        !           319:      } ifelse
        !           320:      /intvarsD  intvars { @@@.Dsymbol 2 1 roll 2 cat_n } map def
        !           321:      vectorInput {
        !           322:        inputs { {intvars intvarsD join laplace0}map } map /inputs set
        !           323:      }{
        !           324:        inputs { intvars intvarsD join laplace0 } map /inputs set
        !           325:      } ifelse
        !           326:
        !           327:      aaa 0 get messagen ( ==> ) messagen inputs message
        !           328:      aaa 0 inputs put
        !           329:      aaa restriction /arg1 set
        !           330:
        !           331:   ] pop
        !           332:   arg1
        !           333: } def
        !           334:
        !           335:
        !           336: [(deRham)
        !           337:  [([f v] deRham c)
        !           338:  (string f; string v;  f is a polynomial given by a string.)
        !           339:  (This function can be used by loading the experimental package cohom.sm1. )
        !           340:  (The dimensions of the deRham cohomology groups H^i(C^n - V(f),C) i=0, i=1, ..)
        !           341:  (.., n are returned in c.)
        !           342:  (For example, if c=[1 4 6 4], then it means that dim H^0(C^3-V(f),C) = 1,)
        !           343:  (dim H^1(C^3-V(f),C) = 4, and so on.)
        !           344:  (For the algorithm, see "An algorithm for de Rham cohomology groups of the)
        !           345:  (complement of an affine variety via D-module computation", )
        !           346:  $Journal of pure and applied algebra, 139 (1999), 201--233. math.AG/9801114$
        !           347:  (  )
        !           348:  (Example 0:  [(x (x-1) (x-2)) (x)] deRham )
        !           349:  (Example 1: [(x y (x+y-1)(x-2)) (x,y)] deRham )
        !           350:  (Example 2: [(x^3-y^2) (x,y)] deRham )
        !           351:  (Example 3: [(x^3-y^2 z^2) (x,y,z)] deRham )
        !           352:  (Example 4: [(x y z (x+y+z-1)) (x,y,z)] deRham )
        !           353: ]] putUsages
        !           354: %% [(x+y+z) (x,y,z)] deRham  ---> error in bfm, 1998, 11/27
        !           355: /deRham {
        !           356:  /arg1 set
        !           357:  [/in-deRham /f /v /vlist /vlist0 /ff0 /ff2 /ttt
        !           358:   /r-interface.verbose /tower.verbose /fs.verbose /ans
        !           359:  ] pushVariables
        !           360:  [
        !           361:    /r-interface.verbose deRham.verbose def
        !           362:    /tower.verbose deRham.verbose def
        !           363:    /fs.verbose deRham.verbose def
        !           364:    /f arg1 0 get def
        !           365:    /v arg1 1 get def
        !           366:    v isArray {
        !           367:      /v v {toString} map from_records def
        !           368:    } {  } ifelse
        !           369:    /vlist0 [v to_records pop] def
        !           370:    /vlist [v to_records pop] dup { /ttt set @@@.Dsymbol ttt 2 cat_n } map
        !           371:           join def
        !           372:    [f v] annfs  0 get /ff0 set
        !           373:
        !           374:     ff0 { vlist laplace0 } map /ff2 set
        !           375:    [ff2 vlist0 [vlist0 [ ]]] restriction /ans set
        !           376:    /arg1 ans {deRham.simp} map reverse def
        !           377:  ] pop
        !           378:  popVariables
        !           379:  arg1
        !           380: } def
        !           381:
        !           382: %% [3 , [1, e]] ==> 1
        !           383: /deRham.simp {
        !           384:   /arg1 set
        !           385:   [/in-deRham.simp /gg /kk] pushVariables
        !           386:   [(KanGBmessage)] pushEnv
        !           387:   [
        !           388:     /kk arg1 0 get def
        !           389:     /gg arg1 1 get def
        !           390:     [(KanGBmessage) r-interface.verbose] system_variable
        !           391:     gg length 0 eq {    }
        !           392:     {
        !           393:       kk [gg] groebner_sugar 0 get length sub /kk set
        !           394:     } ifelse
        !           395:     /arg1 kk def
        !           396:   ] pop
        !           397:   popEnv
        !           398:   popVariables
        !           399:   arg1
        !           400: } def
        !           401:
        !           402:
        !           403: /r-interface.load.oxasir.wint {
        !           404:  [
        !           405:   oxasir.sm1.loaded tag 0 eq {
        !           406:     (Loading oxasir.sm1 )  messagen
        !           407:     [(parse) (oxasir.sm1) pushfile] extension
        !           408:   }{
        !           409:   } ifelse
        !           410:   intw.sm1.loaded tag 0 eq {
        !           411:     (Loading intw.sm1 )  messagen
        !           412:     [(parse) (intw.sm1) pushfile] extension
        !           413:   }{
        !           414:   } ifelse
        !           415:  ] pop
        !           416: } def

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>