Macaulay2 » Documentation
Packages » VectorFields :: bracket
next | previous | forward | backward | up | index | toc

bracket -- compute the Lie bracket of vector fields

Synopsis

Description

This computes the Lie bracket of pairs of vector fields from the first and second parameters. If $D_1$ and $D_2$ are vector fields, then the Lie bracket of $D_1$ and $D_2$, denoted $[D_1,D_2]$, is the vector field $F$ such that $F(g)=D_1(D_2(g))-D_2(D_1(g))$ for all $g$, where $V(f)$ denotes the operation of applying a vector field to a function (see applyVectorField).

When the first two parameters are matrices M1 and M2, this function returns a Matrix of (numColumns(M1))*(numColumns(M2)) columns, consisting of all possible brackets of a column from M1 with a column from M2. If a specific ordering (or subset) of the brackets is desired, then a List of column index pairs should also be provided.

When the first two parameters are Vectors, this returns the Vector formed by the Lie bracket of the two vector fields.

When the parameters are Modules m1 and m2, then we compute the module generated by $[X,Y]$, for $X$ in m1 and $Y$ in m2. This is a superset of the module generated by the brackets of the generators! (A calculation shows that bracket(m1,m2) is generated by image bracket(gens m1,gens m2), I1*m2, and I2*m1, where I1 is the ideal generated by the coefficients of the generators of m1, and similarly I2.)

See differences between certain bracketing functions for more details on the differences.

i1 : R=QQ[x,y];
i2 : A=matrix {{0},{x}};

             2      1
o2 : Matrix R  <-- R
i3 : B=matrix {{x^2},{y}};

             2      1
o3 : Matrix R  <-- R
i4 : C=matrix {{1},{x}};

             2      1
o4 : Matrix R  <-- R
i5 : bracket(A,B)

o5 = | 0     |
     | -x2+x |

             2      1
o5 : Matrix R  <-- R
i6 : bracket(B,A)==-bracket(A,B)

o6 = true
i7 : bracket(A,C)

o7 = | 0  |
     | -1 |

             2      1
o7 : Matrix R  <-- R
i8 : bracket(A_0,C_0)

o8 = |  0 |
     | -1 |

      2
o8 : R
i9 : bracket(A,B|C)

o9 = | 0     0  |
     | -x2+x -1 |

             2      2
o9 : Matrix R  <-- R
i10 : bracket(A|C,B|C,{(0,0),(1,1)})===bracket(A,B)|bracket(C,C)

o10 = true
i11 : bracket(A|C,B|C,{{0,1}})===bracket(A,C)

o11 = true

Providing Modules computes something much different:

i12 : trim bracket(image(A),image(B))

o12 = image | 0 0  0    x3 |
            | x xy x2-x 0  |

                              2
o12 : R-module, submodule of R

because, for example,

i13 : (2*x+1)*bracket(A,B)-bracket(x*A,B)

o13 = | 0 |
      | x |

              2      1
o13 : Matrix R  <-- R

An action of SL_2 on GL_2 differentiates to the following vector fields:

i14 : R=QQ[a,b,c,d];
i15 : e=matrix {{c},{d},{0},{0}};

              4      1
o15 : Matrix R  <-- R
i16 : f=matrix {{0},{0},{a},{b}};

              4      1
o16 : Matrix R  <-- R
i17 : h=matrix {{-a},{-b},{c},{d}};

              4      1
o17 : Matrix R  <-- R
i18 : L=e|f|h;

              4      3
o18 : Matrix R  <-- R

Verify that this is a representation of sl_2, where [e,f]=h, [h,f]=-2f, [h,e]=2e.

i19 : bracket(e,f)-h==0

o19 = true
i20 : bracket(h,f)+2*f==0

o20 = true
i21 : bracket(h,e)-2*e==0

o21 = true

Of course we should have [L,L]=L:

i22 : bracket(L,L)

o22 = | 0 -a -2c a  0 0  2c 0   0 |
      | 0 -b -2d b  0 0  2d 0   0 |
      | 0 c  0   -c 0 2a 0  -2a 0 |
      | 0 d  0   -d 0 2b 0  -2b 0 |

              4      9
o22 : Matrix R  <-- R
i23 : image bracket(L,L)==image L

o23 = true

Caveat

The Matrix and Module versions of this routine compute different things; see differences between certain bracketing functions.

See also

Ways to use bracket :

For the programmer

The object bracket is a method function.