=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/complex.sm1,v retrieving revision 1.1.1.1 retrieving revision 1.7 diff -u -p -r1.1.1.1 -r1.7 --- OpenXM/src/kan96xx/Doc/complex.sm1 1999/10/08 02:12:02 1.1.1.1 +++ OpenXM/src/kan96xx/Doc/complex.sm1 2001/11/26 01:25:44 1.7 @@ -1,11 +1,13 @@ +% $OpenXM: OpenXM/src/kan96xx/Doc/complex.sm1,v 1.6 2000/12/29 07:19:37 takayama Exp $ %% lib/complex.sm1 [ functions for complex ], 1999, 9/9 %% cf. yama:1999/Int/uli.sm1 %%%%%%%%%%%%%%%%%%% commands %%%%%%%%%%%%%%%%%%%%%%%%% %%% res-div, res-solv, res-kernel-image, res-dual %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [(complex.sm1 : 1999, 9/28, res-div, res-solv, res-kernel-image, res-dual ) + ( 2000, 6/8, isExact_h, isExact ) (In this package, complex is expressed in terms of matrices.) -] {message} map +] {message-quiet} map /uli.verbose 0 def /uli.weight [(x) -1 (y) -1 (Dx) 1 (Dy) 1] def @@ -265,12 +267,19 @@ %% [M d] res-solv c'/r ; M : matrix, d, c' : vectors, r : scalar, c'/r =c /res-solv { /arg1 set - [/in-res-solv /M /d /ans /B /vv /G /rr /rng] pushVariables + [/in-res-solv /M /d /ans /B /vv /G /rr /rng /nn] pushVariables [(CurrentRingp) (KanGBmessage)] pushEnv [ + /nn arg1 length def /M arg1 0 get def /d arg1 1 get def - M getRing /rng set + nn 3 eq { + /rng arg1 2 get def + }{ + M getRing /rng set + rng tag RingP eq { } + { d getRing /rng set } ifelse + }ifelse rng res-getx /vv set uli.verbose { (res-solv : vv = ) messagen vv message } { } ifelse uli.verbose { } { [(KanGBmessage) 0] system_variable } ifelse @@ -316,6 +325,9 @@ (Note that M and d are not treated as an element of the homogenized Weyl) (algebra. If M or d contains the homogenization variable h, it automatically) (set to 1. If you need to use h, use the command res-solv-h) + $[M d rng] res-solv [c' r] $ + $ rng is a ring object. $ + $ res-solv extracts variables names from rng, but defines a new ring. $ $Example 1: [(x,y) ring_of_differential_operators [[(x) -1 (Dx) 1]] weight_vector 0] $ $ define_ring $ $ [ [ [(x Dx + 2).] [ (Dx (x Dx + 3) - (x Dx + 2) (x Dx -4)).]] [(1).]] $ @@ -357,12 +369,19 @@ %% M : matrix, d, c' : vectors, r : scalar, c'/r =c /res-solv-h { /arg1 set - [/in-res-solv-h /M /d /ans /B /vv /G /rr /rng] pushVariables + [/in-res-solv-h /M /d /ans /B /vv /G /rr /rng /nn] pushVariables [(CurrentRingp) (KanGBmessage)] pushEnv [ + /nn arg1 length def /M arg1 0 get def /d arg1 1 get def - M getRing /rng set + nn 3 eq { + /rng arg1 2 get def + }{ + M getRing /rng set + rng tag RingP eq { } + { d getRing /rng set } ifelse + }ifelse rng res-getx /vv set uli.verbose { (res-solv-h : vv = ) messagen vv message } { } ifelse uli.verbose { } { [(KanGBmessage) 0] system_variable } ifelse @@ -790,6 +809,9 @@ [(intersection) [(Ideal intersections in the ring of differential operators.) + ([ I1 I2 V-list ] intersection : I1 and I2 are ideals, and V-list) + (is a list of variables. It returns the ideal intersection of I1 and I2.) + (Intersection is computed in the ring of differential operators.) $Example 1: [[[(x1) (x2)] [(x2) (x4)] (x1,x2,x3,x4)] intersection$ $ [(x2) (x4^2)] (x1,x2,x3,x4)] intersection :: $ $Example 2: [[[(x1) (x2)] [(x2) (x4)] (x1,x2,x3,x4)] intersection$ @@ -901,5 +923,98 @@ $ [[(y1) 1 (y2) 1 (y3) 1 (y4) 1]]] pgb $ $ 0 get [(y1) (y2) (y3) (y4)] eliminatev ::$ $Example 2: [[(x2^2) (x2 x4) (x2) (x4^2)] [(x2) (x4)] (x2,x4)] saturation$ +]] putUsages + + +%% 2000, 6/8, at Fernando Colon, 319, Sevilla + + +/isExact.verbose 1 def %% should be changed to gb.verbose +/isExact_h { + /arg1 set + [/in-isExact_h /vv /comp /i /j /n /kernel.i /ans] pushVariables + [ + /comp arg1 0 get def + /vv arg1 1 get def + /n comp length def + /ans 1 def + 0 1 n 2 sub { + /i set + /j i 1 add def + isExact.verbose { (Checking ker ) messagen i messagen ( = im of ) messagen + j message } { } ifelse + [comp i get vv] syz_h 0 get /kernel.i set + [ kernel.i comp j get vv] isSameIdeal_h /ans set + ans 0 eq { + (image != kernel at ) messagen i messagen ( and ) messagen j message + /LLL.isExact_h goto + } { } ifelse + isExact.verbose { (OK) message } { } ifelse + } for + /LLL.isExact_h + /arg1 ans def + ] pop + popVariables + arg1 +} def + +[(isExact_h) +[( complex isExact_h bool ) + (It returns 1 when the given complex is exact. All computations are done) + (in D, the ring of homogenized differential operators.) + (cf. syz_h, isSameIdeal_h ) + $Example1: [ [[1 2 3]] [0]] gkz /ff set $ + $ [ff 0 get (x1,x2,x3) [[(x2) -1 (Dx2) 1]]] resol1 /gg set $ + $ [gg (x1,x2,x3)] isExact_h :: $ + $ gg 1 get 0 get /pp set $ + $ gg [1 1] pp put $ + $ [gg (x1,x2,x3)] isExact_h :: $ +]] putUsages + +/isExact { + /arg1 set + [/in-isExact /vv /comp /i /j /n /kernel.i /ans] pushVariables + [ + /comp arg1 0 get def + /vv arg1 1 get def + /n comp length def + /ans 1 def + 0 1 n 2 sub { + /i set + /j i 1 add def + isExact.verbose { (Checking ker ) messagen i messagen ( = im of ) messagen + j message } { } ifelse + [comp i get vv] syz 0 get /kernel.i set + [ kernel.i comp j get vv] isSameIdeal /ans set + ans 0 eq { + (image != kernel at ) messagen i messagen ( and ) messagen j message + /LLL.isExact goto + } { } ifelse + isExact.verbose { (OK) message } { } ifelse + } for + /LLL.isExact + /arg1 ans def + ] pop + popVariables + arg1 +} def + +[(isExact) +[( complex isExact bool ) + (It returns 1 when the given complex is exact. All computations are done) + (in D, the ring of differentialoperators. Inputs are dehomogenized.) + (cf. syz, isSameIdeal ) + $Example1: [ [[1 2 3]] [0]] gkz /ff set $ + $ [ff 0 get (x1,x2,x3) [[(x2) -1 (Dx2) 1]]] resol1 /gg set $ + $ [gg (x1,x2,x3)] isExact :: $ + $ gg 1 get 0 get /pp set $ + $ gg [1 1] pp put $ + $ [gg (x1,x2,x3)] isExact :: $ + $Example2: [ [[1 2 3]] [0]] gkz /ff set $ + $ [ff 0 get (x1,x2,x3) [[(x2) -1 (Dx2) 1]]] resol1 /gg set $ + $ gg dehomogenize /gg set $ + $ [gg (x1,x2,x3)] isExact :: $ + ( The syzygies of f_i^h in D do not always give generators of ) + ( the corresponding syzygy of f_i in D.) ]] putUsages