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. Next, the reduced
numerator magnitude, denominator, and sign bit of Rat.divInt a b are expressed in terms of
a.natAbs, b.natAbs, and Nat.gcd a.natAbs b.natAbs (divInt_num_abs, divInt_den,
divInt_sign, and encodeRat_divInt). Combining binary integer operations with binary_div and
binary_gcd then certifies (p, q) ↦ encodeRat (Rat.divInt p q) on binary integer pairs
(encodeDivInt_polytime).
Main results #
Cslib.Circuits.Rational.digits_two_map_bne_zero:(Nat.digits 2 a).map (· != 0) = a.bits.Cslib.Circuits.Rational.encodeNat_eq:encodeNat ain terms ofa.bits.Cslib.Circuits.Rational.encodeNat_polytime,.encodeNat_polytime': polynomial-time certificates forencodeNat.Cslib.Circuits.Rational.divInt_num_abs,.divInt_den,.divInt_sign: reduced components ofRat.divInt a bviaNat.gcd a.natAbs b.natAbs.Cslib.Circuits.Rational.encodeRat_divInt: unconditional expansion ofencodeRat (Rat.divInt a b).Cslib.Circuits.Rational.encodeDivInt_polytime,.encodeDivInt_polytime': polynomial-time certificates for(p, q) ↦ encodeRat (Rat.divInt p q).
References #
Mapping · != 0 over the base-2 digits of a recovers a.bits.
Self-delimiting binary encoding of a binary natural is computable in polynomial time.
Self-delimiting binary encoding of a computed binary natural.
Reduced numerator magnitude of Rat.divInt a b for b ≠ 0.
Reduced denominator of Rat.divInt a b for b ≠ 0.
Explicit expansion of encodeRat (Rat.divInt a b) in terms of integer magnitudes and
Nat.gcd.
Encoding the reduced rational quotient Rat.divInt p.1 p.2 of two binary integers is
computable in polynomial time.
Encode the reduced rational quotient of two computed binary integers.