These two recent papers describe a process to construct (non-stabilizer) codes with "exotic" transversal gates : paper1 paper2
Most of the codes have distance $d=2$ which makes them less desirable, but at least one has $d=3$ and I'm trying to construct and verify its properties. The math is fairly involved but there's GAP code sniplets that make it easier to follow the construction. The code in question is a $((7,2,3))_2$ code with a transversal group of order 120.
I can duplicate many of the results so far but for a possibly important parameter I'm getting a different value (this would affect the distance, so I'd like to clear it first) :
Here's my version of the GAP calculations :
TestA:=function()local grp,irr,f,g,n,R,Dec,dec;
grp:=PerfectGroup(120);
irr:=Irr(grp);
f:=irr[2];
g:=irr[3];
Print("|G|=",Size(grp)," dim(f)=",Degree(f)," dim(g)=",Degree(g),"\n");
Print("\n");
for n in [1..10] do
R:=SymmetricPower(f,2*n);
Dec:=List(irr,x->ScalarProduct(x,R));
Print("n=",String(n,-2)," dim(R)=",String(Degree(R),-3)," dec=",Dec,"\n");
od;
Print("\n");;
for n in [1..21] do
dec:=ScalarProduct(g,f^n);
if(dec>0)then Print("n=",String(n,-2)," (g,f^n)=",dec,"\n");fi;
od;;
Print("\n");;
Dec:=List(irr,x->ScalarProduct(x,f*f));Print("(f*f) dec=",Dec,"\n");;
Dec:=List(irr,x->ScalarProduct(x,g*g));Print("(g*g) dec=",Dec,"\n");;
Dec:=List(irr,x->ScalarProduct(x,f*g));Print("(f*g) dec=",Dec,"\n");;
return grp;
end;
Running it gives the following :
gap> TestA();;
|G|=120 dim(f)=2 dim(g)=2
n=1 dim(R)=3 dec=[ 0, 0, 0, 0, 1, 0, 0, 0, 0 ]
n=2 dim(R)=5 dec=[ 0, 0, 0, 0, 0, 0, 0, 1, 0 ]
n=3 dim(R)=7 dec=[ 0, 0, 0, 1, 0, 1, 0, 0, 0 ]
n=4 dim(R)=9 dec=[ 0, 0, 0, 0, 0, 1, 0, 1, 0 ]
n=5 dim(R)=11 dec=[ 0, 0, 0, 1, 1, 0, 0, 1, 0 ]
n=6 dim(R)=13 dec=[ 1, 0, 0, 0, 1, 1, 0, 1, 0 ]
n=7 dim(R)=15 dec=[ 0, 0, 0, 1, 1, 1, 0, 1, 0 ]
n=8 dim(R)=17 dec=[ 0, 0, 0, 1, 0, 1, 0, 2, 0 ]
n=9 dim(R)=19 dec=[ 0, 0, 0, 1, 1, 2, 0, 1, 0 ]
n=10 dim(R)=21 dec=[ 1, 0, 0, 1, 1, 1, 0, 2, 0 ]
n=7 (g,f^n)=1
n=9 (g,f^n)=8
n=11 (g,f^n)=44
n=13 (g,f^n)=209
n=15 (g,f^n)=924
n=17 (g,f^n)=3928
n=19 (g,f^n)=16321
n=21 (g,f^n)=66880
(f*f) dec=[ 1, 0, 0, 0, 1, 0, 0, 0, 0 ]
(g*g) dec=[ 1, 0, 0, 1, 0, 0, 0, 0, 0 ]
(f*g) dec=[ 0, 0, 0, 0, 0, 1, 0, 0, 0 ]
Everything up to the last line is consistent with the papers. Here $f=\chi_2$ and $g=\chi_3=\lambda$. Page 10 of the first paper has $\lambda \otimes \lambda^* =\chi_1 + \chi_4$. Since $\lambda^*$ is just $\chi_2$ my result seem different : $\lambda \otimes \lambda^* = \chi_6$. What's the discrepancy?
At least one of the authors (Ian) is active on this forum; hopefully he can provide an explanation; or better yet an explicit way to construct the code and check its properties. Other comments from others also welcome.
[ Correction to original question post ] :
As pointed out in the answer, $\chi_2 ^* = \chi_2$ and $\chi_3^* = \chi_3$ and not what I wrote before. I can now verify the code construction and its distance.
GAP code used to construct the code :
Tensor:=mats->Iterated(mats,KroneckerProduct);
TestB:=function()local grp,irr,f,g,n,R,Dec,dec,rep,elm,ff,gg,W;
grp:=PerfectGroup(120);
rep:=IrreducibleRepresentations(grp,Cyclotomics);;
elm:=Elements(grp);
n:=7;;
ff:=List(elm,x->x^rep[2]);;
gg:=List(elm,x->x^rep[3]);;
W:=2*Sum([1..Size(grp)],x->TraceMat(GaloisCyc(gg[x],-1))*Tensor(List([1..n],y->ff[x])))/Size(grp);;
Print(W^2=W," W^2=W; dim(w)=",DimensionsMat(W)," rnk(W)=",RankMat(W),"\n");;
return W;
end;
results :
true W^2=W; dim(w)=[ 128, 128 ] rnk(W)=2