Coding PDF
Coding PDF
Peter Müller
June 1, 2017
Contents
1 Introduction 2
1.1 ISBN and EAN numbers as examples of error detecting codes . . . . . 2
1.2 Why codes? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Some definitions and easy properties for block codes . . . . . . . . . . 3
1.4 Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Duality 28
3.1 The dual code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2 Linear characters of finite groups . . . . . . . . . . . . . . . . . . . . . . 29
3.3 The MacWilliams identity . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4 The Linear Programming Bound . . . . . . . . . . . . . . . . . . . . . . 35
3.5 The Covering Radius . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1
3.6 Perfect Codes, Part 2 (Lloyd’s Theorem) . . . . . . . . . . . . . . . . . . 41
3.6.1 Application for e = 1 . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.6.2 Application for e = 2 . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.6.3 Application for e = 3 . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.7 Selfdual Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.8 Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7 Goppa Codes 63
7.1 Classical Goppa Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.2 Algebraic Curves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.3 Geometric Goppa Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
1 Introduction
1.1 ISBN and EAN numbers as examples of error detecting codes
ToDo: To be written
2
Assume that it happens rarely that a bit gets wrongly transmitted. In order to
detect single errors, we could add a parity check bit, that is we add a bit such that
the number of 1’s is even. The following table shows in the left column the original
length 2 words, and in the right column the actually sent word, henceforth called
code word:
00 → 000 We detect a single error, but cannot correct it. For instance, if
01 → 011 we receive 010, the correct word could have been 000 or 011.
10 → 101
11 → 110
In order to correct a single error, we could add more redundancy. A naive but
working idea is to just repeat the original word 3 times:
Next one could ask if we can save some bandwidth, and achieve the same result
with code words of length 5. Indeed, that is possible:
00 → 00000 Again, any two code words differ in at least 3 positions. Thus
01 → 01011 we can correct a single transmission error.
10 → 10111
11 → 11100
The obvious next question is whether we can do that for suitable code words of
length 4. We will soon learn how to systematically treat such questions. For later
reference we record this question.
Question 1.1. Are there 4 words of length 4 using the symbols 0 and 1 which differ
in at least 3 positions?
3
Definition 1.2 (Block code). Let F be a finite set of size ≥ 2, and n ∈ N. A
block code is a subset C ⊆ F n .
Remark 1.5. The minimum distance of a code C is the largest integer d such
that d(c, c0 ) ≥ d for every pair of distinct elements c, c0 ∈ C. If |C | ≤ 1, then
there are no such pairs, therefore the inequality holds for all d ∈ N, so we
consistently set d(C ) = ∞ in this case.
The following lemma explains the error correction capabilities of a code. If we use
a code C with the property (ii) in the lemma, we can correct up to e wrong symbols.
For if c ∈ C was sent, x ∈ F n was received, and at most e symbols got wrong, then c
is the unique element from C which differs in at most e positions from x. Thus we
correctly decode x to c.
Lemma 1.7. Let C ⊆ F n be a code and e ∈ N0 . Then the following assertions are
equivalent.
(i) d(C ) ≥ 2e + 1.
4
Proof. (i) implies (ii) by the triangle inequality.
Conversely, suppose that (i) does not hold, so there are distinct c, c0 ∈ C such that
d(c, c0 ) ≤ 2e. Then it is easy so see (confer Problem 1.15) that there is x ∈ F n with
d(c, x ) ≤ e and d(c0 , x ) ≤ e.
Many codes which we study in the following have more algebraic structure than
just being subsets of F n . In the following Fq denotes a finite field with q elements.
Definition 1.8 (Linear code). A linear code is a subspace C of the vector space
Fnq . We call it an (n, k, d) code, where k = dim C and d = d(C ).
Definition 1.9 (Weight). For x ∈ Fnq define the weight w( x ) to be the number
of nonzero entries in the vector x, so w( x ) = d( x, 0).
Lemma 1.10. Let C ⊆ Fnq be a linear code. Then d(C ) equals the minimum of the
weights w(c) for 0 6= c ∈ C.
Proof. For c, c0 ∈ C we have c − c0 ∈ C and d(c, c0 ) = w(c − c0 ), from this the claim
follows.
There are some easy modifications of a code which do not change its essential
properties. For instance, let σ ∈ Sym({1, 2, . . . , n}) be a permutation of the letters
{1, 2, . . . , n}, and C ⊆ F n be a code. Then
has the same size and minimum distance as C. There is another modification which
does not change size and minimum distance. Let F 0 be another set of size | F |, and
for each i = 1, 2, . . . , n let σi : F → F 0 be a bijection. Set
n
C 0 = {(σ1 (c1 ) σ2 (c2 ) . . . σn (cn )) | (c1 c2 . . . cn ) ∈ C } ⊆ F 0 .
5
Remark 1.12. It is easy to see that the equivalence of codes indeed is an equiv-
alence relation. Note, however, that if F = F 0 = Fq and C ⊆ Fnq is a linear code,
then a code C 0 ⊆ Fnq which is equivalent to C need not be linear. Linearity of
codes is preserved if in the above definition we only allow σi : Fq → Fq to be
maps of the form σi ( x ) = ai x for nonzero elements ai .
(a) Given F, n, and d, find codes C ⊆ F n with d(C ) ≥ d and |C | as large as possible.
(b) Given F, n, and d, find good upper bounds for the size |C | of codes C ⊆ F n
with d(C ) ≥ d.
(c) Let C ⊆ F n be a code which can correct up to e errors. Decoding means that
given x ∈ F n , find the (if it exists) the unique code word c ∈ C with d( x, c) ≤ e.
If |C | is very large, a naive search through all the code words can be too time
consuming. For many real world applications, it is important to have efficient
decoding algorithms. The lack of fast algorithms can render certain codes with
otherwise good parameters useless.
In this course we will be concerned with (a) and (b), and will not touch (c).
1.4 Problems
Problem 1.13. Read how the ISBN-10 numbers are defined and which error recog-
nizing properties they have.
Problem 1.14. The ISBN-13 number is a 13-digit number a1 a2 . . . a13 with ai ∈ {0, 1, . . . , 9}
such that
Analyze which switches of two consecutive digits are recognized, and which are not.
Problem 1.15. For u, v ∈ F n suppose that d(u, v) ≤ 2e for some e ∈ N. Show that
there is an element w ∈ F n such that d(u, w) ≤ e and d(v, w) ≤ e.
6
2 Simple bounds and codes attaining these bounds
Proof. By the triangle inequality, the balls Be (c) around the code words c ∈ C are
pairwise disjoint, hence
e
n
q = | F | ≥ ∑ | Be (c)| = |C | ∑
n n
( q − 1)i ,
c∈C i =0
i
An important class of codes are those where the Hamming bound is sharp. The
proof of the Hamming bound shows that in this case F n is a disjoint union of the
balls Be (c), c ∈ C.
7
Definition 2.5 (Perfect code). A code C ⊆ F n is a perfect code, if F n is the
disjoint union of the balls Be (c) around the code words c ∈ C for some integer
1 ≤ e ≤ n. In order to emphasize the radius e, one calls it also an e errors
correcting perfect code.
Theorem 2.8 (Hamming code). Let Fq be the finite field with q elements and 2 ≤
m ∈ N. For each 1-dimensional subspace of Fm
q pick a nonzero vector vi . Let n be the
number of these vectors. Set
C = {( a1 a2 . . . an ) ∈ Fnq | a1 v1 + a2 v2 + · · · + an vn = 0}.
q m −1
Then n = q −1 and C is a perfect linear code with d(C ) = 3 and of dimension n − m.
ϕ : Fnq → Fm
q , ( a1 a2 . . . a n ) 7 → a1 v1 + a2 v2 + · · · + a n v n .
8
for some i, so the vector from Fnq with λ in the i-th position and 0 elsewhere is
mapped to x.
By definition, C is the kernel of ϕ. The dimension formula gives dim C =
dim Fnq − dim Fm q = n − m.
We next show that d(C ) ≥ 3. Suppose this does hold, hence d(C ) ≤ 2. Since C
is a linear code, there is an element 0 6= c = ( a1 a2 . . . an ) ∈ C with w(c) ≤ 2.
Thus there are different indices i and j such that ak = 0 for all k different from i
and j. Thus ai vi + a j v j = 0. Since vi and v j are linearly independent, we obtain
ai = a j = 0, so c = 0, a contradiction.
In order to show that actually d(C ) = 3, note that v1 + v2 is a nonzero vector which
is not contained in hv1 i, nor in hv2 i. Thus v1 + v2 = −λvi for some nonzero scalar
λ and some index i ≥ 3. But then (1 1 0 . . . 0 λ 0 . . . 0) ∈ C, where λ is in the i-th
position.
The Hamming bound yields
qn qn
|C | ≤ = q m −1
= qn−m .
1 + n ( q − 1) 1+ ( q − 1)
q −1
9
(a), where we have to enlarge by a factor 3, or in the more clever last
example from Section 1.2, which still requires the factor 5/2.
for some integer m. In Problem 2.42 we see that for this conclusion it suffices to
assume that q is a prime power.
We discuss a few cases of the conditions (1) and (2).
(a) n = 2e + 1. I do not know if (1) has solutions besides q = 2, but it is not hard
to show that a perfect code with n = 2e + 1 exists only for q = 2, see Problem
2.40. Up to equivalence the only example is C = {(0 0 . . . 0), (1 1 . . . 1)}.
(b) e = 1. Possible solutions are n = (qm − 1)/(q − 1) as we have seen for the
Hamming codes. Here q need not be a prime power. However, it is not known
if there are perfect codes when q is not a prime power and n = (qm − 1)/(q − 1).
However, (1) has many more solutions if q is not a prime power. For instance,
n = (16m − 1)/5 and q = 6 solves (1). Later we will learn another necessary
condition for perfect codes which does not hold for this particular example.
10
in Section 6.1. In fact this is one of the most fascinating codes with many
connections to other topics like sporadic simple groups, Steiner systems, and
dense high dimensional Euclidean sphere packings.
(f) One might wonder if (1) can be discussed at least for q = 2. So the question
is which sums ∑ie=0 (ni) are powers of 2. It seems that this question is beyond
present techniques in number theory.
Proof. Let φ : C → F n−d+1 defined by cutting off the last d − 1 coordinates, that
is ( a1 , a2 , . . . , an ) is mapped to ( a1 , a2 , . . . , an−d+1 ). If c, c0 ∈ C are distinct, then
d(c, c0 ) ≥ d, so φ(c) and φ(c0 ) still differ in at least one position. Hence φ is
injective. The claim follows from |C | = |φ(C )| ≤ | F n−d+1 |.
Remark 2.11. Codes which achieve the Singleton bound are called MDS (max-
imum distance separable) codes. Not very much is known about MDS codes. In
the next section we will describe a large family of linear MDS codes.
C = {( f ( x1 ) f ( x2 ) . . . f ( xn )) | f ∈ Fq [ X ] of degree ≤ n − d} ⊆ Fnq .
11
f 7→ ( f ( x1 ) f ( x2 ) . . . f ( xn )). Suppose that f 6= 0. As deg f ≤ n − d, we know that
f has at most n − d roots. Thus there are at least d indices i such that f ( xi ) 6= 0.
Thus w( ϕ( f )) ≥ d, and therefore d(C ) ≥ d. Furthermore, as d ≥ 1, we see that ϕ
has trivial kernel, so it is an injective map. Thus dim C = dim V = n − d + 1.
The Singleton bound says n − d + 1 = dim C ≤ n − d(C ) + 1, so d(C ) ≤ d. Above
we saw that d(C ) ≥ d, so for our code the Singleton bound is sharp.
Proof. Set m = |C | and M = ∑u,v∈C d(u, v). As there are m(m − 1) pairs u, v in C
with u 6= v, and d(u, v) ≥ d for each such pair, we get
M ≥ d · m · ( m − 1). (3)
We compute the contribution of the first position of the code words to M. For
each i ∈ F let ai be the number of code words c ∈ C which have the first entry i.
Then
∑ ai = |C| = m. (4)
i∈ F
The contribution to M from the first position is
M1 = ∑ a i ( m − a i ).
i∈ F
We compute
M1 = ∑ ai ( m − ai )
i∈ F
m 2
≤ ∑ ai ( m − ai ) + ∑ ( ai − q
)
i∈ F i∈ F
2 !
m m
= ∑ ai m − 2ai +
q q
i∈ F
1
= m2 (1 − ),
q
12
where we used (4) in the last step.
This consideration holds for all n positions, hence M ≤ n · m2 (1 − 1q ) and therefore
1
d · m · ( m − 1) ≤ M ≤ n · m2 · (1 − ).
q
Remark 2.14. The proof of the Plotkin bound shows that equality holds if and
only all distinct code words u, v ∈ C have the same distance d = d(u, v), and if
in every position each symbol appears the same number of times.
The Plotkin bound has an interesting application to MDS codes. First we need an
easy observation.
Proof. Set q = | F |. Clearly d(Ci ) ≥ d(C ) for all i, and |C | = ∑i∈ F |Ci |. Furthermore,
|C | = qn−d(C)+1 , because C is an MDS code. The Singleton bound, applied to each
of the Ci , gives
Theorem 2.16. Let C ⊆ F n be an MDS code with d(C ) < n. Then | F | ≥ d(C ).
13
apply the Plotkin bound to C 0 . Note that |C 0 | = q(d+1)−d+1 = q2 , so
d
q2 ≤ .
d − (d + 1)(1 − 1q )
This yields
q−d
≥ 0.
d−q+1
We assumed q ≤ d. So the denominator is positive, and we get q ≥ d.
Remark 2.17. The idea to apply the Plotkin bound to the MDS code of size q2
is due to Dominik Barth. My original proof was more complicated.
q m −1
Theorem 2.18 (Simplex code). Let q be a prime power, n = q−1 , and A ∈ Fm q
×n be
the matrix where the columns are representatives of the n one-dimensional subspaces
of Fm q . Let C ⊆ Fq be the linear code generated by the rows of A.
n
14
Remark 2.19. (a) The simplex codes meet the Plotkin bound.
Recall that a linear code C ⊆ Fnq is called an (n, dim C, d(C )) code.
Lemma 2.21. Let C ⊆ Fnq be a linear (n, k, d) code. Pick c ∈ C with 0 < w =
q
w(c) < q−1 d. Then Res(C, c) is a linear (n − w, k − 1, d0 ) code with d0 ≥ d − w + wq .
15
It remains to show that dim Res(C, c) = dim C − 1. Note that c is in the kernel of
ϕ. Note that by the assumption on w we have d − w + wq > 0, so w( ϕ(v)) > 0 if
v 6= αc. This shows that the kernel of ϕ is the one-dimensional space hci, and the
claim follows from the dimension formula.
Corollary 2.22. If there is a linear (n, k, d) over Fq with k ≥ 1, then there is a linear
(n − d, k − 1, d0 ) code over Fq with d0 ≥ dq .
Proof. Apply the previous lemma for a nonzero code word c with minimum
weight w(c) = d.
In the following theorem d x e is the ceiling function, so d x e is the smallest integer
m with m ≥ x.
Theorem 2.23 (Griesmer bound). For any linear (n, k, d) code over Fq the following
holds:
k −1
d
∑ qi ≤ n
i =0
Proof. We prove the theorem by induction for k. If k = 1 then the inequality claims
d ≤ n, which holds of course.
Thus assume that k ≥ 2. By the previous corollary we know that there is a linear
(n − d, k − 1, d0 ) code with d0 ≥ dq . Applying the induction hypothesis to this code
yields
k −2 0
d
∑ qi ≤ n − d.
i =0
From d0 ≥ d
q we obtain
k −2
d
∑ q i +1
≤ n−d
i =0
which is equivalent to the claimed inequality.
Remark 2.24. (a) For linear codes, the Griesmer bound is always at least as
good as the Singleton bound. See Problem 2.47.
(b) The simplex codes not only attain the Plotkin bound, but also the Gries-
mer bound.
(c) The ternary Golay code, which is a perfect (11, 6, 5) code over F3 , also
attains the Griesmer bound.
16
(d) There is no known generalization of the Griesmer bound to non-linear
codes.
It is easy to see that the property of being a Hadamard matrix does not change by
multiplying rows and columns by −1. In particular, if there is a Hadamard matrix
of size n, then there is also one of this size where the entries in the first row and
column are 1.
As H = (1) is a (rather trivial) Hadamard matrix, we see that there are Hadamard
matrices of size 2m for all m ∈ N0 . Sylvester’s construction can easily be generalized.
If there are Hadamard matrices of sizes m and n, then there is a Hadamard matrix
of size mn, see Problem 2.48.
Next we show a restriction on the sizes of Hadamard matrix.
17
Proof. Let H be a Hadamard matrix of size n ≥ 3. As remarked, we may assume
that H is normalized, so the first row contains only the entry 1. By permuting
columns we may assume that the first three rows of H look as follows:
1 1 ··· 1 1 1 ··· 1 1 1 ··· 1 1 1 ··· 1
1 1 ··· 1 1 1 ··· 1 −1 −1 · · · −1 −1 −1 · · · −1
· · · 1 −1 −1 · · · −1 1 ··· 1 −1 −1 · · · −1
1 1 1
.. .. .. . .. .. . . .. .. .. . . .. .. .. . . ..
. . . .. . . . . . . . . . . . .
| {z } | {z } | {z } | {z }
i j k `
i+j−k−` = 0
i−j+k−` = 0
i − j − k + ` = 0.
Remark 2.29. There is the conjecture that there is a Hadamard matrix of size
n whenever n ≡ 0 (mod 4). The smallest such n for which the existence of a
Hadamard matrix is open is 668.
As a preparation for the next theorem, we provide a lemma about the structure of
squares in finite fields of odd order.
Lemma 2.30. Let Fq be a finite field of odd order q. Let χ : Fq → Q be the Legendre
function, defined by
0,
if i = 0
χ(i ) = 1, if 0 6= i is a square in Fq
−1, if i is a non-square in Fq .
18
Proof. The map α : x 7→ x2 is a homomorphism from the multiplicative group F?q
to itself. The kernel of α is {−1, 1}, so the size of the image S, which is the group
of non-zero squares, is (q − 1)/2. Since S is a subgroup of index 2 in F?q , we get
(a). By definition, χ assumes the value 1 on S and −1 on the (q − 1)/2 elements
from F?q \ S. This implies (b).
Now suppose that q ≡ 3 (mod 4). Then (q − 1)/2, the order of S, is odd. There-
fore S does not contain the involution −1, and we obtain (c).
Theorem 2.31 (Paley). Let q be a prime power such that q ≡ 3 (mod 4). Then there
is a Hadamard matrix of size q + 1.
Proof. Let Fq be the finite field with q elements. We use Fq to number the rows
and columns of a matrix Q ∈ Qq×q . For i, j ∈ Fq , let Q[i, j] be the entry of Q in
position (i, j).
We use the definitions and results from the previous lemma. Define the matrix
Q ∈ Qq×q by Q[i, j] = χ(i − j). We calculate QQt :
= ∑ Q[r, k ] Q[s, k ]
k ∈Fq
= ∑ χ (r − k ) χ ( s − k )
k ∈Fq
= ∑ χ (r − s + k ) χ ( k ) k replaced by s − k
k ∈Fq
= ∑ χ (r − s + k ) χ ( k )
06 = k ∈Fq
= ∑ χ ( k (r − s ) + 1) since χ is multiplicative
06 = k ∈Fq
QQt = qIq − et e.
19
furthermore get
Qt = − Q.
Define
1 e
H= .
et Q − Iq
Then
eQt
t 1 e 1 e q+1
HH = t t t = .
e Q − Iq e Q − Iq Qet et e + QQt − Q − Qt + Iq
Part (b) of the previous lemma shows that the sums of the elements in each col-
umn and row of Q vanishes. Thus eQt , Qet are the 0-vectors. Together with
Qt = − Q, and QQt = qIq − et e we obtain HH t = (q + 1) Iq+1 .
Theorem 2.32. If there is a Hadamard matrix of size n > 1, then there is a code
C ⊆ F n−1 with | F | = 2 of size n and minimum distance n/2. In fact, the distance of
any distinct code words is n/2.
n
2
Remark 2.33. From n = n 1 we see that the Hadamard codes assume
2 −( n −1)(1− 2 )
the Plotkin bound.
(b) One might wonder if the following holds: If the Griesmer bound denies
the existence of a linear (n, k, d) code, so there is no non-linear code of
20
size qk in Fnq and minimum distance d(C ). However, that does not hold:
As in (a), now for the prime p = 19, we obtain a binary code C ⊆ {0, 1}19
of size 20 and minimum distance d(C ) = 10. In particular, a subset of C
has size 24 and still minimum distance 10. However, the Griesmer bound
shows that for a linear (19, k, 10) code we have k ≤ 3.
Theorem 2.35 (Reed-Muller codes). Fix 0 ≤ r ≤ m. Let Pr,m be the set of polyno-
mials in F2 [ X1 , X2 , . . . , Xm ] of total degree ≤ r and of degree ≤ 1 with respect to each
variable. Let v1 , v2 , . . . , vn be the n = 2m elements from F2m . Then
is a linear (2m , ∑ri=0 (mi), 2m−r ) code over F2 , the so-called Reed-Muller code
RM(r, m).
21
Clearly the monomials { X1e1 X2e2 . . . Xm
em
| 0 ≤ ek ≤ 1, ∑ ek ≤ r } are a basis of Pr,m .
The number of these polynomials with ∑ ek = i is (mi). Thus dim Pr,m = ∑ri=0 (mi).
Since w( f (v)) > 0 for 0 6= f ∈ Pr,m , we see that the linear map Pr,m → C is
bijective, so dim C = dim Pr,m .
(b) Given the alphabet size 2, the length 32, and minimum distance at least
16, one can show that 64 is indeed an upper bound for the size of the
code, see Problem 2.49.
Table 1 compares some of the bounds for small parameters of n, d, and q. We see that
for general codes, there are cases where each of the Hamming bound, the Singleton
bound, and the Plotkin bound gives the best result. So none of these bounds is
superseded by some other bound.
For comparison, we have included the Griesmer bound for linear codes. We see
that there are a few cases where the Hamming bound gives a better result. Note that
in the listed cases, the Plotkin bound actually isn’t worse than the Griesmer bound.
For instance for n = 7, q = 5, d = 6, the Plotkin bound gives |C | ≤ 15, while the
Griesmer bound gives |C | ≤ 5. But if C is linear, then |C | is a power of 5, so |C | ≤ 15
implies |C | ≤ 5 as well.
22
n = 5, q = 2 n = 5, q = 3 n = 6, q = 4 n = 7, q = 5 n = 8, q = 6
d 2 3 4 2 3 4 2 3 5 2 3 6 2 3 7
Hamming 32 5 5 243 22 22 4096 215 26 78125 2693 214 1679616 40966 216
Singleton 16 8 4 81 27 9 1024 256 16 15625 3125 25 279936 46656 36
Plotkin 6 2 6 10 15 21
Griesmer 16 4 2 81 27 3 1024 256 4 15625 3125 5
We have seen several constructions of codes. They all have a major shortcoming:
Given a finite set F of size q, and positive numbers δ and ρ, then only finitely many
d(C ) log |C |
of the codes C we learned so far fulfill n ≥ δ and nq ≥ ρ. Note that if C is
linear, then dim C = logq |C |. Using the existence theorems in this section, one can
1
show that for any 0 ≤ δ < 1 − q there is ρ > 0 such that there are infinitely many
d(C ) log |C |
inequivalent codes C such that δ and nqn ≥ ≥ ρ. (See Problem 2.52 for the
1
case δ > 1 − q .) So there are many more codes with interesting parameters.
qn
Proof. We show that if d(C ) ≥ d and |C | < for C ⊆ F n , then there
∑id=−01 ( i )(q−1)i
n
23
Lemma 2.38. For 1 ≤ d ≤ n and a prime power q assume that
d −2
n−1
∑ i
( q − 1)i < q n − k .
i =0
Then there are n elements in Fnq −k such that any d − 1 of them are linearly indepen-
dent.
l m
Proof. Set k = n − logq 1 + ∑id=−02 (n−i 1)(q − 1)i . Then k ≤ n −
logq 1 + ∑id=−02 (n−i 1)(q − 1)i and therefore 1 + ∑id=−02 (n−i 1)(q − 1)i ≤ qn−k , so
n −1
∑id=−02 ( i )(q − 1)i < qn−k .
By the previous lemma there exist n vectors v1 , v2 , . . . , vn ∈ Fqn−k such that no
d − 1 of them are linearly independent. Then
C = {(c1 c2 . . . cc ) | c1 v1 + c2 v2 + · · · + cn vn = 0}
has the required properties, for clearly d(C ) ≥ d, and as kernel of the linear map
Fnq → Fnq −k , (c1 c2 . . . cc ) 7→ c1 v1 + c2 v2 + · · · + cn vn we have dim C ≥ n − (n −
k ) = k.
The following graphics show some of our upper bounds and the Gilbert lower
bound for n = 100 and q = 2, 3 and 10.
24
25
2.13 Problems
Problem 2.40. Describe the perfect codes C ⊆ F n witch d(C ) = n.
(Hint: Use Problem 1.16.)
(b) Show that nevertheless there is no perfect code with these parameters.
(Hint: Use a suitable bound.)
26
Problem 2.45. Let x1 , x2 , . . . , xn be distinct elements of the finite field Fq , so q ≥ n.
Pick 1 ≤ d ≤ n.
generate an (n + 2, 3, n) MDS-code.
Problem 2.46. Euler’s thirty-six officers problem from 1782 asks the following:
Suppose that there are six regiments, each of these consisting of six offi-
cers of different ranks. Can we arrange these 36 officers in a 6 × 6 square
such that each regiment and each rank appears exactly once in each row
and column?
(a) Show that there is a solution if and only if there is an MDS-code C ⊆ F4 with
|C | = 36 and | F | = 6.
Problem 2.47. Show that for linear codes, the Griesmer bound is at least as strong
as the Singleton bound.
27
Problem 2.48. Suppose that there are Hadamard matrices of sizes m and n. Show
that there is a Hadamard matrix of size mn.
(Hint: For H = (hij ) and H 0 consider the block matrix where the block in position
(i, j) is hij H 0 .)
Problem 2.49. Let C ⊆ F n be a code, and | F | = q.
|C |
(a) Show that for each 0 ≤ i ≤ n there is a code C 0 ⊆ F n−i with |C 0 | ≥ qi
and
d(C 0 )
≥ d ( C ).
|C |
(Hint: Fix i positions. Show that a pattern at these positions occurs at least qi
times.)
(b) (Extended Plotkin bound) Set d = d(C ). Then for any i with 0 ≤ i ≤ n and
dqi
d − (n − i )(1 − 1q ) > 0 the following holds: |C | ≤ .
d−(n−i )(1− 1q )
(c) Show that the Reed-Muller code RM(1, 5), a linear (32, 6, 16) code, is the largest
possible binary (not necessarily linear) code of length 32 and minimum dis-
tance ≥ 16.
Problem 2.50. Let A2 (n, d) be the largest size of a binary code of length n and with
minimum distance ≥ d.
(a) Show that A2 (n, 2e) = A2 (n − 1, 2e − 1).
(b) Can (a) help in applying the Plotkin (or other) bound?
Problem 2.51. Set F = {0, 1, 2, 3, 4, 5}. Suppose that there is a perfect code C ⊆
F7 with d(C ) = 3. Let C 0 ⊆ F4 be the set of those tuples (u v w x ) such that
(0 0 0 u v w x ) ∈ C. Show that C 0 is an MDS code with |C 0 | = 36 and d(C 0 ) = 3.
(Hint: Show that each 5-tuple ( f 1 f 2 . . . f 5 ) can be completed to a code word ( f 1 f 2 . . . f 7 ) ∈
C.)
Problem 2.52. Set q = | F | and pick δ, ρ with δ > 1 − 1q and ρ > 0. Show that there
are only finitely many n ∈ N for which there is a code C ⊆ F n such that d(C ) ≥ δn
and logq (|C |) ≥ ρn.
3 Duality
3.1 The dual code
Let F be a field. We consider the standard symmetric bilinear form on F n , which is
defined by
n
hu|vi = ∑ ui vi ,
i =1
28
where u = (u1 u2 . . . un ) and v = (v1 v2 . . . vn ). Note that this form is not degener-
ate, that means if v 6= 0, then there is a vector u with hu|vi 6= 0.
For a subset C of F n set
(b) (C ⊥ )⊥ = C.
Proof. Set k = dim C, and let M be the (k × n)–matrix whose rows are a basis of
C. Then by definition C ⊥ consist of those vectors v where Mvt = 0. So C ⊥ is the
kernel of the linear map F n → F k , v 7→ Mvt . This map is surjective, because M
has rank k. The dimension formula gives (a).
By definition C ⊆ (C ⊥ )⊥ . On the other hand dim(C ⊥ )⊥ = n − dim C ⊥ = n −
(n − dim C ) = dim C. This yields (b).
Remark 3.2. We see that by definition, the dual code of a Hamming code is a
simplex code.
29
(b) (
| G |, if χ is trivial
∑ χ( g) = 0, if χ is non-trivial
g∈ G
Proof. (a) From 1 = χ(0) = χ(− g + g) = χ(− g)χ( g) we get χ(− g) = 1/χ( g). As
G is a finite group, there is n ∈ N such that ng = 0. So 1 = χ(ng) = χ( g)n . We
see that χ( g) is an n-th root of unity, so in particular χ( g)χ( g) = 1 and the claim
follows.
(b) The assertion is clear if χ is trivial. Thus assume that χ is non-trivial. So there
is h ∈ G which χ(h) 6= 1. Set S = ∑ g∈G χ( g). If g runs through G, then h + g runs
trough G as well. We obtain
hence S = 0 as χ(h) 6= 1.
Proof. Suppose that F = Z/qZ. Let ζ = e2πi/q be a primitive q-th root of unity.
Then for g = j + qZ set χ( g) = ζ j . This is well-defined, and defines a nontrivial
character on F with χ( g) = 1 if and only if g = 0. So in particular χ(ba) 6= 1 for
b 6= 0 and a = 1.
Next suppose that F is a finite field. Let p be the characteristic of F, so F contains
the prime field F p . By (a), there is a non-trivial character χ0 on (F p , +). Now F
is a vector space over F p , so there is a surjective linear map ψ : F → F p . Then
χ = χ0 ◦ ψ is a non-trivial character on F. As χ is not trivial, there is c ∈ F with
χ(c) 6= 1. So χ(ba) 6= 1 for b 6= 0 and a = b−1 c.
Remark 3.5. (a) In group theory, a character as defined here is called a linear
character. In general a character is defined as χ( g) = trace(φ( g)), where
φ : G → GLn (C) is a homomorphism. Note that in this case χ need not
be a homomorphism anymore. For finite abelian groups, one can show
that any character is built from linear characters, so there is little point in
considering non-linear characters.
30
arithmetic progressions.
(c) Any finite abelian group of order ≥ 2 has a non-trivial linear character,
see Problem 3.41. However, we cannot drop the assumption that G is
abelian: As G/ ker χ is isomorphic to a subgroup of the abelian group
C? , we see that ker χ contains the derived subgroup (syn. commutator
subgroup) G 0 . So if G = G 0 , which happens for instance for the alternat-
ing group Alt5 , there is no non-trivial linear character.
In the next three sections F will be a finite field Fq , or the residue ring Z/qZ
for some q ≥ 2, respectively. Suppose that F = Z/qZ. We consider F n as an
additive group, and like in the case that F is a field we define the bi-additive function
F n × F n → F which sends the pair u = (u1 u2 . . . un ), v = (v1 v2 . . . vn ) to hu|vi =
∑ ui vi . For v ∈ F n , let w(v) be the number of non-zero components vi . So d(u, v) =
w ( u − v ).
The main technical lemma to be used in the next three sections is
Lemma 3.6. Let z be a polynomial variable over C, and F be the residue class ring
Z/qZ for some q ≥ 2, or a finite field of order q. Then ( F, +) has a character χ such
that for all n ∈ N and u ∈ F n the following holds:
31
and w(0) = 0. This yields
∑ χ ( u i a ) z w ( a ) = 1 − z + ∑ χ ( u i a ).
a∈ F a∈ F
So in the product, the factor 1 − z appears w(u) times, and the remaining n − w(u)
factors equal 1 + (q − 1)z.
Let C ⊆ F n be a code. For x ∈ F n and 0 ≤ i ≤ n we let Ai ( x) be the number of
code words c ∈ C with d( x, c) = i. Several results in the following sections depend
on
Lemma 3.7. Let z be a polynomial variable over C, and F be the residue class ring
Z/qZ for some q ≥ 2, or a finite field of order q. Let χ be a character as in the
previous lemma.
Let C ⊆ F n be a code, x ∈ F n , and Âi ( x) be the coefficient of zi in
n
∑ Ai (x)(1 − z)i (1 + (q − 1)z)n−i .
i =0
Then !
Âi ( x) = ∑ χ(h x|vi) ∑ χ(hc|vi) .
v∈ Fn c∈C
w(v)=i
Using the previous lemma, the bi-additivity of the form h·|·i, and χ(− g) = χ( g),
32
we compute the right hand side:
The coefficient of zi arises from summing over those v ∈ F n with w(v) = i. The
claim follows.
n
AC (z ) = ∑ Ai zi = ∑ z w(c) .
i =1 c∈C
The weight enumerator of a code has several important applications. In this sec-
tion we will prove the surprising result by MacWilliams that for linear codes C, the
weight enumerator of C ⊥ can be computed in terms of the weight enumerator of C.
For another application of weight enumerators see Problem ???.
Before stating and proving the MacWilliams Identity, we show how characters can
be used to check if a vector lies in the dual of a code.
33
Theorem 3.9 (MacWilliams). Let C ≤ Fnq be a linear code with weight enumerator
A(z) = ∑in=0 Ai zi . Then the weight enumerator A⊥ (z) of the dual code C ⊥ is given
by
1 n
A⊥ (z) = ∑
| C | i =0
A i (1 − z ) i (1 + ( q − 1) z ) n −i .
Proof. We apply Lemma 3.7 with x = 0, hence χ(h x|vi) = 1. So the coefficient of
zi in
n
∑ A i (1 − z ) i (1 + ( q − 1) z ) n −i
i =0
is
∑n ∑ χ(hc|vi).
v∈ F c∈C
w(v)=i
(1 + ( q − 1) z ) n 1−z
⊥
A (z) = A .
|C | 1 + ( q − 1) z
Example 3.11. The MacWilliams identity can be used for instance to compute
q m −1
the weight enumerator of the Hamming codes. Set n = q−1 , and let C be the
(n, n − m, 3) Hamming code over Fq . Then we know that the dual code C ⊥ is
the (n, m, qm−1 ) Simplex code. Let A(z) and A⊥ (z) be the weight enumerators
of C and C ⊥ , respectively. Since all nonzero codewords in C ⊥ have weight
qm−1 , we have
m −1
A ⊥ ( z ) = 1 + ( q m − 1) z q .
34
The MacWilliams identity and C = (C ⊥ )⊥ then yield
A(z) = ( A⊥ )⊥ (z)
q m −1 !
(1 + ( q − 1) z ) n 1−z
m
= 1 + ( q − 1)
qm 1 + ( q − 1) z
q m −1 q m −1 −1
1 m q m −1
= m (1 + ( q − 1) z ) q − 1 + (q − 1)(1 − z) (1 + ( q − 1) z ) q − 1 .
q
Expanding in powers of z then yields very messy expressions for the coef-
ficients Ai . Without duality and the relation to the simplex code, it would
certainly have been very difficult to compute the weight enumerator of a Ham-
ming code.
Remark 3.13. We record a few simple facts, some of which we use without
further notice:
(a) B0 = 1 and |C | = B0 + B1 + · · · + Bn .
35
1
(b) Bi = |C | ∑ x ∈ C A i ( x ).
(c) If C is linear, then Ai = Bi for all i, and A(z) = B(z). Note that for
non-linear codes, Bi need not be integral.
are non-negative.
Proof. Without loss of generality we may assume that F = Z/qZ. Let B̂i be the
coefficient of zi in ∑in=0 Bi (1 − z)i (1 + (q − 1)z)n−i . From |C | Bi = ∑ x∈C Ai ( x) we
get |C | B̂i = ∑ x∈C Âi ( x), so
|C | B̂i = ∑ Âi ( x)
x∈C
!
= ∑ ∑ χ(h x|vi) ∑ χ(hc|vi) (by Lemma 3.7)
x∈C v∈ F n c∈C
w(v)=i
!
= ∑ ∑ χ(hx|vi) ∑ χ(hc|vi)
v∈ Fn x∈C c∈C
w(v)=i
2
= ∑ ∑ χ(hc|vi)
v∈ Fn
c∈C
w(v)=i
≥0
Lemma 3.15. Let C ⊆ F n be a code with distance enumerator B(z) = ∑in=0 Bi zi and
| F | = q ≥ 2. If the coefficient of zi in
n
∑ Bi (1 − z)i (1 + (q − 1)z)n−i
i =0
36
is 0, then for each x ∈ F n the coefficient of zi in
n
∑ Ai (x)(1 − z)i (1 + (q − 1)z)n−i
i =0
is 0 too.
Proof. In the notation of the proof of the previous theorem assume that B̂i = 0.
The proof then shows that
∑ χ(hc|vi) = 0
c∈C
for each v ∈ F n with w(v) = i. The claim then follows from Lemma 3.7.
We can slightly rephrase Delsarte’s Theorem. To do so, let Kk (i ) be the coefficient
of zk in (1 − z)i (1 + (q − 1)z)n−i . Then Delsarte’s Theorem says that ∑in=0 Bi Kk (i ) ≥ 0
for all 0 ≤ k ≤ n. Note B1 = B2 = · · · = Bd−1 = 0 for d = d(C ). Together with
B0 = 1 and |C | = B0 + B1 + · · · + Bn we get
Then |C | ≤ b + 1.
It may happen that there is no solution x at all. In this case one says that the
linear program is infeasible. It may also happen that there is no upper bound for ct x
for all solutions x, so the maximum is ∞. In this case the linear program is said to
37
unbounded.
In our case, it is easy to see that the previous theorem yields a linear program. Of
course it is feasible, because for instance bd = bd+1 = · · · = bn = 0 is a solution, and
Kk (0) ≥ 0.
It is less clear that the linear program is bounded. To show that, and in order to
obtain upper bounds for ct x, one considers the so-called dual linear program:
Theorem 3.18 (Weak Duality Theorem). With the notation from the previous def-
inition, suppose that there is y ∈ Rm with y ≥ 0 and At y ≥ c. Then ct x ≤ bt y for
each solution x of the original linear program.
ct x = xt c ≤ xt ( At y) = ( Ax)t y ≤ bt y.
By a suitable (yet very technical) choice of the vector y, one can use this theorem
for instance to retrieve the Singleton bound from Theorem 3.16. So this Theorem
is at least as strong as the Singleton bound. Other (more complicated) choices of
y yield the Hamming bound or the Plotkin bound. This already indicates that the
linear programming bound, despite its difficulty to actually use it, is a very strong
bound.
By applying the Weak Duality Theorem 3.18 in order to bound the maximum b
in Theorem 3.16 one does not loose anything. This follows from the Strong Duality
Theorem: If the linear program in Definition 3.17 is feasible and bounded, then there
exists a solution y in Theorem 3.18. Choose y such that bt y is minimal, and choose
x such that ct x is maximal. Then ct x = bt y. For a proof see any book about linear
programming or linear optimization.
38
Lemma 3.20. ˆ (z) = qn A(z). In other words, if
n n
∑ a i (1 − z ) (1 + ( q − 1) z )
i n −i
= ∑ bi z i ,
i =0 i =0
then
n n
∑ bi ( 1 − z ) i ( 1 + ( q − 1 ) z ) n − i = q n ∑ a i z i .
i =0 i =0
1− z
Proof. Clearly Â(z) = (1 + (q − 1)z)n A(ρ(z)) with ρ(z) = 1+(q−1)z
. Now
ρ(ρ(z)) = z, so
So the m × m matrix with entry (ki ) in position (k, i ) is singular. Therefore there
exist a non-zero sequence c0 , c1 , . . . , cm−1 with
m −1
i
∑ k ck = 0 for all i ∈ I.
k =0
39
Consider the polynomial
m −1
x
f (x) = ∑ ck
k
,
k =0
Then r (C ) ≤ r.
Corollary 3.23. Let C ≤ Fnq be a linear code, and let r be the number of different
weights which appear in the dual code C ⊥ . Then r (C ) ≤ r.
40
3.6 Perfect Codes, Part 2 (Lloyd’s Theorem)
As we have seen in Section 2.3, it has been impossible so far to use the sphere packing
condition in order to determine the potential parameters of a perfect code. Using
the techniques from the previous section, it is possible to prove a more technical, but
yet more useful condition on the parameters of a perfect code.
k
n−x
x
Kk ( x; n, q) = ∑ (−1) j
( q − 1) k − j
j =0
j k − j
If q and n are fixed, the we simply write Kk ( x ) instead of Kk ( x; n, q). Here ( xj) is
the polynomial x ( x − 1) . . . ( x − j + 1)/j!.
41
(b) We compute
∞ ∞ k
n−i
i
∑ Kk (i)z = ∑ ∑ (−1) j k − j (q − 1)k− j zk
k j
k =0 k =0 j =0
∞ ∞
n−i
j i
= ∑ (−1) ∑ k − j ( q − 1) k − j z k
j =0
j k= j
∞ ∞
n−i
j i
= ∑ (−1) ∑ k ( q − 1) k z k + j
j =0
j k =0
∞
i j
= ∑ (−1) j z (1 + ( q − 1) z ) n −i
j =0
j
= (1 − z ) i (1 + ( q − 1) z ) n −i .
Lemma 3.26. Let F be the residue class ring Z/qZ for some q ≥ 2. Then ( F, +) has
a character χ such that for all n ∈ N, u ∈ F n and 0 ≤ k ≤ n the following holds:
∑ χ(hu|vi) = Kk (w(u)).
v∈ Fn
w(v)=k
42
The previous Lemma shows that
e
∑ χ(hu|si) = ∑ ∑ χ(hu|vi) = Ψe (w(u)).
s∈S k =0 v ∈ F n
w(v)=k
∑n χ(hu|vi) = 0.
v∈ F
We obtain
0 = Ψe (w(u)) ∑ χ(hu|ci), (5)
c∈C
The proof of Theorem 3.14 shows that
1
B̂i =
|C | ∑n | ∑ χ(hv|ci)|2.
v∈ F c∈C
w(v)=i
Suppose that B̂i 6= 0 for i ≥ 1. Then there is an element u ∈ F n with w(u) = i and
χ(hu|ci) 6= 0, hence Ψe (w(u)) = 0 by (5).
43
Proof. As C is perfect with minimum distance 2e + 1, we see that r (C ) = e. By
Theorem 3.22, at least e of the elements B̂1 , B̂2 , . . . , B̂n from Lemma 3.27 do not
vanish. So, Lemma 3.27 tells us that at Ψe (i ) = 0 for at least e integers 1 ≤ i ≤ n.
But Ψe ( x ) is a polynomial of degree e, hence Ψe (i ) = 0 for exactly e integers
1 ≤ i ≤ n, and these are all the roots of Ψe . The claim then follows from Lemma
3.28, as Ψe ( x ) = Ke ( x − 1; n − 1, q).
Remark 3.30. (a) The proof shows that if C is perfect with d(C ) = 2e + 1,
then exactly e of the numbers B̂1 , B̂2 , . . . , B̂n do not vanish.
for all 0 ≤ i, k ≤ n.
Proof. This follows directly from the definition of the Krawtchouk polyno-
mials and the identity (ba) = b!(aa!−b)! . Note that in evaluating Kk (i ) =
i n −i
∑kj=0 (−1) j ( j)( k− j )(q − 1)k− j , it suffices to sum from j = 0 to the minimum of k
and i.
−1 n−1
K1 ( x − 1; n − 1, q) = x − n + . (6)
q q
44
So the necessary condition in Lloyd’s Theorem shows that q divides n − 1. This
condition cannot be obtained from the sphere packing condition, which says that
1 + n(q − 1) divides qn . (7)
It is not hard to show that there are infinitely many pairs (q, n) for which (6) holds,
but (7) does not hold; and that there are also infinitely many pairs, for which (7)
holds, but (6) does not hold. So in a sense these two conditions are independent
from each other.
It is unknown if there exist perfect codes C with d(C ) = 3 < n for which q is
not a prime power. Unfortunately, there are infinitely many pairs (q, n) for which
(6) and (7) hold, yet q is not a prime power. For example n = q + 1 fulfills both
conditions, but q = 6 is the only non prime power for which the non-existence of a
perfect (q + 1, qq−1 , 3)–code is known (see Problem ???).
If q is a prime power, then (7) implies (6): From Problem ??? we know that (7)
qk −q k −1
implies 1 + n(q − 1) = qk for some k ≥ 1. Then n − 1 = q −1 = q q q−− 1
1 , and we get
(6).
with c0 = 2
q2
(1 + n(q − 1) + n(n2−1) (q − 1)2 ) = 2qk−2 . So Lloyd’s Theorem says that
2n − 4
x2 + (1 − 2n + ) x + 2qk−2 (9)
q
45
has positive integral roots x1 ≥ 1 and x2 ≥ 1. Write q = p f with f ∈ N and p
a prime. As x1 x2 = 2qk−2 = 2p(k−2) f , we obtain x1 = 2p a and x2 = pb for some
a, b ≥ 0. Note that x1 6= x2 by Lloyd’s theorem. We see that either x1 /x2 ≥ 2 or
x1 /x2 ≤ 1/2 unless x1 = 2 · 3a , x2 = 3a+1 . The function z 7→ z + 1/z is convex for
z > 0, with a minimum in z = 1. This shows that
(
x1 x2 ≥ 52 , if { x1 , x2 } 6= {2 · 3a , 3a+1 }
+ is (10)
x2 x1 = 136, if { x1 , x2 } = {2 · 3a , 3a+1 }.
Note that
x1 x2 x2 + x22
+ = 1
x2 x1 x1 x2
( x + x2 )2 − 2x1 x2
= 1
x1 x2
( x + x2 )2
= 1 −2
x1 x2
(1 − 2n + 2nq−4 )2
= n ( n −1)
−2
2 2)
q 2 ( 1 + n ( q − 1 ) + 2 ( q − 1 )
x1 x2
We look at the first case x2 + x1 ≥ 25 . After some calculation we arrive at
n(q − 1) + q ≤ 7,
hence n = 5, q = 2.
x1 x2 2
It remains to look at the case p = 3, x2 + x1 = 3 + 32 . This yields the equation
The case e = 3 and | F | = q being a prime power is, up to a slightly lengthy compu-
tation, even easier than the case e = 2.
46
Theorem 3.34. Let C ⊆ F n be a perfect code with | F | = q and d(C ) = 7 ≤ n.
Suppose that q is a prime power. Then q = 2 and n = 7 or n = 23.
Proof. We have
q3 F ( a ) = (n − 3)(q − 1)(q − 2) ≥ 0
q3 F (b) = −(n − 2)(2q − 1)(q − 1) < 0
First suppose that q 6= 2. Then F ( a) > 0, F (b) < 0, so by the intermediate value
theorem, there is a real γ with F (γ) = 0 and a < γ < b. By Lloyd’s Theorem, we
have γ ∈ Z. As 0 < b − a = 1 − 1q < 1, neither a nor b can be integral. So q divides
neither n − 3, nor n − 2. On the other hand, the coefficients of F ( x ) need to be
integers, so q2 divides 3(2nq − n − q + 2)(n − 3). Recall that q is a prime power
q = p f . As p f does not divide n − 3, we get that p f +1 divides 3(2nq − n − q + 2),
so q = p f divides 2nq − n − q + 2, and then q divides n − 2, a contradiction.
Thus we know that q = 2. Here the Lloyd condition is of little help. However, the
(n+1)(n2 −n+6)
sphere packing condition shows that 1 + n + (n2 ) + (n3 ) = 6 is a power
of 2, a case handled in Problem ???.
(b) The preceding theorems can be extended to any e ≥ 2, besides the two
Golay codes no non-trivial perfect codes show up. This classification
result was a joint effort by several authors in the years 1970–1973. See
[vL75] for a nice historical survey, and [vL99] for a readable proof in the
case q = 2, e ≥ 2.
(c) If one does not require q to be a prime power anymore, it is much more
difficult to show that there are no new perfect codes for e ≥ 3. (As
remarked already, the cases e = 1 and e = 2 are wide open.) In [Bes83]
Best treated the cases e ≥ 3 except for e = 6 and e = 8. Hong settled the
remaining cases e = 6 and e = 8 in [Hon84].
47
3.7 Selfdual Codes
Let C ≤ Fnq be a linear code. Recall that the dual code C ⊥ is defined as the set of
u ∈ F n with hu|ci = 0 for all c = 0. The code C is called self-dual if C = C ⊥ . As
dim C + dim C ⊥ = n, we see that self-dual codes can exist only in even dimensions
n = 2m, and then dim C = m.
If C ≤ F2n is a binary self-dual code, then in particular hc|ci = 0 for all c ∈ C, so
c has even weight. As each c ∈ C has even weight, we conclude that (1 1 . . . 1) ∈
C ⊥ = C. We summarize these two easy observations:
(b) (1 1 . . . 1) ∈ C.
It has become customary to call a code doubly-even if all weights of the code words
are divisible by 4. Many interesting self-dual binary codes are doubly even. For later
use we state another easy lemma:
Lemma 3.37. Let C ≤ F2n be a binary linear code with C ≤ C ⊥ . Suppose that C is
generated by elements of weight divisible by 4. Then C is doubly-even.
Proof. It suffices to show that if u, v ∈ F2n have weights divisible by 4 and hu|vi =
0, then the weight of u + v is divisible by 4 too.
Let c be the number of positions where u and v have the entry 1. Let a and b be
the number of further 1’s in u and v, respectively. Then 4 divides w(u) = a + c
and w(v) = b + c, so 4 divides a + b + 2c = w(u + v) + 2c. As hu|vi = 0, we have
that c is even, and the claim follows.
Let C ≤ F2n be a binary doubly-even self-dual code. As (1 1 . . . 1) ∈ C has weight
n, we get 4 | n. A surprising consequence of the MacWilliams identity is that even
stronger 8|n.
Theorem 3.38 (Gleason). Let C ≤ F2n be a binary doubly-even self-dual code. Then
8 divides n.
48
1− z
have A(z) = A( Iz). Replacing z with 1+ z yields A( 11− z 1− z
+z ) = A ( I 1+z ), hence
(1 + z ) n 1−z
A(z) = m
A(µ(z)) with µ(z) = I . (11)
2 1+z
Note that
µ(0) = I, µ( I ) = 1, µ(1) = 0.
So setting z = 0, z = I, and z = 1 in (11) gives
1 (1 + I ) n 2n
A (0) = A ( I ) , A ( I ) = A ( 1 ) , A ( 1 ) = A (0). (12)
2m 2m 2m
Note that A(0) = 1 6= 0, so also A( I ), A(1) 6= 0. Multiplying the three equations
from (12), and noting that n = 2m, yields
(1 + I )2m (2I )m
1= = = Im.
2m 2m
However, the multiplicative order of I is 4, hence 4 | m and therefore 8 | n.
Remark 3.39. The usual proof of Gleason’s Theorem uses stronger techniques
from invariant theory, and gives a finer result about the shape of the weight
enumerator of a binary doubly-even self-dual code. See e.g. [Wil99]. We
quickly sketch the main ideas:
Let C ≤ Fnq be a linear code. It is convenient to work with a bivariate version
of the weight enumerator A( x, y) = ∑in=0 Ai xi yn−i . The MacWilliams identity
then gives the weight enumerator |C1 | ∑in=0 Ai (y − x )i (y + (q − 1) x )n−i for the
dual code. So if C is self-dual, then
y − x y + ( q − 1) x
A( x, y) = A √ , √ = A(( x y)U )
q q
with
1 −1 q − 1
U= √ .
q 1 1
If we assume in addition that q = 2 and C is doubly even, then A( x, y) =
A( Ix, y), which we can express as
A( x, y) = A(( x y)V )
with
I 0
V= .
0 1
49
Let G ≤ GL2 (C) be the group generated by U and V. Then A( x, y) =
ζ 0
A(( x y) g) for all g ∈ G. One computes that (UV )3 = where ζ is a
0 ζ
primitive 8th root of unity. So A( x, y) = A(ζx, ζy), which again implies 8 | n.
This explains the background of our proof from above, which bypasses these
considerations.
Of course knowing that 8 divides n is a rather coarse information about the
weight enumerator A( x, y). Using invariant theory one can describe the sub-
ring R of Q[ x, y] of those polynomials which are fixed by all g ∈ G. One
obtains R = Q[ F8 , F24 ] with F8 = x8 + 14x4 y4 + y8 , F24 = x4 y4 ( x4 − y4 )4 . Fur-
thermore, F8 and F24 are algebraically independent, so there is a unique poly-
nomial P( x, y) ∈ Q[ x, y] with A( x, y) = P( F8 , F24 ).
In order to prove these results, one has to study more carefully the group G
which happens to have order 192.
3.8 Problems
Problem 3.40. Let C ≤ Fnq be a linear (n, k, n − k + 1) code, so C is an MDS code.
Show that the dual code C ⊥ is an (n, n − k, k + 1) code, so it is an MDS code too.
(Hint: Let M be the matrix whose rows are a basis of C. If C ⊥ contains an element
v 6= 0 with w(v) ≤ k, then there are k columns in M which are linearly dependent.
Show that there is a non-trivial linear combination of the rows of M which is 0 in k
positions.)
Problem 3.41. Let G be a finite abelian group of order > 1. Show, without using the
structure theorem for finite abelian groups, that G has a non-trivial character.
50
on δ. So asymptotically fˆ bounds the relative rate of a code in terms of the relative
minimum distance.
On can compute these functions fˆ for the bounds mentioned above. For the Del-
sarte bound, where f (n, d, q) is the bound given by solving the associated linear
program, fˆ(δ) is not known.
The following displays two examples of the quality of the bounds. We have omit-
ted the Griesmer bound, because it applies only to linear codes. A refinement of the
proof of the Plotkin bound yields the Elias bound, which is often the next best bound
after the Delsarte bound. As we have not discussed this bound, we don’t display it
here.
51
5 Application to Projective Planes
Theorem 5.1. Let A ∈ Zn×n be a matrix with det A 6= 0, and p be a prime. Let
C ≤ Fnp be the code generated by the rows of A, and let m be maximal with pm | det A.
Then dim C ≥ n − m.
Proof. For X ∈ Zr×s let X̄ be the natural image of X in Frp×s . Conversely, for
X̄ ∈ Frp×s let X ∈ Zr×s be any matrix which is mapped to X̄.
Set k = dim C. Then dim C ⊥ = n − k. Let M̄ be the (n − k ) × n matrix whose
rows are a basis of C ⊥ . As M̄ has rank n − k, we may assume after permuting co-
ordinates in C ⊥ and
C that the first n − k columns of M̄ are linearly independent.
Write M̄ = Ū V̄ with a U ∈ Z k)×(n−k) and V ∈ Z(n−k)×k . Let Ik ∈ Zk×k be
( n −
52
the identity matrix, and set
U V
N= ∈ Zn × n .
0 Ik
(c) There are four distinct elements Q in P such that for any ` ∈ L there are at
most 2 elements q ∈ Q with (q, `) ∈ I.
We can make this abstract definition a little more concrete: Identify each ` ∈ L with
the subset of those p ∈ P such that ( p, `) ∈ I, and call these subsets lines. Call the
elements in P points. Then (a) says that any two distinct points lie on exactly one
line, (b) says that any two distinct lines have exactly one common point, and (c) says
that there is a non-degenerate quadrangle.
From now on we take this point of view, so L is a set of subsets of P with the
properties from above.
Lemma 5.2. Let ( P, L) be a projective plane, and `1 , `2 be two distinct lines. Then
there is a point which is neither on `1 , nor on `2 .
Theorem 5.3. Each line of a projective plane contains the same number of points.
53
Proof. Let `1 and `2 be two distinct lines, and p be a point not contained in these
lines. For q ∈ `1 let φ(q) be the intersection of the line `2 with the line through q
and p. The properties of a projective plane then show that φ is bijective.
A finite projective plane is a projective plane with P a finite set. As L is a set of
subsets of P, we see that L is finite as well. Let n + 1 be the common number of
points on a line of a finite projective plane. We call n the order of the projective
plane.
Theorem 5.4. Let ( P, L) be a finite projective plane of order n. Then there are n + 1
lines through each point, and | P| = | L| = n2 + n + 1.
Proof. Let p be a point. Not all sides of a quadrangle can contain p, so there is a
line ` not containing p. For each line `0 with p ∈ `0 let φ(`0 ) be the intersection of
`0 with l. Then φ is a bijection, so there are n + 1 lines through p.
The n + 1 lines through p are, up to p, disjoint, and contain n points besides p.
Also, every point 6= p is on exactly one line through p. So there are (n + 1)n + 1 =
n2 + n + 1 points.
The assertion about the number of lines either follows from the same argument,
where the lines and points switch their roles, or by this counting argument: Let
m the number of lines. We count the triples ( p1 , p2 , `) with p1 , p2 ∈ `, p1 6= p2 in
2
two ways. One the one hand, this number equals (n +2n+1) = (n2 + n + 1) n+ 1
2 . On
the other, this number is m(n+ 1
2 ), and the claim follows.
Theorem 5.6. Let A be the incidence matrix of a projective plane of order n. Then
n+1 1 ... 1
t t
1 n+1 ... 1
AA = A A = . .. ,
. .. . .
. . . .
1 1 ... n+1
a matrix with n + 1 on the diagonal, and 1 elsewhere. Furthermore, each row and
column of A contains the entry 1 exactly n + 1 times.
54
5.3 A Special Case of the Bruck–Ryser Theorem
A major open problem in finite geometry is the question for which n ∈ N there is a
projective plane of order n. Below we see that if n is a prime power, there is a plane
of order n. On the other hand, no projective plane of order not a prime power has
been found yet. Up to the combination of theoretical and computational arguments
in the proof of the non-existence of planes of order 10 (see Section 5.3.1), the only
other non-existence result is
Theorem 5.7 (Bruck-Ryser 1949, [BR49]). Suppose that n ≡ 1 or 2 (mod 4), and
that n 6= x2 + y2 for all x, y ∈ Z. Then there is no projective plane of order n.
We will not prove this result here, but see Remark 5.11. Instead, we will show
how our results in coding theory can be used to get a special case. Namely suppose
that n ≡ 6 (mod 8). Then n cannot be sum of two squares, and the Bruck–Ryser
Theorem shows that there is no plane of order n. Below we give a direct proof for
this.
But before doing so, we quickly show that projective planes exist for each prime
power order:
Theorem 5.8. For every prime power q > 1 there is a projective plane of order q.
Proof. Let V be the vector space F3q . Let P and L be the set of 1-dimensional and
2-dimensional subspaces, respectively. We say that p ∈ P is on the line ` ∈ L,
if p ∈ `. Then one easily verifies the properties of a projective plane. Note
that the four 1-dimensional spaces h(1 0 0)i, h(0 1 0)i, h(0 0 1)i, h(1 1 1)i have the
property that no 3 of them are contained in a 2–dimensional subspace, so we get
a quadrangle.
The number of 1-dimensional subspaces in a 2-dimensional subspace is (q2 −
1)/(q − 1) = q + 1, so our plane has order q.
55
Proof. Note that
−1
..
At
DBt D −1 =
. .
−1
−1 . . . −1 n + 1
The claim then follows from the form of AAt given in Theorem 5.6, and the fact
that each row and column of A contains the entry 1 exactly n + 1 times.
Theorem 5.10. Let n ∈ N with n ≡ 6 (mod 8). Then there is no finite projective
plane of order n.
Proof. (Assmus, see [HW06, Satz 7.4.16]) Suppose that n ≡ 6 (mod 8), and that A
is the incidence matrix of a projective plane of order n. Set N = n2 + n + 1. The
assumption on n gives
N + 1 ≡ 4 (mod 8). (13)
Build B ∈ Z( N +1)×( N +1) as in the previous lemma. Taking determinants in
BDBt = nD shows (det B)2 = n N +1 , hence det B = ±n( N +1)/2 . Let m be max-
imal with 2m | det B. The assumption on n shows that 4 - n, hence m = N2+1 .
( N +1)×( N +1)
Let X̄ be the image in F2 of X ∈ Z( N +1)×( N +1) , and C ≤ F2N +1 the
binary code generated by the rows of B̄. As D̄ is the identity matrix and 2 | n, we
see that B̄ B̄t = 0. That means that hb1 |b2 i = 0 for any two rows b1 , b2 of B. So
C ≤ C ⊥ and therefore dim C ≤ N2+1 . On the other hand, dim C ≥ N + 1 − m ≥
N + 1 − N2+1 = N2+1 by Theorem 5.1. So we have equality everywhere, so C is
self-dual.
Each row of B̄ but the last one contains n + 2 times the entry 1, while the last row
contains N + 1 times the entry 1. So in each row, the number of 1s is divisible by
4. In particular, C is doubly-even by Lemma 3.37. But then 8 | N + 1 by Theorem
3.38, contrary to (13).
Remark 5.11. All proofs of the Bruck–Ryser Theorem are based on Lemma 5.9
or minor modifications of it. Suppose that n is the order of a projective plane.
In the language of quadratic forms, the lemma says that the quadratic forms
described by the matrices D and nD are equivalent over the rationals. Using
the easier direction of the Hasse–Minkowski Theorem one shows (under the
assumption on n modulo 4) that each prime p with p ≡ 3 (mod 4) occurs in
n with an even (possibly 0) multiplicity. From elementary number theory, we
get that n = x2 + y2 for x, y ∈ Z.
There is a modification which avoids the use of the Hasse–Minkowski Theo-
rem, and instead uses Lagrange’s Theorem that each positive integer n is a sum
56
of 4 squares. Using this and elementary calculations, one arrives at n = u2 + v2
with rational u, v. Again, elementary number theory implies that n = x2 + y2
for suitable integers x, y. That is the usual proof in text books, see e.g. [Hal98].
One might wonder if the coding–theoretic proof of the special case n ≡ 6
(mod 8) can be extended to a full proof of the Bruck–Ryser Theorem. Indeed,
while somewhat technical, this is possible. See [Lan83].
(
0, i 6= j and i, j are connected by an edge
Aij =
1, otherwise
57
we obtain the first four rows of the matrix A, where we drop the 0s for better read-
ability:
1 1 1 1 1 1 1
1 1 1 1 1 1 1
A = 1 1 1 1 1 1 1
1 1 1 1 1 1 1
.. .. .. .. .. .. .. .. .. .. .. ..
. . . . . . . . . . . .
(c) h a| a0 i = 0 for any two distinct rows of A, and AAt = A2 = I, where I denotes
the identity matrix.
Proof. (a) This holds, because every vertex is not connected by an edge with 12 −
5 = 7 vertices. In particular, h a| ai = 1 for each row a of A.
(b) Any pair of distinct vertices can be mapped by a symmetry of the icosahedron
to the pair (1, 2), (1, 3), or (1, 4). So we only have to compare the first row of A
with the second, third and fourth row.
(c) As in (b), we see that a and a0 have a common 1 in 2 or 4 positions, hence
h a| a0 i = 0. We get AAt = I from this and (a), and then A2 = I because A is
symmetric.
Set
×24
B = I A ∈ F12
2
58
and let G24 = C ≤ F24
2 be the binary code generated by the rows of B.
Theorem 6.2. The extended binary Golay code G24 is a self–dual, doubly-even
[24, 12, 8]–code.
Proof. Clearly B has rank 12, so dim C = 12. From AAt = I we get that the rows of
B are pairwise orthogonal, so C ≤ C ⊥ . But dim C + dim C ⊥ = 24 and dim C = 12,
hence C = C ⊥ . Each row of B has weight 8, so C is doubly-even by Lemma 3.37.
Of course d(C ) ≤ 8. Suppose that d(C ) ≤ 4. As the weight of the code words of
C are divisible by 4, we get d(C ) = 4. Pick c ∈ C with w(c) = 4. The elements
of C have the form uB = (u uA), where u runs through F12 2 . Hence c = ( u uA )
0
for a suitable u. We claim that c = (uA u) ∈ C. Set v = uA. From (v vA) ∈ C
and A2 = I we obtain c0 = (uA u) ∈ C. From 4 = w(c) = w(u) + w(uA) we
obtain that w(u) ≤ 2 and w(uA) ≤ 2. So by probably passing to c0 , we may and
do assume that w(u) ≤ 2.
If w(u) = 0 then u = 0, hence c = 0, a contradiction. If w(u) = 1, then c is a row
of B, hence w(c) = 8, again contrary to w(c) = 4. Finally assume that w(u) = 2.
Then c is the sum of two distinct rows of B. So there are two distinct rows a and
a0 of A with 2 = w( a + a0 ) = d( a, a0 ). However, d( a, a0 ) ≥ 6 by the lemma.
One can easily determine the weight distribution Ai of C = G24 without comput-
ing all the 212 code words:
Theorem 6.3. The weight enumerator of the extended binary Golay code G24 is 1 +
759z8 + 2576z12 + 759z16 + z24 .
1−z
212 A(z) = 212 A⊥ (z) = (1 + z)24 A( ).
1+z
59
(1 + ω )24 = (−ω 2 )24 = 1. This yields
1−ω
(1 + ω )24 A( ) = A( β) = (1 + 312 ) + (34 + 38 ) A8 + 36 A12 ,
1+ω
hence
212 (2 − A8 + A12 ) = (1 + 312 ) + (34 + 38 ) A8 + 36 A12 .
This, together with (14) eventually yields A8 = 759, A12 = 2576, and the claim
follows.
Remark 6.4. The extended binary Golay code G24 has many exciting connec-
tions to other areas of mathematics. For instance, we can consider its automor-
phism group G, which is the group of those permutations of the coordinates
which map code words to code words. Using our definition of the code, it is
easy to see that there are at least 120 automorphisms of the code, see Prob-
lem ???. Actually, the group G of all automorphisms is quite big. It acts 5–fold
transitively on the coordinate positions, and the pointwise stabilizer of 5 points
has order 48. Thus | G | = 24 · 23 · 22 · 21 · 20 · 48 = 244823040. Furthermore,
one can show that G is simple, it is called the Mathieu group M24 , one of the
26 sporadic simple groups.
The code G24 is connected to other fascinating combinatorial objects, the Steiner
systems. Let 2 ≤ t < k < n be integers. A Steiner system S(t, k, n) is a set S of
k–element subsets of a set M of size n, such that each t–element subset of M is
a subset of exactly one set from S. For instance, a projective plane of order n
gives an S(2, n + 1, n2 + n + 1) Steiner system, because any two distinct points
are contained in exactly one line (which has size n + 1).
It is an open problem if there are Steiner systems S(t, k, n) with t ≥ 6. However,
there are a few with t = 5. The code G24 allows to construct a S(5, 8, 24)
Steiner system: For each of the 759 code words c = (c1 c2 . . . , c24 ) of weight 8
associate the 8–element subset of M = {1, 2, . . . , 24} consisting of the indices i
with ci = 1. It is not hard to see that any 5–element subset of M is contained
in exactly one of these 8–element subsets. See Problem ???.
Another interesting construction, a slight modification of the preimage in Z24
of G24 under the natural map Z24 → F24 2 , gives the Leech lattice. It is an
exceptionally dense lattice in R whose automorphism group yields further
24
Lemma 6.5. Let C be a binary [24, 12, 8] code, and C 0 be the code obtained form C by
deleting a coordinate position. Then C 0 is a perfect [23, 12, 7]–code.
60
Proof. Deleting one coordinate position lowers the weight by at most 1, hence
d(C 0 ) ≥ 7, so the balls of radius 3 around the code words of C 0 are disjoint.
However, 212 (1 + (23 23 23
1 ) + ( 2 ) + ( 3 )) = 2 , so these balls disjointly cover F2 , hence
23 23
Remark 6.6. As all the code words in G24 have even weight, one can recover
G24 from G23 by appending a parity check bit. Historically G23 was known and
used before G24 . This explains the extended in the name of G24 .
Besides the beautiful mathematical properties, the binary Golay codes (G24
more than G23 ) had been used in the past for the NASA deep space missions,
and is used nowadays in radio communication.
Remark 6.7. There is the following uniqueness result for the extended binary
Golay code: Let C ⊆ F242 be a not necessarily linear code with |C | = 2
12 and
Then CC t = − I6 .
61
Proof. Let ai be the i-th row of A. Then h ai | a j i = 1 if i = j, and h ai | a j i = −1 for
i 6= j. As each row in A arises from rotating the preceding row to the right by one
step, we may assume i = 1 in verifying the cases. Together with the observation
that the entries of each row of A sum up to 0, we get that CC t = − I6 .
Remark 6.9. The matrix A is the modulo 3 reduction of a so-called Paley matrix,
which in general is defined as follows: Index the rows and columns of A with
the finite field Fq . For i, j ∈ Fq define the entry Ai,j of A ∈ Zq×q in position
(i, j) by
0,
if i = j
Ai,j = 1, if 0 6= i − j is a square in Fq
−1, if i − j is not a square in Fq .
and let G12 ≤ F123 be the ternary code generated by the rows of B. We call G12 the
extended ternary Golay code.
Theorem 6.10. The extended ternary Golay code G12 is a self–dual [12, 6, 6]–code.
Proof. Length and dimension of G12 are clear. The previous lemma implies BBt =
0, so the rows of B generate a self-dual code. From hc|ci = 0 for each c ∈ G12
and i2 = 1 for each 0 6= i ∈ F3 we see that the weights of the code words of G12
are divisible by 3. So in order to show that d(C ) = 6 we need to show that there
are no words of weight 3. Suppose that there is c ∈ G12 with w(c) = 3. Write
c = (u uC ) with u ∈ F63 . Then 3 = w(u) + w(uC ). Clearly w(u) = 0 and w(u) = 1
are not possible. Suppose that w(u) = 2. Then w(uC ) = 1, and uC is a linear
combination of two rows of C. But this implies w(uC ) ≥ 2, because, each row
of C has a unique 0 entry in a different position. Finally assume w(u) = 3, then
w(uC ) = 0, so uC = 0. But CC t = − I6 implies that C is invertible, hence u = 0, a
contradiction again.
Let G11 be the code obtained from deleting a coordinate position of G12 . As in the
binary case, we see that G11 is a perfect [11, 6, 5]-code, the ternary Golay code. Again,
one can show that up to isomorphism there is only one (11, 36 , 5)-code and only one
62
(12, 36 , 6)-code. This, however, is much more difficult to prove than in the binary
case.
Of course, this bound is sharp if and only if C is a perfect (11, 36 , 5)-code. Surpris-
ingly, Virtakallio found a system with |C | = 36 , the ternary Golay code! The way he
described his code indicates that he didn’t know much about mathematics, which
makes it even more mysterious that he could find this code!
This example is a special case of a so-called covering code, arising from a question
which is kind of opposite to the error correcting codes: Set | F | = q, and let Kq (n, e)
be the minimal size of a set C ⊆ F n such that the balls of radius e around c ∈ C
cover F n . So the perfectness of the ternary Golay codes gives K3 (11, 2) = 36 = 729.
Virtakallio’s achievement is even more surprising considering that as of 2011, the
values K3 (n, 2) were unknown for 6 ≤ n ≤ 10. For instance, one only knows that
15 ≤ K3 (6, 2) ≤ 17 (see [Kér11]).
See [CHLL97] for a whole book devoted to covering codes. It also contains more
details about Virtakallio’s exciting discovery.
7 Goppa Codes
to be written
63
7.1 Classical Goppa Codes
to be written
64
Index
binary Golay code, 57, 61 minimum distance, 4
block code, 4
normalized Hadamard matrix, 17
character, 29
code, 4 order, 54
conference matrix, 62 Paley matrix, 62
covering code, 63 perfect code, 8
covering radius, 38 points, 53
projective plane, 53
distance distribution, 35
distance enumerator, 35 Reed-Muller code, 21
doubly-even, 48 Reed-Solomon codes, 11
dual code, 29 residual code, 15
dual linear program, 38
self-dual, 48
equivalent, 5 simplex code, 14
extended binary Golay code, 57 sphere packing bound, 7
extended ternary Golay code, 62 Steiner systems, 60
finite projective plane, 54 ternary Golay code, 62
Gilbert bound, 23 unbounded, 38
Griesmer bound, 16
Varshamov bound, 24
Hadamard matrix, 17
Hamming ball, 7 weight, 5
Hamming bound, 7 weight distribution, 33
Hamming code, 8 weight enumerator, 33
Hamming distance, 4
infeasible, 37
Krawtchouk polynomial, 41
Leech lattice, 60
linear character, 30
linear code, 5
lines, 53
MacWilliams transformation, 38
MDS code, 11
Minimum distance, 4
65
References
[Bes83] M. R. Best, A contribution to the nonexistence of perfect codes, Ph.D. thesis,
Mathematisch Centrum, Amsterdam (1983).
[CS99] J. H. Conway, N. J. A. Sloane, Sphere Packings, Lattices and Groups, vol. 290
of Grundlehren der Mathematischen Wissenschaften, Springer-Verlag, New
York, 3rd edn. (1999), With additional contributions by E. Bannai, R. E.
Borcherds, J. Leech, S. P. Norton, A. M. Odlyzko, R. A. Parker, L. Queen
and B. B. Venkov.
[Hal98] M. Hall, Jr., Combinatorial Theory, Wiley Classics Library, John Wiley &
Sons Inc., New York, 2nd edn. (1998), A Wiley-Interscience Publication.
[Lam91] C. W. H. Lam, The search for a finite projective plane of order 10, Amer. Math.
Monthly (1991), 98(4), 305–318.
[vL75] J. H. van Lint, A survey of perfect codes, Rocky Mountain J. Math. (1975), 5,
199–224.
66
[vLW01] J. H. van Lint, R. M. Wilson, A Course in Combinatorics, Cambridge Uni-
versity Press, Cambridge, 2nd edn. (2001).
67