Implement some actions in Gap

245 Views Asked by At

I would like to calculate, in GAP, certain permutation actions on matrices. Namely:

  1. Let $G=S_n$ be the symmetric group of degree $n$ and $\Omega=GL_n(q)$ (or a suitable subset). $G$ acts by conjugation (i.e. $(a,g)\mapsto a^g=g^{-1}ag$. [Compared to original question edited to use an action from the right.]
  2. Let $G=S_n\times S_n$ and $\Omega$ as before. The action is given by $(a,(g,h))\mapsto h^{-1}ag$.
  3. Let $G=(S_k\times S_{n-k})\times (S_k\times S_{n-k})$ and $\Omega$ the set of matrices with $0,1$-entries with an action as under 2.

Many Thanks in advance.

1

There are 1 best solutions below

1
On BEST ANSWER

You can specify permutation actions by a function in GAP. Since multiplication of matrices with permutations is not defined, it will have to implement the appropriate permutations of rows or columns.

The action then is obtained by either ActionHomomorphism (the homomorphism) or Action (the permutation group image).

The domain can be specified as GAP object, or as list of elements; having nice properties (being sorted, allowing an Enumerator, ...) can substantially improve performance.

Thus for example the first action could be obtained as:

n:=3;
q:=4;
Omg:=GL(n,q); #Omega is reserved word
Sym:=SymmetricGroup(n);

myact1:=function(a,g)
local m;
  m:=List(a,x->Permuted(x,g));
  m:=Permuted(m,g^-1);
  m:=ImmutableMatrix(DefaultFieldOfMatrix(a),m); # for efficiency make compact   
  return m;
end;
perm:=Action(G,Omg,myact1);

For the second action the extra work is in determining the two parts of a direct product element, which can be done by projections.

G:=DirectProduct(Sym,Sym);
p1:=Projection(G,1); # decompose an element in its parts
p2:=Projection(G,2);

myact2:=function(a,pair)
local m,g;
  g:=Image(p1,pair);
  m:=List(a,x->Permuted(x,g));
  m:=Permuted(m,Image(p2,pair)^-1);
  m:=ImmutableMatrix(DefaultFieldOfMatrix(a),m); # for efficiency compact
  return m;
end;
perm:=Action(G,Omg,myact2);

In the third case one needs to construct the set of all 0/1 matrices first:

rows:=Tuples([0,1],n);
zerooone:=Tuples(rows,n);;

The direct product of symmetric groups is easiest obtained as set stabilizer:

k:=1;
stb:=Stabilizer(Sym,[1..k],OnSets);
G:=DirectProduct(stb,stb);
p1:=Projection(G,1); 
p2:=Projection(G,2);

Then the same action function myact2 can be used.