Documentation

Complexitylib.Encoding.FiniteAlphabet.Internal

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.encode_cons {α : Type} (c : FiniteAlphabetCode α) (a : α) (w : List α) :
c.encode (a :: w) = c.symbol a ++ c.encode w
theorem Complexity.FiniteAlphabetCode.decodeFrom_trues {α : Type} (c : FiniteAlphabetCode α) (i k : ℕ) (h : i + k < c.size) (rest : List Bool) :
c.decodeFrom (some i) (List.replicate k true ++ rest) = c.decodeFrom (some (i + k)) rest
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.encode_append {α : Type} (c : FiniteAlphabetCode α) (xs ys : List α) :
c.encode (xs ++ ys) = c.encode xs ++ c.encode ys
theorem Complexity.FiniteAlphabetCode.decodeFrom_exact {α : Type} (c : FiniteAlphabetCode α) (bits : List Bool) (pending : Option ℕ) (w : List α) (h : c.decodeFrom pending bits = some w) :
pendingPrefix pending ++ bits = c.encode w
theorem Complexity.FiniteAlphabetCode.encode_decode_proof {α : Type} (c : FiniteAlphabetCode α) {bits : List Bool} {w : List α} (h : c.decode bits = some w) :
c.encode w = bits