Justesen codes #
Let F be a finite field whose elements are written as b bits through an additive bijection
φ : F ≃+ BitString b, so that F has q = 2 ^ b elements; every field of characteristic two with
2 ^ b elements has such a bijection (Cslib.nonempty_addEquiv_bitString). The Justesen
code [Jus72], [GRS19] of outer dimension K concatenates the Reed–Solomon
code of dimension K whose evaluation points are the q - 1 nonzero elements u of F with inner
codes that vary with the position: the symbol a at the position u becomes the 2 * b bits of
(a, u * a), its Wozencraft encoding Cslib.Code.wozencraft (Cslib.Code.justesen,
Cslib.Code.justesenCode). No search over inner codes is involved, which is what makes the
construction explicit.
Nonzero symbols at distinct positions have distinct Wozencraft encodings, since (a, u * a)
determines a and then u (Cslib.Code.wozencraft_inj). Two distinct Reed–Solomon codewords
differ at s ≥ q - K positions; the differences of their inner blocks there are s distinct
nonzero binary words of length 2 * b, at most V(r) = ∑_{j ≤ r} C(2 * b, j) of which have
weight at most r (Cslib.Code.card_filter_hammingNorm_le_eq_sum_choose). So their Justesen
encodings are at distance at least (q - K - V(r)) * (r + 1) for every r
(Cslib.Code.le_minDist_justesenCode), by the counting bound
Cslib.Code.sub_card_mul_le_sum_hammingNorm.
With the binomial estimate V(r) * 4 ^ (2 * b) ≤ 4 ^ r * 5 ^ (2 * b)
(Cslib.Code.sum_range_choose_mul_four_pow_le), this shows that Justesen codes are
asymptotically good: for b = 16 * s and K = 2 ^ (16 * s - 1), the Justesen code is a binary
code of length n = 32 * s * (2 ^ (16 * s) - 1) with 2 ^ k codewords, where n ≤ 4 * k, and
minimum distance at least n / 128 (Cslib.Code.justesenCode_asymptoticallyGood); the lengths
grow without bound with s, while the rate stays at least 1 / 4 and the relative distance at
least 1 / 128. These constants are not optimized: estimating V(r) by the binary entropy
function H instead gives relative distance approaching (1 - 2 R) H⁻¹(1 / 2) ≈ 0.11 * (1 - 2 R)
at rate R < 1 / 2 [GRS19]; this is not formalized here.
Main definitions #
Cslib.Code.wozencraft: the Wozencraft inner encoding with a given multiplier.Cslib.Code.justesen: the Justesen encoding of an outer word.Cslib.Code.justesenCode: the Justesen code.
Main results #
Cslib.Code.wozencraft_inj: nonzero symbols at distinct positions have distinct encodings.Cslib.Code.sub_card_mul_le_sum_hammingNorm: many distinct words have large total weight.Cslib.Code.le_minDist_justesenCode: the minimum distance of Justesen codes.Cslib.Code.card_justesenCode: the number of codewords.Cslib.Code.justesenCode_asymptoticallyGood: Justesen codes are asymptotically good.
References #
- J. Justesen, Class of constructive asymptotically good algebraic codes
- [V. Guruswami, A. Rudra, M. Sudan, Essential Coding Theory] [GRS19]
Weights of distinct words #
Distinct words are heavy. If g is injective on S, the words g u for u ∈ S have
total weight at least (#S - V) * (r + 1), where V is the number of words of weight at most
r.
The size of a binary Hamming ball. There are ∑_{j ≤ r} C(n, j) binary words of length
n and weight at most r.
The Wozencraft encoding #
The Wozencraft encoding of the symbol a with multiplier u: the binary word on
Fin 2 × Fin b holding the bits of a in its first half and the bits of u * a in its second,
read through the additive bijection φ : F ≃+ BitString b.
Instances For
The Wozencraft encoding with a fixed multiplier is injective: the first half of the encoding holds the bits of the symbol.
Distinct inner codes. The Wozencraft encoding of a nonzero symbol determines the symbol and the multiplier: nonzero symbols at distinct positions of a Justesen codeword have distinct encodings.
Justesen codes #
The distance of Justesen codes [Jus72]. For a field with q elements written as
b bits, the Justesen code of outer dimension K has minimum distance at least
(q - K - V(r)) * (r + 1) for every r, where V(r) = ∑_{j ≤ r} C(2 * b, j) is the number of
binary words of length 2 * b and weight at most r.
The number of Justesen codewords. For a field with q elements written as b bits and
K ≤ q - 1, the Justesen code of outer dimension K has q ^ K = 2 ^ (b * K) codewords.
Justesen codes are asymptotically good [Jus72]. Let s ≥ 1 and let F be a field
written as b = 16 * s bits, which then has 2 ^ (16 * s) elements. The Justesen code of outer
dimension K = 2 ^ (16 * s - 1) is a binary code of length n = 32 * s * (2 ^ (16 * s) - 1) with
2 ^ k codewords, where k = 16 * s * 2 ^ (16 * s - 1) satisfies n ≤ 4 * k, and its minimum
distance d satisfies n ≤ 128 * d: rate at least 1 / 4 and relative distance at least
1 / 128, at lengths that grow without bound.