In the conventional setting of error-correcting codes (ECCs), there are three parties: Sender, Receiver, and Adversary. Sender wants to send a message m
to Receiver; problem is, Adversary may intercept the message string and modify as many as e > 0
symbols before Receiver gets the message.
The idea of an error-correcting code is to encode the message m
in a redundant fashion as some 'codeword' C(m)
, so that even after as many as e
errors are introduced, the original message m
is uniquely recoverable.
For a simple example (not representative of the sophistication of more powerful codes), say Sender wants to transmit a single bit of information, and e = 1
. Then we could have C(0) = 000
, C(1) = 111
, and Receiver can correctly recover the message bit by taking the majority vote of the 3 bits received.
For a much more comprehensive introduction of ECCs from a TCS perspective, see e.g. this
survey by Sudan, or this
one by Trevisan.
Now here's a slightly whimsical idea: suppose we add a fourth party to the scene, a Guardian Angel allied with Sender and Receiver. The Guardian Angel watches Sender encode the message; though it cannot completely stop the Adversary from making its modifications to the codeword, it can step in to prevent as many as d < e
of these modifications. These 'saves' are performed all at once, after the Adversary reveals its intended modifications, and the Angel can choose which sites to protect; it cannot make new modifications of its own.
Clearly the Guardian Angel is a boon. Consider an ECC in the standard setting (no Angel) with an encoding/decoding system that successfully recovers messages even after as many as e
errors are introduced; the same protocol can recover the message with as many as e + d
errors, with the help of a 'lazy Angel' who arbitrarily selects d
of the adversary's errors and corrects them.
So here's the question: is this as good as it gets? Or can the Angel act more cleverly to help Sender and Receiver succeed in the presence of even more errors?
Note that we might want to change the encoding/decoding protocol itself, to optimize for the Angel's presence. For example, suppose d = 1
; then we can successfully transmit a single bit in the presence of any number of errors, by simply having the Angel encode the intended bit in the parity of the message sent (convince yourself this works). The challenge is to use the Angel effectively while preserving the information rate and other positive properties of our ECC, as much as possible.
This is meant as a puzzle, but a somewhat open-ended one (in particular, one that ought to be investigated in the context of specific ECCs) that feeds into active research in coding theory. I'm hoping it will stimulate readers to rediscover some of the important notions in the area. I'll give hints and/or literature pointers sometime soon.
...Ok, here goes:Hint:
'List Decoding' is a concept which has seen a lot of applications recently. Its starting point is the realization that, if we are willing to not always uniquely recover the codeword after errors are introduced, but instead narrow down the possibilities to a 'short' list of candidate messages, we can, for many natural codes, tolerate many more errors. For instance, with a binary alphabet, we cannot achieve unique decoding for nontrivial codes beyond the threshold of a .25 fraction of errors. On the other hand, if we allow list decoding (say, returning a poly(n)
-sized list of candidate messages given a corrupted codeword of length O(n)
), then we can tolerate almost a .5 fraction of errors.
For more discussion and references, see this
post of Lance's.
So: does list decodability of a code imply unique decodability with the help of a Guardian Angel, perhaps an Angel making only a relatively small number of 'saves'? And if the list decoding procedure is computationally efficient, can the Guardian Angel and its associated decoder be efficient as well?
For a more thoroughly whimsical puzzle scenario, check out Conway's Angel Problem
Labels: general math, puzzles