Documentation

Complexity.Computability.Circuit.Rational.Runtime.Encode

Polynomial-time canonical binary encodings of naturals and rationals #

This module bridges the self-delimiting binary encodings Cslib.Circuits.Rational.encodeNat and Cslib.Circuits.Rational.encodeRat from Complexity/Computability/Circuit/Rational/Defs.lean to the fun_prop polynomial-time calculus over Turing.MultiTapeTM.encNat and Turing.MultiTapeTM.encIntBin.

First, encodeNat a is shown to equal List.replicate a.bits.length true ++ false :: a.bits (encodeNat_eq), yielding a polynomial-time certificate encodeNat_polytime. Combining binary integer operations with binary_div, binary_gcd, and canonical component expansions of Rat.divInt (Complexity.Foundations.Data.Rat.Basic) then expands encodeRat (Rat.divInt a b) (encodeRat_divInt) and certifies (p, q) ↦ encodeRat (Rat.divInt p q) on binary integer pairs (encodeDivInt_polytime).

Main results #

References #

Mapping · != 0 over the base-2 digits of a recovers a.bits.

encodeNat a is the unary length of a.bits, a false delimiter, and a.bits.

Self-delimiting binary encoding of a binary natural is computable in polynomial time.

Self-delimiting binary encoding of a computed binary natural.

Explicit expansion of encodeRat (Rat.divInt a b) in terms of integer magnitudes and Nat.gcd.

Encode the reduced rational quotient of two computed binary integers.