Uhlig's recovery code #
Uhlig's two-copy construction stores bits x 0, …, x (M - 1) as the M + 1 adjacent sums
x 0, x 0 ^^ x 1, …, x (M - 2) ^^ x (M - 1), x (M - 1). Sums of code positions are taken in
the Boolean ring, where addition is exclusive or. Each bit is the sum of an initial segment of
the code and also the sum of the complementary final segment. For two requests a and b, the
smaller request uses the initial segment ending at its index and the larger request uses the
final segment after its index. These recovery sets are disjoint even when a = b, so every code
position serves at most one request.
The code is stated for sequences indexed by ℕ; only the value at M must vanish.
Main definitions #
Cslib.BitString.Uhlig.code: the adjacent sums of a sequence.Cslib.BitString.Uhlig.first,Cslib.BitString.Uhlig.second: the code positions used by the first and second of two requests.
Main results #
Cslib.BitString.Uhlig.sum_range_code: recovery from an initial segment.Cslib.BitString.Uhlig.sum_Ico_code: recovery from a final segment.Cslib.BitString.Uhlig.second_eq_false_of_first: the two recovery sets are disjoint.Cslib.BitString.Uhlig.sum_first_code_route,Cslib.BitString.Uhlig.sum_second_code_route: each request recovers its bit when every code position reads the input of the request that uses it.
References #
- D. Uhlig, Networks computing Boolean functions for multiple input values.
- I. Wegener, The Complexity of Boolean Functions, proof of Theorem 10.2.3.
- Adapted from MassProduction/Uhlig.lean in S. Schlesinger, Boolean circuit mass production formalization.
The code positions up to a sum to x a.
With requests a and b, the first request uses position j when the requests are in
order and j ≤ a, or out of order and a < j.
Instances For
With requests a and b, the second request uses position j when the requests are in
order and b < j, or out of order and j ≤ b.