This computes the module of vector fields that, as derivations, send each element of I (or L) to an element of J. This can be used to calculate, for example, the module of vector fields tangent to an algebraic variety (see derlog).
Note that der(I,J) is always a subset of der(list of generators of I,J), and frequently a proper subset.
For der(L,J), the computation is done by finding the syzygies between the partial derivatives of the entries of L and the generators of J. This method of computation was adapted from Singular's KVequiv.lib, written by Anne Frühbis-Krüger.
For der(I,J), we intersect der(list of generators of I,J) with the free module consisting of vector fields with coefficients in J:I; the latter is unnecessary when I is a subset of J.
For example, consider the following ideals.
i1 : R=QQ[x,y]; |
i2 : I=ideal (x*y); o2 : Ideal of R |
i3 : J=ideal (0_R); o3 : Ideal of R |
i4 : K=ideal (x,y); o4 : Ideal of R |
Every vector field sends the zero ideal to zero:
i5 : der(J,I) 2 o5 = R o5 : R-module, free |
i6 : der(J,K) 2 o6 = R o6 : R-module, free |
This finds the vector fields tangent to x*y=0 (see derlog):
i7 : D=der(I,I) o7 = image | x 0 | | 0 y | 2 o7 : R-module, submodule of R |
i8 : applyVectorField(D,I) o8 = ideal(x*y) o8 : Ideal of R |
This finds the vector fields annihilating x*y (see derlogH):
i9 : D=der({x*y},J) o9 = image | x | | -y | 2 o9 : R-module, submodule of R |
This is different than
i10 : der(I,J) o10 = image 0 2 o10 : R-module, submodule of R |
because, for example, the generator of D does not annihilate x^2*y:
i11 : applyVectorField(gens D,x^2*y) 2 o11 = x y o11 : R |
Another illustration of the difference is:
i12 : der({x},ideal (y)) o12 = image | 0 y | | 1 0 | 2 o12 : R-module, submodule of R |
i13 : der(ideal (x),ideal (y)) o13 = image | y 0 | | 0 y | 2 o13 : R-module, submodule of R |
This illustrates a basic identity:
i14 : intersect(der(ideal (x),K),der(ideal (y),K))==der(K,K) o14 = true |
The object der is a method function.