#
# file: meataxe.gap
#
# purpose: Wrappers for Meataxe routines
#
# created: Pasha Zusmanovich Jan 7 2014
#
# latest revision history:
# Feb 11 2021 in MeataxeAdjointRep(), do TransposedMat (otherwise we are
# are computing its dual)
# Oct 28 2021 cosmetics: some of the code is valid for arbitrary nonassociative
# algebras, not necessary Lie
#
# constructs the Meataxe representation in A of an associative algebra,
# generated by right multiplications on elements of A;
# for Lie algebras, this is adjoint representation
# for associative algebras, this is regular representation
MeataxeAdjointRep := function (A)
local B, matrices, v;
B := Basis (A);
matrices := [];
for v in B do
Add (matrices, TransposedMat (AdjointMatrix (B, v)));
od;
return (GModuleByMats (matrices, LeftActingDomain (A)));
end;
# constructs a Meataxe dual representation to a given one
MeataxeDualRep := function (M)
local matrices, m;
matrices := [];
for m in MTX.Generators (M) do
Add (matrices, - TransposedMat (m));
od;
return (GModuleByMats (matrices, MTX.Field (M)));
end;
# for a given algebra A, determines whether it is simple or not
MeataxeIsSimple := function (A)
return (MTX.IsIrreducible (MeataxeAdjointRep (A)));
end;
MeataxeIsCentralSimple := function (A)
return (MTX.IsAbsolutelyIrreducible (MeataxeAdjointRep (A)));
end;
# for a given algebra A, returns whether the adjoint module is isomorphic to its
# dual;
# for Lie algebras, this is equivalent to the fact that A is isomorphic to A* as
# A-modules
MeataxeAdjointIsomToDual := function (A)
local ad;
ad := MeataxeAdjointRep (A);
return (not (MTX.IsomorphismModules (ad, MeataxeDualRep (ad)) = fail));
end;
# end of meataxe.gap