List decoding #
A list code encodes messages of a type α as words ι → β over an alphabet β, and its list
decoder turns every received word w into L candidate messages. The code list decodes up to
radius ρ if the candidates for w include every message whose codeword differs from w on at
most a ρ fraction of the coordinates Arora and Barak, Chapter 19; binary codes
are those with β = Bool. A word that agrees with the codeword of x on a 1 / 2 + δ fraction of
the coordinates thus determines x up to L possibilities when the code list decodes up to radius
1 / 2 - δ (Cslib.ListCode.ListDecodes.mem_candidates_of_half_add_le): x is one of the at
most L candidates (Cslib.ListCode.card_candidates_le), and it is named by an index of
⌈log₂ L⌉ bits (Cslib.ListCode.ListDecodes.exists_decodeBits_eq_some). This is how the
Nisan–Wigderson reconstruction recovers a message from a predictor of its codeword.
Main definitions #
Cslib.ListCode: an encoder of messages as words over an alphabet with a list decoder.Cslib.ListCode.ListDecodes: list decoding up to a relative radius.Cslib.ListCode.candidates: the candidates for a received word.Cslib.ListCode.decodeBits: the candidate named by a binary index.
Main results #
Cslib.ListCode.card_candidates_le: there are at mostLcandidates.Cslib.ListCode.listDecodes_of_surjective: a decoder listing every message list decodes at every radius.Cslib.ListCode.ListDecodes.exists_decode_eq,Cslib.ListCode.ListDecodes.exists_decode_eq_of_half_add_le: a message whose codeword agrees with the received word on enough coordinates is a candidate.Cslib.ListCode.ListDecodes.exists_decodeBits_eq_some: it is named by an index ofNat.clog 2 Lbits.
References #
A list code: an encoder of messages of type α as words on the coordinates ι over the
alphabet β, with a list decoder returning L candidate messages for every received word.
- encode : α → ι → β
The codeword of a message.
- decode : (ι → β) → Fin L → α
The
k-th candidate message for a received word.
Instances For
The code list decodes up to radius ρ: the candidates for a received word w include every
message whose codeword differs from w on at most a ρ fraction of the coordinates.
Instances For
The candidates for the received word w, without repetitions.
Instances For
A message is a candidate for w exactly when the decoder returns it at some index.
List size. A received word has at most L candidates.
The candidate named by the binary index b of Nat.clog 2 L bits, read least significant bit
first: the k-th candidate for w if b spells a number k < L, and nothing otherwise.
Instances For
Short index. Every candidate is named by an index of Nat.clog 2 L bits.
A decoder whose candidates enumerate all messages, whatever the received word, list decodes at
every radius: the list then has L ≥ |α| entries, so this only shows that list decoding is
satisfiable.
A list decoder up to radius ρ lists every message whose codeword agrees with the received
word on at least a 1 - ρ fraction of the coordinates.
A list decoder up to radius 1 / 2 - δ lists every message whose codeword agrees with the
received word on at least a 1 / 2 + δ fraction of the coordinates.
A message whose codeword agrees with the received word on at least a 1 / 2 + δ fraction of
the coordinates is among the candidates of a list decoder up to radius 1 / 2 - δ.
Short index. If a code list decodes up to radius 1 / 2 - δ, a received word that agrees
with the codeword of x on at least a 1 / 2 + δ fraction of the coordinates, together with an
index of Nat.clog 2 L bits, determines x.