=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/complex.sm1,v retrieving revision 1.2 retrieving revision 1.3 diff -u -p -r1.2 -r1.3 --- OpenXM/src/kan96xx/Doc/complex.sm1 2000/03/23 11:54:08 1.2 +++ OpenXM/src/kan96xx/Doc/complex.sm1 2000/06/08 08:35:01 1.3 @@ -1,10 +1,11 @@ -% $OpenXM$ +% $OpenXM: OpenXM/src/kan96xx/Doc/complex.sm1,v 1.2 2000/03/23 11:54:08 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 /uli.verbose 0 def @@ -902,5 +903,96 @@ $ [[(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 + 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 + 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