version 1.1, 1999/10/08 02:12:02 |
version 1.6, 2000/12/29 07:19:37 |
|
|
|
% $OpenXM: OpenXM/src/kan96xx/Doc/complex.sm1,v 1.5 2000/08/01 07:26:23 takayama Exp $ |
%% lib/complex.sm1 [ functions for complex ], 1999, 9/9 |
%% lib/complex.sm1 [ functions for complex ], 1999, 9/9 |
%% cf. yama:1999/Int/uli.sm1 |
%% cf. yama:1999/Int/uli.sm1 |
%%%%%%%%%%%%%%%%%%% commands %%%%%%%%%%%%%%%%%%%%%%%%% |
%%%%%%%%%%%%%%%%%%% commands %%%%%%%%%%%%%%%%%%%%%%%%% |
%%% res-div, res-solv, res-kernel-image, res-dual |
%%% res-div, res-solv, res-kernel-image, res-dual |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
[(complex.sm1 : 1999, 9/28, 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.) |
(In this package, complex is expressed in terms of matrices.) |
] {message} map |
] {message-quiet} map |
/uli.verbose 0 def |
/uli.verbose 0 def |
/uli.weight [(x) -1 (y) -1 (Dx) 1 (Dy) 1] def |
/uli.weight [(x) -1 (y) -1 (Dx) 1 (Dy) 1] def |
|
|
|
|
%% [M d] res-solv c'/r ; M : matrix, d, c' : vectors, r : scalar, c'/r =c |
%% [M d] res-solv c'/r ; M : matrix, d, c' : vectors, r : scalar, c'/r =c |
/res-solv { |
/res-solv { |
/arg1 set |
/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 |
[(CurrentRingp) (KanGBmessage)] pushEnv |
[ |
[ |
|
/nn arg1 length def |
/M arg1 0 get def |
/M arg1 0 get def |
/d arg1 1 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 |
rng res-getx /vv set |
uli.verbose { (res-solv : vv = ) messagen vv message } { } ifelse |
uli.verbose { (res-solv : vv = ) messagen vv message } { } ifelse |
uli.verbose { } { [(KanGBmessage) 0] system_variable } ifelse |
uli.verbose { } { [(KanGBmessage) 0] system_variable } ifelse |
|
|
(Note that M and d are not treated as an element of the homogenized Weyl) |
(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) |
(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) |
(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] $ |
$Example 1: [(x,y) ring_of_differential_operators [[(x) -1 (Dx) 1]] weight_vector 0] $ |
$ define_ring $ |
$ define_ring $ |
$ [ [ [(x Dx + 2).] [ (Dx (x Dx + 3) - (x Dx + 2) (x Dx -4)).]] [(1).]] $ |
$ [ [ [(x Dx + 2).] [ (Dx (x Dx + 3) - (x Dx + 2) (x Dx -4)).]] [(1).]] $ |
|
|
%% M : matrix, d, c' : vectors, r : scalar, c'/r =c |
%% M : matrix, d, c' : vectors, r : scalar, c'/r =c |
/res-solv-h { |
/res-solv-h { |
/arg1 set |
/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 |
[(CurrentRingp) (KanGBmessage)] pushEnv |
[ |
[ |
|
/nn arg1 length def |
/M arg1 0 get def |
/M arg1 0 get def |
/d arg1 1 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 |
rng res-getx /vv set |
uli.verbose { (res-solv-h : vv = ) messagen vv message } { } ifelse |
uli.verbose { (res-solv-h : vv = ) messagen vv message } { } ifelse |
uli.verbose { } { [(KanGBmessage) 0] system_variable } ifelse |
uli.verbose { } { [(KanGBmessage) 0] system_variable } ifelse |
|
|
$ [[(y1) 1 (y2) 1 (y3) 1 (y4) 1]]] pgb $ |
$ [[(y1) 1 (y2) 1 (y3) 1 (y4) 1]]] pgb $ |
$ 0 get [(y1) (y2) (y3) (y4)] eliminatev ::$ |
$ 0 get [(y1) (y2) (y3) (y4)] eliminatev ::$ |
$Example 2: [[(x2^2) (x2 x4) (x2) (x4^2)] [(x2) (x4)] (x2,x4)] saturation$ |
$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<h>, 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<h> do not always give generators of ) |
|
( the corresponding syzygy of f_i in D.) |
]] putUsages |
]] putUsages |
|
|