// 2010-03-28 // 2009-11-02 // 2009-10-20 Z:=Integers(); Q:=Rationals(); F:=GF(2); Z2:=IntegerRing(2); Z4:=IntegerRing(4); Z8:=IntegerRing(8); iota:=func; //////////////////////////////////////////////////////////////// constructionA:=function(C) n:=Length(C); k:=#Alphabet(C); g:=GeneratorMatrix(C); gs:=[ Z!x : x in Eltseq(g) ]; gL1:=Matrix(Q,Nrows(g),n,gs); gL2:=ScalarMatrix(Q,n,k); gL:=VerticalJoin(gL1,gL2); return Lattice(gL,ScalarMatrix(Q,n,1/k)); end function; isExtremalZ4:=func; //////////////////////////////////////////////////////////////// Eii:=func; Diag:=func; upper:=function(B) k:=Nrows(B); return &cat[[B[i,j]: j in [i+1..k]] : i in [1..k-1]]; end function; allone:=func; diag:=function(A,M) n:=Ncols(A); k:=Nrows(A); MT:=Transpose(M); AMT:=A*MT; return Vector(F,k,[AMT[i,i]: i in [1..k]])+allone(n)*MT; end function; tildeEv:=function(C) k:=Dimension(C); n:=Length(C); A:=GeneratorMatrix(C); MM:=VectorSpace(F,k*n); symk:=VectorSpace(F,k*(k+1) div 2); bMM:=[Matrix(F,k,n,Eltseq(b)):b in Basis(MM)]; h:=homsymk|[symk|Eltseq(diag(A,b)) cat Eltseq(upper(b*Transpose(A)+A*Transpose(b))):b in bMM]>; AZ:=ChangeRing(A,Integers()); AATR:=ChangeRing(AZ*Transpose(AZ),Rationals())*(1/2); AATvec:=upper(ChangeRing(AATR,F)); dA:=[F|AATR[i,i]*(1/2):i in [1..k]]; MatM:=iota(Matrix(F,k,n,Eltseq((dA cat AATvec) @@ h))); return iota(A)+2*MatM; end function; //////////////////////////////////////////////////////////////// isRealizable:=function(C) k:=Dimension(C); n:=Length(C); A:=GeneratorMatrix(C); B:=iota(GeneratorMatrix(CodeComplement(Dual(C),C))); MM:=VectorSpace(F,k*n); Mkk:=VectorSpace(F,k*k); TA:=tildeEv(C); bMM:=[Matrix(F,k,n,Eltseq(b)):b in Basis(MM)]; MAT:=func; AMT:=func; MATplusAMT:=func; MATplusAMThomImage:=[Mkk|Eltseq(MATplusAMT(b)):b in bMM]; MATplusAMThom:=homMkk|MATplusAMThomImage>; V0:=Kernel(MATplusAMThom); MAThom:=homMkk|[Mkk|Eltseq(MAT(b)):b in bMM]>; W0:=sub; allonen:=Matrix(F,1,n,[1: i in [1..n]]); alloneM:=func; AMTDiag:=func; AMTDiaghomImage:=[AMTDiag(Matrix(F,k,n,Eltseq(b))):b in Basis(V0)]; AMTDiaghom:=homMkk|[Mkk|Eltseq(b):b in AMTDiaghomImage]>; U0:=Kernel(AMTDiaghom); U0overW0,f:=U0/W0; m:=Dimension(U0overW0); // print "dimension=",m; count:=0; found:=false; while not found do count +:=1; u:=Random(U0overW0); M:=Matrix(F,k,n,Eltseq(u @@ f)); C4:=LinearCode(VerticalJoin(TA+2*iota(M),2*B)); if isExtremalZ4(C4) then found:=true; end if; // if count mod 10000 eq 0 then print count/10000; end if; end while; return found; end function; //////////////////////////////////////////////////////////////// real:=func; load "dim6-r-d8.magma"; real(codes); load "dim7-r-d4.magma"; real(codes); load "dim7-r-d8.magma"; real(codes); load "dim8-r-d4.magma"; real(codes); load "dim8-r-d8.magma"; real(codes); load "dim9-r-d4.magma"; real(codes); load "dim9-r-d8.magma"; real(codes); load "dim10-r-d4.magma"; real(codes); load "dim10-r-d8.magma"; real(codes); load "dim11-r-d4.magma"; real(codes); load "dim11-r-d8.magma"; real(codes); load "dim12-r-d4.magma"; real(codes); load "dim12-r-d8.magma"; real(codes); // Magma V2.16-6 Sun Mar 28 2010 17:09:29 on para1 [Seed = 3694696754] // Total time: 3161.860 seconds, Total memory usage: 9.05MB