# # file: delta-der.gap # # purpose: By the given structure constants of an anticommutative algebra, # computes its delta-derivations. # This is accompanying code to the paper # "On delta-derivations of Lie algebras and superalgebras". # # created: Pasha Zusmanovich Jul 13 2009 # # latest revision history: # Jul 6 2011,Oct 25 2015 cosmetics # # this function returns a list of delta-derivations of an anticommutative # algebra L as matrices acting on the basis of L Deltader := function (L, delta) local _add, K, N, T, Mat, i, j, k, l, s; _add := function (i, j, s, element) local f; f := (i-1)*N+j; Mat[f][s] := Mat[f][s] + element; end; K := LeftActingDomain (L); N := Dimension (L); T := StructureConstantsTable (Basis (L)); Mat := NullMat (N*N, N*N*(N-1)/2, K); for i in [1..N] do for j in [(i+1)..N] do for l in [1..N] do s := ((2*N-i)*(i-1)/2 + j-i-1)*N + l; for k in [1..N] do _add (k,l,s, SCTableEntry (T, i,j,k)); _add (i,k,s, - delta * SCTableEntry (T, k,j,l)); _add (j,k,s, delta * SCTableEntry (T, k,i,l)); od; od; od; od; # Construct the generating matrices from the vectors # (as in alglie.gi, method RightDerivations) return (List (NullspaceMatDestructive (Mat), v -> List([1 .. N], i -> v{[ (i-1)*N + 1 .. i*N ]}))); end; # examples of usage: # # dder := Deltader (SimpleLieAlgebra ("A", 1, Rationals), -1); # Print (dder, "\n", Length (dder), "\n"); # # dder := Deltader (SimpleLieAlgebra ("W", [2], GF(5)), 1/2); # Print (dder, "\n", Length (dder), "\n"); # 16-dimensional algebra from A. Elduque, "A Lie grading which is not a semigroup # grading", Lin. Algebra Appl. 418 (2006), 312-314 # < x, y, z, [x,y], [x,z], [y,z], [[y,z],x], a, b_1, b_2, b_3, c_1, c_2, c_3, d_1, d_2 > # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # with (ad x)^2 = (ad y)^2 = (ad z)^2 = 0, [[x,y],z]] = 0, etc. # x,y,z act on a,b,c,d # N := 16; T := EmptySCTable (N, 0, "antisymmetric"); # multiplications between x,y,z and their products: SetEntrySCTable (T, 1, 2, [ 1, 4]); SetEntrySCTable (T, 1, 3, [ 1, 5]); SetEntrySCTable (T, 1, 6, [-1, 7]); SetEntrySCTable (T, 2, 3, [ 1, 6]); SetEntrySCTable (T, 2, 5, [-1, 7]); # action of x,y,z and their products on a,b,c,d: SetEntrySCTable (T, 1, 8, [ 1, 9]); SetEntrySCTable (T, 1, 10, [ 1, 13]); SetEntrySCTable (T, 1, 14, [ 1, 16]); SetEntrySCTable (T, 2, 8, [ 1, 10]); SetEntrySCTable (T, 2, 11, [ 1, 14]); SetEntrySCTable (T, 2, 12, [ 1, 15]); SetEntrySCTable (T, 3, 8, [ 1, 11]); SetEntrySCTable (T, 3, 9, [ 1, 12]); SetEntrySCTable (T, 3, 10, [ 1, 14]); SetEntrySCTable (T, 3, 13, [ 1, 16]); SetEntrySCTable (T, 4, 8, [ 1, 13]); SetEntrySCTable (T, 4, 11, [ 1, 16]); SetEntrySCTable (T, 5, 8, [-1, 12]); SetEntrySCTable (T, 6, 9, [ 1, 15]); SetEntrySCTable (T, 7, 8, [ 1, 15]); # construct the field Q(t) deg := NextPrimeInt (N*N); # 257 K := AlgebraicExtension (Rationals, CyclotomicPolynomial (Rationals, deg)); t := RootOfDefiningPolynomial (K); # formal parameter t #L := LieAlgebraByStructureConstants (Rationals, T); L := LieAlgebraByStructureConstants (K, T); # compute various delta-derivations of that algebra for delta in [-1, 1/2, t] do Print ("Computing for delta=", delta, " ...\n"); dder := Deltader (L, delta); # exclude the identity map (appears for the case delta = 1/2) for k in [1 .. Length (dder)] do identity := true; for i in [1 .. N] do if (not identity) then break; fi; for j in [1 .. N] do if (i = j) then if (dder[k][i][i] <> 1) then identity := false; break; fi; elif (dder[k][i][j] <> 0) then identity := false; break; fi; od; od; if (identity) then Remove (dder, k); fi; od; # among delta-derivations of L, # single out those whose matrices in the given basis are not # strictly upper-triangular (there should be one or two) notuppertri := []; for k in [1 .. Length (dder)] do added := false; for i in [1 .. N] do if (added) then break; fi; for j in [1..i] do if (dder[k][i][j] <> 0) then Add (notuppertri, k); added := true; break; fi; od; od; od; # ... and check that the product of each two # non-upper-triangular matrices is zero for k in notuppertri do for l in notuppertri do if (not IsZero (dder[k]*dder[l])) then Print (k, " ", l, "\n"); fi; od; od; # ... and that XBY = 0, where X,Y are non-upper-triangular matrices # from the basis, and B is any matrix from the basis for k in notuppertri do for l in [1 .. Length (dder)] do for m in notuppertri do if (not IsZero (dder[k]*dder[l]*dder[m])) then Print (k, " ", l, " ", m, "\n"); fi; od; od; od; od; # end of delta-der.gap