Bimodules#

Introduction#

For a field \(K\) and groups \(G\) and \(H\), a \((KG,\ KH)\)-bimodule is a vector space over \(K\) equipped with a left \(G\)-action and a right \(H\)-action.

In the Magma implementation, \((KG,KH)\)-bimodules are regarded as being equivalent to standard right \(K(G \times H)\)-modules, where

  • the right action of \(H\) in the bimodule is the same as the right action of \(H\) in the equivalent \(K(G \times H)\)-module; and

  • the left action of \(G\) in the bimodule is related to the right action of \(G\) in the equivalent \(K(G \times H)\)-module by \(g^{-1}*v = v*g\) for all \(g \in G\) and \(v\) in the common underlying \(K\)-vector space.

Most of the functionality for standard right \(KG\)-modules, such as forming sub- and quotient modules, defining homomorphisms, etc, should also work for \((KG,KH)\)-modules, where results are calculated using the equivalent \(K(G \times H)\)-module. But note that there is no requirement for the groups \(G\) and \(H\) to have the same type.

Construction#

Bimodule(M, N): ModGrp, ModGrp -> LRModGrp#

Inputs \(M\) and \(N\) should be \(KG\)- and \(KH\)-modules of the same dimension, such that the actions of \(G\) and \(H\) commute; i.e. \((v * g) * h = (v * h) * g\) for all \(g \in G\), \(h \in H\), and \(v\) in the common underlying \(K\)-vector space \(V\) of \(M\) and \(N\). An error will result if this condition is not satisfied.

The corresponding bimodule is returned in which \(g^{-1} * v = v * g\) for all \(g \in G\) and \(v \in V\).

Example: Small Bimodule (ex-31c812)#
> G:=Sym(3);
> H:=CyclicGroup(2);
> M:=PermutationModule(G,GF(3));
> S:=ScalarMatrix(3, GF(3)!2);
> N:=GModule(H,[S]);
> B:=Bimodule(M,N);
> B;
Bimodule B of dimension 3 over GF(3)
> M.1 * G.1;
M: (0 1 0)
> G.1^-1 * B.1;
B: (0 1 0)
> GHom(B,B);
KMatrixSpace of 3 by 3 matrices and dimension 2 over GF(3)
> #Submodules(B);
4

Run in calculator

It is often more convenient to construct a bimodule directly from the equivalent \(K(G~\times~H)\)-module.

Bimodule(G, H, M): Grp, Grp, ModGrp -> LRModGrp#

Inputs \(G\) and \(H\) should be groups, and \(M\) should be a \((G \times H)\)-module. The equivalent \((KG,KH)\)-bimodule is constructed.

Example: Dp Bimodule (ex-5e5954)#
> X := DirectProduct(Sym(4), Alt(5));
> I := IrreducibleModules(X, GF(3));
> M12 := I[9];
> M12;
GModule M12 of dimension 12 over GF(3)
> B := Bimodule(Sym(4), Alt(5), M12);
> B;
Bimodule B of dimension 12 over GF(3)
> IsIrreducible(B);
true

Run in calculator

LeftBimodule(M): ModGrp -> LRModGrp#

\(M\) should be a \(KG\)-module. The corresponding \((KG,KT)\)-bimodule is returned in which \(T\) is the trivial group and \(g^{-1} * v = v * g\) for all \(g \in G\) and \(v \in V\).

RightBimodule(M): ModGrp -> LRModGrp#

\(M\) should be a \(KH\)-module. The corresponding \((KT,KH)\)-bimodule is returned in which \(T\) is the trivial group.

Extracting the Left and Right Modules From a Bimodule#

LeftOppositeModule(B): LRModGrp -> ModGrp#

Extract the equivalent right \(KG\)-module \(M\) from the \((KG,KH)\)-bimodule \(B\), where \(g^{-1} * v = v * g\) for \(g \in G\), and \(v\) in the common \(K\)-vector space \(V\) of \(B\) and \(M\).

