IsTensor( G [, factorisations] )
IsTensor
takes as input a matrix group G and seeks to decide whether
or not G preserves a non-trivial tensor decomposition of the underlying
vector space.
The implementation currently demands that G acts irreducibly, although this is not an inherent requirement of the algorithm.
The second optional argument is a list of possible factorisations of d, the dimension of G. For each [r, s] in this list where rs = d, the function seeks to decide whether G preserves a non-trivial tensor decomposition of the underlying space as the tensor product of two spaces of dimensions r and s.
The function returns a list containing three values: a boolean, a
G-module record, module, for G, and a change-of-basis matrix which
exhibits the decomposition (if one is found). If the boolean is false
,
then G is not a tensor product. If the boolean is true
, then G is
a tensor product and the second argument in the list are the two tensor
factors.
If IsTensor
cannot decide whether G or not preserves a tensor
decomposition, then it returns "unknown"
. The second entry returned
is now the list of unresolved tensor factorisations.
gap> ReadDataPkg ("matrix", "data", "a5xa5d25.gap"); gap> x:=IsTensor (G);; gap> x[1]; true gap> #Hence we have found a tensor decomposition.gap> #Set up the two factors gap> U := x[2][1];; gap> W := x[2][2];;
gap> DisplayMat (GeneratorsFlag (U)); 4 1 5 2 4 5 4 3 6 2 2 2 4 5 6 . 1 5 6 4 5 2 6 3 .
. 5 1 4 2 1 4 4 5 . 3 3 6 5 4 6 5 6 3 3 . 4 1 2 1
3 1 3 2 6 1 4 2 6 3 . . 4 . . 5 4 2 3 2 4 1 6 4 4
6 3 1 6 6 6 3 5 1 4 3 3 5 1 . 2 6 2 1 2 4 4 . 4 6
gap> ReadDataPkg ("matrix", "data", "a5d4.gap");
gap> x := IsTensor (G); [ false, [ ], "undefined" ] gap> #Hence not a tensor product
The algorithm is described in [8, 9]. Since a complete implementation requires basic tools which are not yet available in GAP, the performance of this function is currently seriously limited.
KroneckerFactors( g, d1, d2 [,F] )
KroneckerFactors
decides whether or not a matrix g can be written as
the Kronecker product of two matrices A and B of dimension d1 and
d2, respectively. If the field F is not supplied, it is taken to be
Field (Flat (g))
. The function returns either the pair [A, B] or
false
.
GAP 3.4.4