Self-correction of Reed–Muller codes by interpolation along lines #
A received word w that differs from a Reed–Muller codeword p of degree d on few points can
be corrected by reading w at d + 1 points x + ν i • v of a line through x, for fixed
distinct nonzero nodes ν i, and interpolating: p x = ∑ i, λ i * p (x + ν i • v) for the
Lagrange weights λ i of the nodes at 0 (Cslib.Code.lagrangeDecode_eq_of_mem_reedMuller). Each
queried point is uniformly distributed over the directions v, so at every point x at most
(d + 1) * Δ(w, p) directions make the step err (Cslib.Code.card_lagrangeDecode_ne_le)
Arora and Barak, Chapter 19. Combined with ternary majority trees
(Cslib.majTree, Cslib.exists_forall_majTree_eq), this corrects w everywhere on a bounded set
with fixed directions.
Main definitions #
Cslib.Code.lagrangeWeight,Cslib.Code.lagrangeDecode: interpolation along a line.
Main results #
Cslib.Code.lagrangeDecode_eq_of_mem_reedMuller: interpolation is exact on codewords.Cslib.Code.card_lagrangeDecode_ne_le: few directions err.
References #
A polynomial of degree at most d is determined at 0 by its values at d + 1 nodes.
Few directions err. At every point x, at most (d + 1) * Δ(w, p) directions v make
interpolation along the line through x in the direction v err, when the nodes are nonzero.