RightModule(B): LRModGrp -> ModGrp#

Extract the equivalent right \(KH\)-module \(M\) from the \((KG,KH)\)-bimodule \(B\).

Example: Dp Bimodule Cont (ex-022d8f)#

We continue with the previous example, and check the property \(g^{-1} * v = v * g\) for all \(g \in G\) and \(v \in V\).

> ML := LeftOppositeModule(B);
> ML;
GModule ML of dimension 12 over GF(3)
> G := Group(ML);
> G;
Symmetric group G acting on a set of cardinality 4
Order = 24 = 2^3 * 3
    (1, 2, 3, 4)
    (1, 2)
> V := VectorSpace(B);
> forall{<i,j> : i in [1..2], j in [1..12] |
>                                V!(G.i^-1*B.j) eq V!(ML.j*G.i)};
true

Run in calculator

Permutation Bimodules#

PermutationBimodule(G, H, m, K): Grp, Grp, Map, Fld -> LRModGrp#

The last argument \(K\) should be a field, \(G\) and \(H\) should be groups, and \(m\) should be a homomorphism from a subgroup \(A\) of \(G\) to \(H\).

Let \(Y\) be the subgroup \(\{ (a,m(a)) : a \in A\}\) of \(G \times H\), and let \(M\) be the \(K(G \times H)\)-permutation module defined by the image of the action of \(G \times H\) on the right cosets of \(Y\). The \((KG,KH)\)-bimodule corresponding to \(M\) is returned.

Example: permbimodule (ex-791051)#
> G := Sym(3);
> H := CyclicGroup(6);
> PG := Sylow(G,3);
> PH := Sylow(H,3);
> m := hom<PG -> PH | [PH.1] >;
> K := GF(3);
> B := PermutationBimodule(G,H,m,K);
> B;
Bimodule B of dimension 12 over GF(3)
> GHom(B,B);
KMatrixSpace of 12 by 12 matrices and dimension 8 over GF(3)

Run in calculator

Tensor Products of Bimodules#

TensorProduct(B1, B2): LRModGrp, LRModGrp -> LRModGrp#

The arguments \(B_1\) and \(B_2\) are, respectively, \((KG,KH)\)- and \((KH,KJ)\)-bimodules for the groups \(G,H,J\). The \((KG,KJ)\)-bimodule \(B_1 \otimes_{KH} B_2\) is returned.

Example: induction (ex-f17ecc)#

Let \(H\) be a subgroup of a group \(G\), and \(M\) be a right \(KH\)-module. Then \(M \otimes_{KH} KG\) is (by definition) equal to the induced module \(M^G\).

This is not a sensible way to construct induced modules in practice, but we can use it as an example of the use of the tensor product of bimodules. We regard \(M\) as a \((KT,KH)\)-bimodule, where \(T\) is the trivial group, and \(KH\) as a \((KH,KG)\)-bimodule.

>  G := Sym(5);
>  H := Stabiliser(G,5);
>  K := GF(5);
>  M := IrreducibleModules(H,K)[4];
>  M;
GModule M of dimension 3 over GF(5)
>  B1 := RightBimodule(M);
>  //make KG as right G-module
>  eG := [ g: g in G ];
>  mats := [];
>  for i in [1..Ngens(G)] do
>    perm := Sym(#G)![Position(eG, g*G.i) : g in eG ];
>    Append(~mats, PermutationMatrix(K,perm));
>  end for;
>  RM := GModule(G,mats);
>  //and as left H-module
>  mats := [];
>  for i in [1..Ngens(H)] do
>    perm := Sym(#G)![Position(eG, H.i*g) : g in eG ];
>    Append(~mats, PermutationMatrix(K,perm)^-1);
>  end for;
>  LM := GModule(H,mats);
>  B2 := Bimodule(LM,RM);
>  T := TensorProduct(B1,B2);
>  T;
Bimodule T of dimension 15 over GF(5)
>  IsIsomorphic(RightModule(T), Induction(M,G));
true

Run in calculator