Lie-Klammer bzw. Lie-Ableitung eines Vektorfeldes 

LieBracket([l]):=block([f,g,x,k,Df,Dg,ad],
    if (length(l)<3) or (length(l)>4) then 
       error ("Aufruf mit 3 oder 4 Argumenten."),
    f:l[1],
    g:l[2],
    x:l[3],
    if length(l)=3 then k:1 else k:l[4],
    if not(nonnegintegerp(k)) then 
       error ("Ordnung k muss natürliche Zahl sein."),
    if k=0 then return(g)
    else 
        Df:jacobian(f,x),
        Dg:jacobian(g,x),
        ad:list_matrix_entries(Dg.f-Df.g),
        return(LieBracket(f,ad,x,k-1))
)$

Bildet Involutiven Abschluss (L ... Liste von Vektorfeldern, x ... Variable für Lie-Ableitung)

InvolutiveClosure(L,x):=block([flag,F,G,i,j,r,n],
    F:apply('matrix,L),
    F:transpose(F),
    flag:true,
    while flag do (
        flag:false,
        [n,r]:matrix_size(F),
        for i:1 thru r do 
            for j:i+1 thru r do block([f1,f2],
                f1:list_matrix_entries(col(F,i)),
                f2:list_matrix_entries(col(F,j)),
                G:addcol(F,LieBracket(f1,f2,x)),
                if rank(F)<rank(G) then (
                    F:copy(G),
                    flag:true
                )       
        )
    ),
    makelist(makelist(F[i,j],i,1,n),j,1,r)
)$

Vektorfelder f1 und f2

f1:[sin(x3),cos(x3),0];
f2:[0,0,1];
x:[x1,x2,x3];

Involutiver Abschluss

InvolutiveClosure([f1,f2],x);