...
 
Commits (2)
......@@ -26,7 +26,7 @@ DeclareAttribute( "BlockDiagonalBasis", IsGroupHomomorphism );
#! and put $\rho$ into a nice form.
DeclareAttribute( "BlockDiagonalRepresentation", IsGroupHomomorphism );
#! @Arguments rho[, irreps, F]
#! @Arguments rho[, irreps]
#! @Returns A record
......@@ -40,11 +40,6 @@ DeclareAttribute( "BlockDiagonalRepresentation", IsGroupHomomorphism );
#! default (running Dixon's algorithm) is too expensive, or e.g. you
#! don't want representations over Cyclotomics.
#! <A>F</A> is the field your representations are over. The default is
#! Cyclotomics, but if you know your representation (and irreps) is
#! over e.g. Rationals or some finite extension, you can avoid
#! Cyclotomics entirely by saying what your field is.
#! The return value of this function is a record with fields:
#! * basis: same as BlockDiagonalBasis
......@@ -53,6 +48,8 @@ DeclareAttribute( "BlockDiagonalRepresentation", IsGroupHomomorphism );
#! * decomposition: same as IrreducibleDecompositionCollected
#! * centralizer_basis: same as RepresentationCentralizerBlocks
#! When I say "the same", I mean up to reordering and isomorphism as
#! representations.
DeclareGlobalFunction( "BlockDiagonalRepresentationFast" );
......@@ -2,7 +2,7 @@
#! @Section Finding explicit isomorphisms
#! @Arguments rho, tau
#! @Arguments rho, tau[, rho_cent_basis, tau_cent_basis]
#! @Returns A matrix $A$ or fail
......@@ -10,10 +10,12 @@
#! there exists a linear map $A : V \to W$ such that for all $g \in
#! G$, $\tau(g)A = A\rho(g)$, this function returns one such $A$. $A$
#! is the isomorphism between the representations. If the
#! representations are not isomorphic, then fail is returned. The
#! method used involves solving linear systems (size depending on the
#! degree of the reps), and depends on the size of $G$ as little as
#! possible.
#! representations are not isomorphic, then fail is returned.
#! If no bases for the centralizers are given, we have no option but
#! to sum over $G$ to perform this calculation. If bases for the
#! centralizers are given, we can use them to calculate class/group
#! sums and thus avoid summing over $G$.
DeclareGlobalFunction( "LinearRepresentationIsomorphism" );
#! @Arguments rho, tau
......@@ -22,9 +24,9 @@ DeclareGlobalFunction( "LinearRepresentationIsomorphism" );
#! @Description The same as <Ref
#! Func="LinearRepresentationIsomorphism" />, but this function uses a
#! simpler method which involves summing over $G$. This is slow for
#! large $G$, but might be fast in the special case of a very large
#! group and very small degree representation.
#! simpler method which always involves summing over $G$. This is slow
#! for large $G$, but might be fast in the special case of a very
#! large group and very small degree representation.
DeclareGlobalFunction( "LinearRepresentationIsomorphismSlow" );
#! @Arguments rho, tau
......
......@@ -16,8 +16,6 @@ end;
# Converts rho to a matrix representation if necessary
ConvertRhoIfNeeded@ := function(rho)
local gens, ims, high, new_ims, new_range, new_rho, G;
# We want rho to be a homomorphism to a matrix group since this
# algorithm works on matrices. We convert a permutation group into
# an isomorphic matrix group so that this is the case. If we don't
......@@ -28,13 +26,7 @@ ConvertRhoIfNeeded@ := function(rho)
fi;
if IsFiniteGroupPermutationRepresentation(rho) then
G := Source(rho);
gens := GeneratorsOfGroup(G);
ims := List(gens, g -> Image(rho, g));
high := LargestMovedPoint(ims);
new_ims := List(ims, i -> PermutationMat(i, high));
new_range := Group(new_ims);
return GroupHomomorphismByImagesNC(G, new_range, gens, new_ims);
return PermToLinearRep(rho);
fi;
return fail;
......
......@@ -42,3 +42,9 @@ DeclareGlobalFunction( "DirectSumRepList" );
#! $\mbox{Tr}(\rho(e_G))$, where $e_G$ is the identity of the group
#! $G$ that <A>rho</A> has as domain.
DeclareGlobalFunction( "DegreeOfRepresentation" );
#! @Arguments rho
#! @Returns Linear representation $\rho$ isomorphic to the permutation
#! representation <A>rho</A>.
DeclareGlobalFunction( "PermToLinearRep" );
......@@ -214,3 +214,15 @@ OrbitalMatrix@ := function(G, representative)
return orbital;
end;
InstallGlobalFunction( PermToLinearRep, function(rho)
local n;
if not IsPermGroup(Range(rho)) then
return fail;
fi;
n := DegreeOfRepresentation(rho);
return ComposeHomFunction(rho, perm -> PermutationMat(perm, n));
end );