A differential Lie algebra is defined by changing the option diffl to true, diffl=>true, in the constructor lieAlgebra and using diffLieAlgebra with input the differential of the generators and output the new differential Lie algebra. The last weight is the homological degree and it must be non-negative and less than the first degree. The differential preserves all weights except the homological degree which is lowered by 1 and it also changes the sign. All this is checked when diffLieAlgebra is executed. The value zero for a generator is given as L.zz, which has any weight and sign (see however weightLie and signLie). The differential is a derivation and is obtained by diffLie as d=diffLie(). The value of the differential d applied to an arbitrary Lie expression x is obtained by d(x).
i1 : F1 = lieAlgebra({a,b,c},genWeights=>{{1,0},{2,1},{3,2}}, genSigns=>{1,1,1},diffl=>true) o1 = F1 o1 : LieAlgebra |
i2 : L1=diffLieAlgebra{F1.zz,a a,a b} o2 = L1 o2 : LieAlgebra |
i3 : peekLie L1 o3 = gensLie => {a, b, c} genWeights => {{1, 0}, {2, 1}, {3, 2}} genSigns => {1, 1, 1} relsLie => {} genDiffs => {0, (a a), (a b)} field => QQ diffl => true compdeg => 3 |
i4 : d = diffLie() o4 = d o4 : DerLie |
i5 : x = a b b + (1/2) a a c o5 = (a b b) + (1/2)(a a c) o5 : L1 |
i6 : d x o6 = - (7/2)(a a a b) o6 : L1 |
The program adds relations to the Lie algebra to get the square of the differential to be zero and a warning is printed if this is done. The current Lie algebra must be free when diffLieAlgebra is used. It is also possible to define the differential using L.genDiffs (see L3 below), but then no checking is made.
i7 : F2 = lieAlgebra({a,b,c2,c3,c4},genSigns=>{0,0,1,0,1}, genWeights=>{{1,0},{1,0},{2,1},{3,2},{5,3}},diffl=>true) o7 = F2 o7 : LieAlgebra |
i8 : L2=diffLieAlgebra{F2.zz,F2.zz,a b,a c2,a b c3} warning: relations have been added for the square of the differential to be zero o8 = L2 o8 : LieAlgebra |
i9 : peekLie L2 o9 = gensLie => {a, b, c2, c3, c4} genWeights => {{1, 0}, {1, 0}, {2, 1}, {3, 2}, {5, 3}} genSigns => {0, 0, 1, 0, 1} relsLie => { - (a b a), (a b a c2)} genDiffs => {0, 0, - (b a), (a c2), (a b c3)} field => QQ diffl => true compdeg => 5 |
The dimensions of the homology can be obtained using homologyTableLie, which gives a table of dimensions for the first and the last degrees.
A basis for the homology, boundaries and cycles in a certain first and homological degree is obtained by homologyBasisLie, cyclesBasisLie and boundariesBasisLie.
i10 : L3 = lieAlgebra({a,b,c},genSigns=>1, genWeights=>{{1,0},{1,0},{2,1}},diffl=>true)/{a a,b b} o10 = L3 o10 : LieAlgebra |
i11 : L3.genDiffs = {L3.zz,L3.zz,a b} o11 = {0, 0, (b a)} o11 : List |
i12 : homologyTableLie 5 o12 = | 2 0 0 0 0 | | 0 0 2 1 0 | | 0 0 0 0 0 | | 0 0 0 0 0 | | 0 0 0 0 0 | 5 5 o12 : Matrix ZZ <--- ZZ |
i13 : homologyBasisLie(4,1) o13 = {(b a c)} o13 : List |
i14 : boundariesBasisLie(4,1) o14 = {(a b c) + (b a c)} o14 : List |
It follows from above that a basis for the cycles of weight (4,1) is {b a c, a b c}.
i15 : cyclesBasisLie(4,1) o15 = {(b a c), (a b c)} o15 : List |
In degree (3,1) there are two independent cycles and no boundaries:
i16 : homologyBasisLie(3,1) o16 = {(b c), (a c)} o16 : List |
i17 : boundariesBasisLie(3,1) o17 = {} o17 : List |
In degree (5,1) all elements are boundaries, so the homology is zero, which is seen in the table above. In degree (5,2) there are no cycles.
i18 : boundariesBasisLie(5,1) o18 = {(b a b c), (a b a c)} o18 : List |
i19 : basisLie(5,1) o19 = {(a b a c), (b a b c)} o19 : List |
i20 : d = diffLie() o20 = d o20 : DerLie |
i21 : basisLie(5,2) o21 = {(a c c), (b c c)} o21 : List |
i22 : d(a c c) o22 = - 2 (a b a c) o22 : L3 |
i23 : d(b c c) o23 = - 2 (b a b c) o23 : L3 |
i24 : cyclesBasisLie(5,2) o24 = {} o24 : List |
Below is an example with zero homology and hence also its minimal model, see minmodelLie, is the zero Lie algebra.
i25 : L4 = lieAlgebra({a,b},genSigns=>{1,0},genWeights=>{{2,0},{2,1}},diffl=>true) o25 = L4 o25 : LieAlgebra |
i26 : L4.genDiffs = {L4.zz,a} o26 = {0, a} o26 : List |
i27 : homologyTableLie 12 o27 = 0 12 12 o27 : Matrix ZZ <--- ZZ |
i28 : M4 = minmodelLie 12 o28 = M4 o28 : LieAlgebra |
i29 : peekLie oo o29 = gensLie => {} genWeights => {} genSigns => {} relsLie => {} genDiffs => {} field => QQ diffl => true compdeg => 12 modelmap => 0 |
i30 : whichLie() o30 = L4 o30 : LieAlgebra |
i31 : useLie M4 o31 = M4 o31 : LieAlgebra |
i32 : homologyTableLie 12 o32 = 0 12 12 o32 : Matrix ZZ <--- ZZ |
i33 : peekLie M4.modelmap o33 = 0 |
The above result is true in characteristic zero and false in positive characteristic.
i34 : L5 = lieAlgebra({a,b},genSigns=>{1,0},genWeights=>{{2,0},{2,1}},field=>ZZ/3,diffl=>true) o34 = L5 o34 : LieAlgebra |
i35 : L5.genDiffs = {L5.zz,a} o35 = {0, a} o35 : List |
i36 : homologyTableLie 12 o36 = | 0 0 0 0 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 1 0 0 0 0 0 0 | | 0 0 0 0 0 1 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 0 0 0 0 | 12 12 o36 : Matrix ZZ <--- ZZ |
i37 : homologyBasisLie(6,1) o37 = {(b a a)} o37 : List |
i38 : homologyBasisLie(6,2) o38 = {(b b a)} o38 : List |
In characteristic different from two, the differential of (b b a) is 3/2(b a a) and (b a a) is a cycle, which explains the result above (in characteristic 2, (b a) is a cycle which is not a boundary).
i39 : useLie L4 o39 = L4 o39 : LieAlgebra |
i40 : d = diffLie() o40 = d o40 : DerLie |
i41 : d b b a o41 = (3/2)(b a a) o41 : L4 |
Below is a differential Lie algebra which is non-free and where the differential has a linear part.
i42 : F6 = lieAlgebra({a,b,c,r3,r4,r42}, genWeights => {{1,0},{1,0},{2,0},{3,1},{4,1},{4,2}}, genSigns=>{0,0,0,1,1,0},diffl=>true) o42 = F6 o42 : LieAlgebra |
i43 : L6=diffLieAlgebra{F6.zz,F6.zz,F6.zz,a c,a a c,r4 - a r3}/{b c - a c,a b,b r4 - a r4} o43 = L6 o43 : LieAlgebra |
i44 : homologyTableLie 5 o44 = | 2 1 0 0 0 | | 0 0 0 1 1 | | 0 0 0 0 0 | | 0 0 0 0 0 | | 0 0 0 0 0 | 5 5 o44 : Matrix ZZ <--- ZZ |
The homology in homological degree zero is concentrated in degree 1 and 2. The function minPresLie gives a minimal presentation of the Lie algebra H0 (and it also changes the current Lie algebra).
i45 : peekLie (P= minPresLie 3) o45 = gensLie => {a, b, c} genWeights => {{1, 0}, {1, 0}, {2, 0}} genSigns => {0, 0, 0} relsLie => {(b a), (b c), (a c)} genDiffs => {0, 0, 0} field => QQ diffl => false compdeg => 2 |
We now compute the minimal model of L6 and check that its homology is the same as for L6.
i46 : whichLie() o46 = P o46 : LieAlgebra |
i47 : useLie L6 o47 = L6 o47 : LieAlgebra |
i48 : M6 = minmodelLie 5 o48 = M6 o48 : LieAlgebra |
i49 : useLie M6 o49 = M6 o49 : LieAlgebra |
i50 : homologyTableLie 5 o50 = | 2 1 0 0 0 | | 0 0 0 1 1 | | 0 0 0 0 0 | | 0 0 0 0 0 | | 0 0 0 0 0 | 5 5 o50 : Matrix ZZ <--- ZZ |
i51 : peekLie M6 o51 = gensLie => {fr , fr , fr , fr , fr , fr , fr } 0 1 2 3 4 5 6 genWeights => {{1, 0}, {1, 0}, {2, 0}, {2, 1}, {3, 1}, {3, 1}, {5, 2}} genSigns => {0, 0, 0, 1, 1, 1, 0} relsLie => {} genDiffs => {0, 0, 0, (fr_1 fr_0), (fr_1 fr_2), (fr_0 fr_2), (fr_0 fr_3 fr_2) + (fr_0 fr_0 fr_4) - (fr_0 fr_1 fr_5)} field => QQ diffl => true compdeg => 5 modelmap => MapLie{fr_0 => a } fr_1 => b fr_2 => c fr_3 => 0 fr_4 => r3 fr_5 => r3 fr_6 => - (a r42) + (b r42) sourceLie => M6 targetLie => L6 |
The quasi-isomorphism is obtained as f=M.modelmap. If L has no differential, then f is surjective, but in general this is not true as is shown by L4 above and also by this example.
i52 : f = M6.modelmap o52 = f o52 : MapLie |
i53 : peekLie f o53 = MapLie{fr_0 => a } fr_1 => b fr_2 => c fr_3 => 0 fr_4 => r3 fr_5 => r3 fr_6 => - (a r42) + (b r42) sourceLie => M6 targetLie => L6 |
i54 : useLie L6 o54 = L6 o54 : LieAlgebra |
i55 : dimTableLie 5 o55 = | 2 1 1 1 2 | | 0 0 1 3 5 | | 0 0 0 1 2 | | 0 0 0 0 0 | | 0 0 0 0 0 | 5 5 o55 : Matrix ZZ <--- ZZ |
i56 : imageTableLie(5,f) o56 = | 2 1 1 1 2 | | 0 0 1 2 4 | | 0 0 0 0 1 | | 0 0 0 0 0 | | 0 0 0 0 0 | 5 5 o56 : Matrix ZZ <--- ZZ |
We check below that H(f) is iso in degree (5,1).
i57 : homologyBasisLie(5,1) o57 = {(b a r3) - (b b r3)} o57 : List |
i58 : useLie M6 o58 = M6 o58 : LieAlgebra |
i59 : homologyBasisLie(5,1) o59 = {(fr_1 fr_3 fr_2) + (fr_1 fr_0 fr_4) - (fr_1 fr_1 fr_5)} o59 : List |
i60 : f oo o60 = {(b a r3) - (b b r3)} o60 : List |
The generators for the minimmal model M of L yield basis elements for the cohomology ExtUL(k,k) (with a shift in the homological degree, k=L.field). Its dimensions may be obtained using extTableLie (observe that the first row gives ExtUL(k,k) in degree 1 to 5 and homological degree 1 ).
i61 : useLie L6 o61 = L6 o61 : LieAlgebra |
i62 : extTableLie 5 o62 = | 2 1 0 0 0 | | 0 1 2 0 0 | | 0 0 0 0 1 | | 0 0 0 0 0 | | 0 0 0 0 0 | 5 5 o62 : Matrix ZZ <--- ZZ |
i63 : M6.genWeights o63 = {{1, 0}, {1, 0}, {2, 0}, {2, 1}, {3, 1}, {3, 1}, {5, 2}} o63 : List |