# 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 Rn, 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×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 ∂y + z ∂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 Rn). 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-z2=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
• isFiniteStratification(StratificationByRank), see isFiniteStratification -- checks if a stratification by integral submanifolds is finite