// 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; //////////////////////////////////////////////////////////////// TIICodesZ4data:=function(C) n:=Length(C); k:=Dimension(C); A:=GeneratorMatrix(C); TA:=tildeEv(C); MM:=VectorSpace(F,k*n); Mkk:=VectorSpace(F,k*k); E1inv:=func; bMM:=[Matrix(F,k,n,Eltseq(b)):b in Basis(MM)]; MAT:=func; MATplusAMT:=func; MAThom:=homMkk|[Mkk|Eltseq(MAT(b)):b in bMM]>; MATplusAMThom:=homMkk| [Mkk|Eltseq(MATplusAMT(b)):b in bMM]>; V0:=Kernel(MATplusAMThom); W0:=sub; AMTDiag:=func; AMTDiaghom:=homMkk| [Mkk|Eltseq(AMTDiag(Matrix(F,k,n,Eltseq(b)))):b in Basis(V0)]>; U0:=Kernel(AMTDiaghom); E2:=function(P) PZ4:=iota(P); E1invZ4:=iota(E1inv(P)); twoE2:=ChangeRing(E1invZ4*TA*PZ4-TA,Z); return Matrix(F,k,n,[F|x div 2: x in Eltseq(twoE2)]); end function; U:=DirectSum(U0,VectorSpace(F,1)); V:=DirectSum(V0,VectorSpace(F,1)); W:=sub; UoverW,f:=U/W; kn:=k*n; m:=Dimension(UoverW); U0plusZ2toUoverW:=func; UoverWtoU0plusZ2:=function(b) bb:=b @@ f; return ; end function; basis:=[UoverWtoU0plusZ2(b):b in Basis(UoverW)]; actionP:=function(s) P:=PermutationMatrix(F,s); E1iP:=E1inv(P); E2P:=E2(P); return Matrix(F,m,m,[ U0plusZ2toUoverW() :b in basis]); end function; AutC:=AutomorphismGroup(C); G:=MatrixGroup; return G,f,UoverW; end function; //////////////////////////////////////////////////////////////// TIICodesZ4:=function(C) G,f,UoverW:=TIICodesZ4data(C); // print Dimension(UoverW)-1; k:=Dimension(C); n:=Length(C); orb:=Orbits(G); r1:={(UoverW!Representative(o)) @@ f: o in orb}; Omega0:={Matrix(F,k,n,[r[i]:i in [1..Degree(r)-1]]):r in r1 |r[Degree(r)] eq 1}; B:=iota(GeneratorMatrix(CodeComplement(Dual(C),C))); CTypeIIResA:=[LinearCode(VerticalJoin(tildeEv(C)+2*iota(o), 2*B)):o in Omega0]; return CTypeIIResA; end function; //////////////////////////////////////////////////////////////// hasExtremal:=function(C) G,f,UoverW:=TIICodesZ4data(C); // print Dimension(UoverW)-1; k:=Dimension(C); n:=Length(C); dr:=Degree(Domain(f)); B:=iota(GeneratorMatrix(CodeComplement(Dual(C),C))); done:={UoverW|}; m2:=2^(Dimension(UoverW)-1); while #done lt m2 do found:=false; while not found do y:=Random(UoverW); x:=y @@ f; found:=x[dr] eq 1 and not y in done; end while; M:=Matrix(F,k,n,[x[i]:i in [1..dr-1]]); CC:=LinearCode(VerticalJoin(tildeEv(C)+2*iota(M),2*B)); if isExtremalZ4(CC) then return true,CC; else done join:=Set(Orbit(G,y)); end if; end while; return false; end function; //////////////////////////////////////////////////////////////// nonreal:=func; load "dim7-nr-d4.magma"; nonreal(codes); load "dim7-nr-d8.magma"; nonreal(codes); load "dim8-nr-d4.magma"; nonreal(codes); load "dim8-nr-d8.magma"; nonreal(codes); load "dim9-nr-d4.magma"; nonreal(codes); load "dim9-nr-d8.magma"; nonreal(codes); load "dim10-nr-d4.magma"; nonreal(codes); // Magma V2.16-6 Sun Mar 28 2010 21:05:21 on para1 [Seed = 1820877060] // Total time: 435.800 seconds, Total memory usage: 349.26MB