# VectorFields -- a package for manipulating polynomial vector fields

## Description

VectorFields provides functions to study polynomial vector fields on affine space, and modules of such vector fields. This package may be of interest to those studying representations of Lie groups, foliations, or logarithmic vector fields.

We represent a vector field on affine $n$-space as an element of the module $R^n$, where $R$ is a polynomial ring in $n$ variables. Concretely, the ordering of variables given by vars(R) is used to identify each vector field with a $n\times 1$ Matrix, and vice-versa, with each entry in the matrix storing the coefficient of a derivative with respect to a particular variable. For instance, on a 3-dimensional space the vector field $M=2y \partial_y + z \partial_z$ is entered this way:

 i1 : R=QQ[x,y,z]; i2 : vars(R) o2 = | x y z | 1 3 o2 : Matrix R <--- R i3 : M=matrix {{0},{2*y},{z}} o3 = | 0 | | 2y | | z | 3 1 o3 : Matrix R <--- R

Many functions in this package are designed to accept either a finite collection of vector fields (in the form of a Matrix where each column represents a vector field), or a module of vector fields (in the form of a submodule of $R^n$). These different versions may compute quite different things! For instance, the vector field in M commutes with itself:

 i4 : commutator(M) o4 = 0 3 o4 : Matrix R <--- 0 i5 : bracket(M,M) o5 = 0 3 1 o5 : Matrix R <--- R

but the vector fields in the module generated by M do not:

 i6 : commutator(image M) o6 = image | 0 0 0 | | 0 4y2 2yz | | 0 2yz z2 | 3 o6 : R-module, submodule of R i7 : bracket(M,y*M) o7 = | 0 | | 4y2 | | 2yz | 3 1 o7 : Matrix R <--- R

In other cases, the Matrix and Module versions of a function compute identical things, perhaps returning different types. For instance, here we apply vector fields to a function:

 i8 : applyVectorField(M,x*y-z^2) 2 o8 = 2x*y - 2z o8 : R i9 : applyVectorField(image M,x*y-z^2) 2 o9 = ideal(2x*y - 2z ) o9 : Ideal of R

See differences between certain bracketing functions for more details.

To show some capabilities of this package, let us use derlog to find the vector fields on the ambient space that are tangent to $xy-z^2=0$:

 i10 : D=derlog(ideal (x*y-z^2)) o10 = image | 2x 0 2z 0 | | 0 2y 0 2z | | z z y x | 3 o10 : R-module, submodule of R

Actually, $M$ is one of these vector fields:

 i11 : isSubset(image M,D) o11 = true

We may also check some properties of $D$:

 i12 : isVectorField(gens D) o12 = true i13 : isVectorField(D) o13 = true i14 : isLieAlgebra(D) o14 = true

Note that this package has been rewritten since version 1.0. Any users of the earlier version should upgrade with care, and read the comments inside the package's source code.

• commutator -- the commutator of a collection of vector fields
• bracket -- compute the Lie bracket of vector fields
• applyVectorField -- apply a vector field to a function or functions
• derlog -- compute the logarithmic (tangent) vector fields to an ideal
• isVectorField -- test whether a module or matrix can be interpreted as a collection of vector fields
• isLieAlgebra -- check that a module of vector fields is closed under the Lie bracket

## Version

This documentation describes version 1.80 of VectorFields.

## Source code

The source code from which this documentation is derived is in the file VectorFields.m2.

## Exports

