# # file: SandwichSubalgebra.gap # # purpose: computes the sandwich subalgebra of a Lie algebra # # created: Pasha Zusmanovich Oct 8 2014 # # latest revision history: # Dec 26 2020,Feb 11 2021 comments # # determines a sandwich subalgebra of a Lie algebra L over a finite field, # i.e. the algebra linearly spanned by elements x such that (ad x)^2 = 0 # and satisfying [[L,x],[L,x]] = 0 SandwichSubalgebra := function (L) local basis_L, basis_adL, K, adL, adx, adb, add, list; K := LeftActingDomain (L); basis_L := CanonicalBasis (L); # vector space spanned by ad(x)'s basis_adL := List (basis_L, x -> AdjointMatrix (basis_L, x)); adL := VectorSpace (K, basis_adL, "basis"); basis_adL := Basis (adL, basis_adL); list := []; # very inefficient loop over all elements of an algebra; # works fine for 15-dimensional algebras over GF(2) for adx in adL do if (IsZero (adx^2)) then # check the condition (ad x)(ad b)(ad x) = 0 # for any element b of basis of L add := true; for adb in basis_adL do if (not IsZero (adx*adb*adx)) then add := false; break; fi; od; if (add) then Add (list, LinearCombination (basis_L, Coefficients (basis_adL, adx))); fi; fi; od; return (Subalgebra (L, list)); end; # eof