Documentation

Complexitylib.Models.TuringMachine.Subroutines.BinaryPolynomial.Internal

Canonical binary evaluation of a fixed natural polynomial — proof internals #

Each Horner layer is verified compositionally from multiply-add, fixed-constant addition, and clearing. The list proof alternates accumulator roles and carries a common polynomial value cap; consequently all layers fit one width-based space budget independent of their (potentially much larger) running time.

Canonical parked tape encoding of a natural for polynomial evaluation.

Equations
Instances For
    @[reducible, inline]
    abbrev Complexity.TM.binaryPolynomialFramePred {n : } (inp₀ : Tape) (work₀ : Fin nTape) (out₀ : Tape) :

    Predicate fixing the tapes framing a binary polynomial evaluation.

    Equations
    Instances For
      theorem Complexity.TM.binaryHornerFold_cons_internal (x coeff acc : ) (coeffs : List ) :
      binaryHornerFold x (coeff :: coeffs) acc = binaryHornerFold x coeffs (acc * x + coeff)
      theorem Complexity.TM.binaryPolynomialEvalTM_hoareTimeSpace_frame_internal {n : } (inputIdx resultIdx scratchIdx mulCounterIdx addCounterIdx : Fin n) (hdistinct : BinaryPolynomialDistinct inputIdx resultIdx scratchIdx mulCounterIdx addCounterIdx) (p : Polynomial ) (inputValue inputLength initialSpace : ) (inp₀ : Tape) (work₀ : Fin nTape) (out₀ : Tape) (hinput : (work₀ inputIdx).HasBinaryNat inputValue) (hresult : (work₀ resultIdx).HasBinaryNat 0) (hscratch : (work₀ scratchIdx).HasBinaryNat 0) (hmulCounter : (work₀ mulCounterIdx).HasBinaryNat 0) (haddCounter : (work₀ addCounterIdx).HasBinaryNat 0) (hinp : Parked inp₀) (hother : ∀ (i : Fin n), i inputIdxi resultIdxi scratchIdxi mulCounterIdxi addCounterIdxParked (work₀ i)) (hout : Parked out₀) (hworkSpace : ∀ (i : Fin n), (work₀ i).head initialSpace) (hinputSpace : inp₀.head inputLength + initialSpace + 1) :
      (binaryPolynomialEvalTM inputIdx resultIdx scratchIdx mulCounterIdx addCounterIdx p).HoareTimeSpace (binaryPolynomialFramePred inp₀ work₀ out₀) (binaryPolynomialFramePred inp₀ (Function.update work₀ resultIdx (binaryPolynomialNatTape (Polynomial.eval inputValue p))) out₀) (binaryPolynomialTime p inputValue) inputLength (binaryPolynomialSpace initialSpace p inputValue)
      theorem Complexity.TM.binaryPolynomialEvalTM_hoareTime_frame_internal {n : } (inputIdx resultIdx scratchIdx mulCounterIdx addCounterIdx : Fin n) (hdistinct : BinaryPolynomialDistinct inputIdx resultIdx scratchIdx mulCounterIdx addCounterIdx) (p : Polynomial ) (inputValue : ) (inp₀ : Tape) (work₀ : Fin nTape) (out₀ : Tape) (hinput : (work₀ inputIdx).HasBinaryNat inputValue) (hresult : (work₀ resultIdx).HasBinaryNat 0) (hscratch : (work₀ scratchIdx).HasBinaryNat 0) (hmulCounter : (work₀ mulCounterIdx).HasBinaryNat 0) (haddCounter : (work₀ addCounterIdx).HasBinaryNat 0) (hinp : Parked inp₀) (hother : ∀ (i : Fin n), i inputIdxi resultIdxi scratchIdxi mulCounterIdxi addCounterIdxParked (work₀ i)) (hout : Parked out₀) :
      (binaryPolynomialEvalTM inputIdx resultIdx scratchIdx mulCounterIdx addCounterIdx p).HoareTime (binaryPolynomialFramePred inp₀ work₀ out₀) (binaryPolynomialFramePred inp₀ (Function.update work₀ resultIdx (binaryPolynomialNatTape (Polynomial.eval inputValue p))) out₀) (binaryPolynomialTime p inputValue)
      theorem Complexity.TM.binaryPolynomialEvalTM_isTransducer_internal {n : } (inputIdx resultIdx scratchIdx mulCounterIdx addCounterIdx : Fin n) (p : Polynomial ) :
      (binaryPolynomialEvalTM inputIdx resultIdx scratchIdx mulCounterIdx addCounterIdx p).IsTransducer
      theorem Complexity.TM.binaryPolynomialSpace_bigO_internal (initialSpace : ) (p : Polynomial ) :
      BigO (fun (inputValue : ) => binaryPolynomialSpace initialSpace p inputValue) fun (inputValue : ) => Nat.log 2 inputValue