BerechneMn2:= function(N,ANZ); //Laenge und obere Schranke fuer die Anzahl ANZ der Codes if GF(2) ! N ne 0 then return []; end if; n:= N div 2; M:=KMatrixSpace(GF(2),n,2*n); M1:=KMatrixSpace(GF(2),n-1,2*n); c1:= M1 ! 0; c:= M ! 0; for i in [1..n-1] do c1[i][2*i-1] := 1; c1[i][2*i] := 1; c[i][2*i-1] := 1; c[i][2*i] := 1; end for; c[n][2*n-1] := 1; c[n][2*n] := 1; C:=LinearCode(c); Genmat1:=[c1]; Genmat:=[c]; Genus:=[C]; T:=MatrixRing(Integers(),ANZ) ! 0; V:=VectorSpace(GF(2),n-1); m1:=KMatrixSpace(GF(2),n-1,1); //durchlaufe die n-1-dimensionalen Teilraeume von C, die 1111111 enthalten SC:=M1 ! 0; HSC:=M ! 0; HSC1:=M1 ! 0; for i in [1..2*n] do SC[n-1][i]:=1; HSC[n][i]:=1; end for; k:=1; kM:=MatrixRing(GF(2),n-1); while (k le #Genus) do genmat1:=Genmat1[k]; mat:= M ! 0; for i in [1..n-1] do for j in [1..2*n] do mat[i][j]:=genmat1[i][j]; end for; end for; G:=AutomorphismGroup(Genus[k]); gg:=[]; for g in Generators(G) do m:=kM ! 0; for j in [1..n-1] do for i in [1..2*n] do mat[n][i] := genmat1[j][ i^g]; end for; K:=Kernel(mat); if Dimension(K) eq 0 then for i in [1..2*n] do mat[n][i]:=mat[n][i]+1; end for; K:=Kernel(mat); end if; BK:=BasisMatrix(K); for i in [1..n-1] do m[i][j]:=BK[1][i]; end for; end for; Append(~gg,m); end for; G:=sub; O:=LineOrbits(G); print k,#Genus,#O; for o in O do anz:=#o; A:=Transpose(BasisMatrix(o[1])); B:=BasisMatrix(Kernel(A)); //print o[1],NumberOfRows(B); SC1:=B*genmat1; for j in [1..n-2] do for i in [1..2*n] do SC[j][i]:=SC1[j][i]; end for; end for; C:=LinearCode(SC); CC:=Dual(C); // WeightEnumerator(CC); //Suche Type II Teilcodes von CC, die C enthalten B:=[]; for i in [1..n+1] do if (not (CC.i in C)) then if #B eq 0 then Append(~B,CC.i); else if (not ((CC.i+B[1]) in C)) then Append(~B,CC.i); break; //i end if; end if; end if; end for; //i //print B; //print C; BBB:=[B[1],B[2],B[1]+B[2]]; for b in BBB do C1:=sub; if not C1 eq Genus[k] then //print Dimension(C1); flag:=1; for i in [1..#Genus] do if (IsIsomorphic(C1,Genus[i] )) then T[k][i] := T[k][i]+anz; flag:=0; break i; end if; end for; if flag eq 1 then //print C1; Append(~Genus,C1); for i in [1..2*n] do HSC[1][i] := b[i] ; HSC1[1][i] := b[i] ; end for; for j in [1..n-2] do for i in [1..2*n] do HSC[j+1][i] := SC[j][i]; HSC1[j+1][i] := SC[j][i]; end for; end for; Append(~Genmat, HSC); Append(~Genmat1, HSC1); j:=#Genus; T[k][j] := T[k][j]+anz; end if; end if; // if not Genus[k] end for; // for bbb in BB end for; // for v k:=k+1; end while; //k in Genus AA:=[] ; for c in Genus do Append(~AA, Order(AutomorphismGroup(c))); end for; anz:=#Genus; TT:=T; T:=MatrixRing(Rationals(),anz) ! 0; for i in [1..anz] do for j in [1..anz] do T[i][j]:=TT[i][j]; end for; end for; return Genus,T,AA; end function; massdg:=function(n) if Integers(8) ! n ne 0 then return 0; end if; m:=1; for j in [0..n div 2 -2] do m*:= (2^j+1); end for; return(m/Factorial(n)); end function; mass:=function(l,n) if Integers(2) ! n ne 0 then return 0; end if; d:=n div 2; if Integers(2) ! l eq 0 then z:=1; else z:=2; end if; for j in [1..d -1] do z*:= (l^j+1); end for; return(z/Factorial(n)); end function; N:=16; Gen,T,Aut:=BerechneMn2(N,100); m:=mass(2,N); s:=0; for i in [1..#Aut] do s +:= Aut[i]^-1; end for; print s,m;