Correctness and size of finite-alphabet codes #
Delimited unary parsing is exact. Its codeword lengths are bounded by an alphabet-dependent constant and its palindromic framing commutes with reversal.
theorem
Complexity.FiniteAlphabetCode.decodeFrom_trues
{α : Type}
(c : FiniteAlphabetCode α)
(i k : ℕ)
(h : i + k < c.size)
(rest : List Bool)
:
theorem
Complexity.FiniteAlphabetCode.decodeFrom_symbol
{α : Type}
(c : FiniteAlphabetCode α)
(a : α)
(rest : List Bool)
:
c.decodeFrom none (c.symbol a ++ rest) = Option.map (fun (x : List α) => a :: x) (c.decodeFrom none rest)
theorem
Complexity.FiniteAlphabetCode.decode_encode_proof
{α : Type}
(c : FiniteAlphabetCode α)
(w : List α)
:
theorem
Complexity.FiniteAlphabetCode.encode_length_lower
{α : Type}
(c : FiniteAlphabetCode α)
(w : List α)
:
theorem
Complexity.FiniteAlphabetCode.symbol_reverse
{α : Type}
(c : FiniteAlphabetCode α)
(a : α)
:
theorem
Complexity.FiniteAlphabetCode.encode_reverse
{α : Type}
(c : FiniteAlphabetCode α)
(w : List α)
:
theorem
Complexity.FiniteAlphabetCode.encode_count_false
{α : Type}
(c : FiniteAlphabetCode α)
(w : List α)
:
Prefix already consumed when the parser is inside a codeword.
Equations
Instances For
theorem
Complexity.FiniteAlphabetCode.decodeFrom_exact
{α : Type}
(c : FiniteAlphabetCode α)
(bits : List Bool)
(pending : Option ℕ)
(w : List α)
(h : c.decodeFrom pending bits = some w)
:
theorem
Complexity.FiniteAlphabetCode.decode_reverse
{α : Type}
(c : FiniteAlphabetCode α)
(bits : List Bool)
: