`‣ UnitaryRepresentation` ( rho ) | ( function ) |

Returns: A record with fields basis_change and unitary_rep such that `rho` is isomorphic to unitary_rep, differing by a change of basis basis_change. Meaning if \(L\) is basis_change and \(\rho_u\) is the unitarised `rho`, then \(\forall g \in G: \; L \rho_u(g) L^{-1} = \rho(g)\).

Unitarises the given representation quickly, summing over the group using a base and strong generating set and unitarising with `LDLDecomposition`

(3.1-3).

gap> G := SymmetricGroup(3);; gap> irreps := IrreducibleRepresentations(G);; gap> # It happens that we are given unitary irreps, so > # rho is also unitary (its blocks are unitary) > rho := DirectSumOfRepresentations([irreps[1], irreps[2]]);; gap> IsUnitaryRepresentation(rho); true gap> # Arbitrary change of basis > A := [ [ -1, 1 ], [ -2, -1 ] ];; gap> tau := ComposeHomFunction(rho, x -> A^-1 * x * A);; gap> # Not unitary, but still isomorphic to rho > IsUnitaryRepresentation(tau); false gap> AreRepsIsomorphic(rho, tau); true gap> # Now we unitarise tau > tau_u := UnitaryRepresentation(tau);; gap> # We get a record with the unitarised rep: > AreRepsIsomorphic(tau, tau_u.unitary_rep); true gap> AreRepsIsomorphic(rho, tau_u.unitary_rep); true gap> # The basis change is also in the record: > ForAll(G, g -> tau_u.basis_change * Image(tau_u.unitary_rep, g) = Image(tau, g) * tau_u.basis_change); true

`‣ IsUnitaryRepresentation` ( rho ) | ( function ) |

Returns: Whether `rho` is unitary, i.e. for all \(g \in G\), \(\rho(g^{-1}) = \rho(g)^*\) (where \(^*\) denotes the conjugate transpose).

gap> # TODO: this example

`‣ LDLDecomposition` ( A ) | ( function ) |

Returns: a record with two fields, L and D such that \(A = L\mbox{diag}(D)L^*\). \(D\) is the \(1 \times n\) vector which gives the diagonal matrix \(\mbox{diag}(D)\) (where `A` is an \(n \times n\) matrix).

gap> A := [ [ 3, 2*E(3)+E(3)^2, -3 ], [ E(3)+2*E(3)^2, -3, 3 ], [ -3, 3, -6 ] ];; gap> # A is a conjugate symmetric matrix > A = ConjugateTranspose@RepnDecomp(A); true gap> # Note that A is not symmetric - the LDL decomposition works for any > # conjugate symmetric matrix. > A = TransposedMat(A); false gap> decomp := LDLDecomposition(A);; gap> # The LDL decomposition is such that A = LDL^*, D diagonal, and L lower triangular. > A = decomp.L * DiagonalMat(decomp.D) * ConjugateTranspose@RepnDecomp(decomp.L); true gap> decomp.L[1][2] = 0 and decomp.L[1][3] = 0 and decomp.L[2][3] = 0; true

`‣ IrreducibleDecompositionDixon` ( rho ) | ( function ) |

Returns: a list of irreps in the decomposition of `rho`

NOTE: this is not implemented yet. Assumes that `rho` is unitary and uses an algorithm due to Dixon to decompose it into unitary irreps.

generated by GAPDoc2HTML