• Types
• Functions and commands
• applyVectorField -- apply a vector field to a function or functions
• bracket -- compute the Lie bracket of vector fields
• commutator -- the commutator of a collection of vector fields
• der -- compute the module of vector fields which send one set to another
• derivedSeries -- compute the derived series of a set of vector fields
• derlog -- compute the logarithmic (tangent) vector fields to an ideal
• "derlogH" -- see derlog -- compute the logarithmic (tangent) vector fields to an ideal
• homogeneousVectorFieldDegree -- check if vector fields are homogeneous, and of what degree
• isFiniteStratification -- checks if a stratification by integral submanifolds is finite
• isFreeDivisor -- check if the provided information is associated with a free divisor
• isHHolonomic -- test whether a hypersurface is H-holonomic
• isHolonomic -- test whether an algebraic set is holonomic
• isHomogeneousVectorField -- determine whether a matrix or module is generated by homogeneous vector fields
• isLieAlgebra -- check that a module of vector fields is closed under the Lie bracket
• isLogarithmic -- check if the given vector fields are logarithmic
• isVectorField -- test whether a module or matrix can be interpreted as a collection of vector fields
• lowerCentralSeries -- compute the lower central series of a set of vector fields
• stratifyByRank -- compute ideals describing where the vector fields have a particular rank
• Methods
• "applyVectorField(Matrix,List)" -- see applyVectorField -- apply a vector field to a function or functions
• "applyVectorField(Matrix,RingElement)" -- see applyVectorField -- apply a vector field to a function or functions
• "applyVectorField(Module,Ideal)" -- see applyVectorField -- apply a vector field to a function or functions
• "applyVectorField(Module,RingElement)" -- see applyVectorField -- apply a vector field to a function or functions
• "applyVectorField(Vector,List)" -- see applyVectorField -- apply a vector field to a function or functions
• "applyVectorField(Vector,RingElement)" -- see applyVectorField -- apply a vector field to a function or functions
• "bracket(Matrix,Matrix)" -- see bracket -- compute the Lie bracket of vector fields
• "bracket(Matrix,Matrix,List)" -- see bracket -- compute the Lie bracket of vector fields
• "bracket(Module,Module)" -- see bracket -- compute the Lie bracket of vector fields
• "bracket(Vector,Vector)" -- see bracket -- compute the Lie bracket of vector fields
• "commutator(Matrix)" -- see commutator -- the commutator of a collection of vector fields
• "commutator(Module)" -- see commutator -- the commutator of a collection of vector fields
• "der(Ideal,Ideal)" -- see der -- compute the module of vector fields which send one set to another
• "der(VisibleList,Ideal)" -- see der -- compute the module of vector fields which send one set to another
• "derivedSeries(ZZ,Matrix)" -- see derivedSeries -- compute the derived series of a set of vector fields
• "derivedSeries(ZZ,Module)" -- see derivedSeries -- compute the derived series of a set of vector fields
• "derlog(Ideal)" -- see derlog -- compute the logarithmic (tangent) vector fields to an ideal
• "derlog(RingElement)" -- see derlog -- compute the logarithmic (tangent) vector fields to an ideal
• "derlogH(List)" -- see derlog -- compute the logarithmic (tangent) vector fields to an ideal
• "derlogH(RingElement)" -- see derlog -- compute the logarithmic (tangent) vector fields to an ideal
• "homogeneousVectorFieldDegree(Matrix)" -- see homogeneousVectorFieldDegree -- check if vector fields are homogeneous, and of what degree
• "homogeneousVectorFieldDegree(Module)" -- see homogeneousVectorFieldDegree -- check if vector fields are homogeneous, and of what degree
• "isFiniteStratification(StratificationByRank)" -- see isFiniteStratification -- checks if a stratification by integral submanifolds is finite
• "isFreeDivisor(Matrix)" -- see isFreeDivisor -- check if the provided information is associated with a free divisor
• "isFreeDivisor(Module)" -- see isFreeDivisor -- check if the provided information is associated with a free divisor
• "isFreeDivisor(RingElement)" -- see isFreeDivisor -- check if the provided information is associated with a free divisor
• "isHHolonomic(RingElement)" -- see isHHolonomic -- test whether a hypersurface is H-holonomic
• "isHolonomic(Ideal)" -- see isHolonomic -- test whether an algebraic set is holonomic
• "isHolonomic(RingElement)" -- see isHolonomic -- test whether an algebraic set is holonomic
• "isHomogeneousVectorField(Matrix)" -- see isHomogeneousVectorField -- determine whether a matrix or module is generated by homogeneous vector fields
• "isHomogeneousVectorField(Matrix,List)" -- see isHomogeneousVectorField -- determine whether a matrix or module is generated by homogeneous vector fields
• "isHomogeneousVectorField(Matrix,Set)" -- see isHomogeneousVectorField -- determine whether a matrix or module is generated by homogeneous vector fields
• "isHomogeneousVectorField(Module)" -- see isHomogeneousVectorField -- determine whether a matrix or module is generated by homogeneous vector fields
• "isHomogeneousVectorField(Module,List)" -- see isHomogeneousVectorField -- determine whether a matrix or module is generated by homogeneous vector fields
• "isHomogeneousVectorField(Module,Set)" -- see isHomogeneousVectorField -- determine whether a matrix or module is generated by homogeneous vector fields
• "isLieAlgebra(Module)" -- see isLieAlgebra -- check that a module of vector fields is closed under the Lie bracket
• "isLogarithmic(Matrix,Ideal)" -- see isLogarithmic -- check if the given vector fields are logarithmic
• "isLogarithmic(Module,Ideal)" -- see isLogarithmic -- check if the given vector fields are logarithmic
• "isLogarithmic(Vector,Ideal)" -- see isLogarithmic -- check if the given vector fields are logarithmic
• "isVectorField(Matrix)" -- see isVectorField -- test whether a module or matrix can be interpreted as a collection of vector fields
• "isVectorField(Module)" -- see isVectorField -- test whether a module or matrix can be interpreted as a collection of vector fields
• "lowerCentralSeries(ZZ,Matrix)" -- see lowerCentralSeries -- compute the lower central series of a set of vector fields
• "lowerCentralSeries(ZZ,Module)" -- see lowerCentralSeries -- compute the lower central series of a set of vector fields
• "stratifyByRank(Matrix)" -- see stratifyByRank -- compute ideals describing where the vector fields have a particular rank
• "stratifyByRank(Module)" -- see stratifyByRank -- compute ideals describing where the vector fields have a particular rank

## For the programmer

The object VectorFields is .