# # file: norm.gap # purpose: GAP function implementing normalizer in Lie algebras # created: pasha jan 13 2005 # modified: pasha jan 20 2005 # modification: added LieNormalizer3() # # for U,V - subspaces in Lie algebra L, computes Norm(U,V) = {x\in L| [x,U]\subseteq V}; # this generalizes "LieCentralizer" (when V=0) and "LieNormalizer" (when U=V); # this is appropriately modified code of "LieNormalizer" from alglie.gi from GAP LieNormalizer2 := function (L, U, V) local K, B, T, s, A, i, j, k, l, u, v, cij, bas, b, pos; if Dimension(U) = 0 then return (L); fi; K := LeftActingDomain (L); B := Basis (L); T := StructureConstantsTable (B); u := List (BasisVectors(Basis(U)), x -> Coefficients (B, x)); v := List (BasisVectors(Basis(V)), x -> Coefficients (B, x)); # The equations. First the normalizer part... A := NullMat (Dimension(L) + Dimension(U)*Dimension(V), Dimension(L)*Dimension(U), K); for i in [1..Dimension(L)] do for j in [1..Dimension(L)] do cij := T[i][j]; for l in [1..Dimension(U)] do for k in [1..Length(cij[1])] do pos := (l-1)*Dimension(L) + cij[1][k]; A[i][pos] := A[i][pos] + u[l][j]*cij[2][k]; od; od; od; od; # ... and then the "superfluous" part for k in [1..Dimension(L)] do for l in [1..Dimension(U)] do for i in [1..Dimension(V)] do A[Dimension(L) + (l-1)*Dimension(V) + i][(l-1)*Dimension(L) + k] := -v[i][k]; od; od; od; b := NullspaceMat(A); # solve the equation system # Extract the "normalizer part" of the solution bas := NullMat (Length(b), Dimension(L), K); for i in [1..Length(b)] do for j in [1..Dimension(L)] do bas[i][j] := b[i][j]; od; od; return (SubspaceNC (L, List (bas, x -> LinearCombination (B, x)), "basis")); end; # the particular case of normalizer when U=L: Norm(V) = {x\in L|[x,L] \subseteq V} LieNormalizer3 := function (L, V) return (SubalgebraNC (L, Basis (LieNormalizer2 (L, L, V)), "basis")); end; # end of norm.gap