Documentation

Complexitylib.Models.TuringMachine.Experimental.BinaryRoutine.SpaceBounds.Internal

Compositional width bounds for binary routines -- proof internals #

theorem Complexity.BinaryRoutine.SpaceBoundInLogAt.of_le_internal {n : } {routine : BinaryRoutine n} {initialSpace : } {values : BinaryValues n} {bound : } (hle : ∀ (inputLength : ), routine.spaceBound (initialSpace inputLength) (values inputLength) bound inputLength) (hbound : BigO bound fun (inputLength : ) => Nat.log 2 inputLength) :
routine.SpaceBoundInLogAt initialSpace values
theorem Complexity.BinaryRoutine.SpaceBoundInLogAt.restrict_internal {n : } {routine : BinaryRoutine n} {requires : BinaryValues nProp} {initialSpace : } {values : BinaryValues n} (hspace : routine.SpaceBoundInLogAt initialSpace values) :
(routine.restrict requires).SpaceBoundInLogAt initialSpace values
theorem Complexity.BinaryRoutine.SpaceBoundInLogAt.seq_internal {n : } {first second : BinaryRoutine n} {initialSpace : } {values : BinaryValues n} (hfirst : first.SpaceBoundInLogAt initialSpace values) (hsecond : second.SpaceBoundInLogAt initialSpace fun (inputLength : ) => first.effect (values inputLength)) :
(first.seq second).SpaceBoundInLogAt initialSpace values
theorem Complexity.BinaryRoutine.SpaceBoundInLogAt.branchZero_internal {n : } {onZero onPositive : BinaryRoutine n} (idx : Fin n) {initialSpace : } {values : BinaryValues n} (hzero : onZero.SpaceBoundInLogAt initialSpace values) (hpositive : onPositive.SpaceBoundInLogAt initialSpace values) :
(branchZero idx onZero onPositive).SpaceBoundInLogAt initialSpace values
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.mono_internal {n : } {routine : BinaryRoutine n} {initialSpace : } {values : BinaryValues n} {width width' : } (hspace : routine.SpaceBoundByWidthAt initialSpace values width) (hle : ∀ (inputLength : ), width inputLength width' inputLength) :
routine.SpaceBoundByWidthAt initialSpace values width'
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.restrict_internal {n : } {routine : BinaryRoutine n} {requires : BinaryValues nProp} {initialSpace : } {values : BinaryValues n} {width : } (hspace : routine.SpaceBoundByWidthAt initialSpace values width) :
(routine.restrict requires).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.emitBits_internal {n : } (word : List Bool) {initialSpace : } {values : BinaryValues n} {width : } :
(emitBits word).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.identity_internal {n : } {initialSpace : } {values : BinaryValues n} {width : } :
identity.SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.clear_internal {n : } (idx : Fin n) {initialSpace : } {values : BinaryValues n} {width : } (hvalue : ∀ (inputLength : ), values inputLength idx width inputLength) :
(clear idx).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.binarySucc_internal {n : } (idx : Fin n) {initialSpace : } {values : BinaryValues n} {width : } (hvalue : ∀ (inputLength : ), values inputLength idx width inputLength) :
(binarySucc idx).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.binaryPred_internal {n : } (idx : Fin n) {initialSpace : } {values : BinaryValues n} {width : } (hvalue : ∀ (inputLength : ), values inputLength idx - 1 + 1 width inputLength) :
(binaryPred idx).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.binaryCopy_internal {n : } (srcIdx dstIdx counterIdx : Fin n) {initialSpace : } {values : BinaryValues n} {width : } (hsrc : ∀ (inputLength : ), values inputLength srcIdx width inputLength) (hdst : ∀ (inputLength : ), values inputLength dstIdx width inputLength) :
(binaryCopy srcIdx dstIdx counterIdx).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.addConst_internal {n : } (idx : Fin n) (constant : ) {initialSpace : } {values : BinaryValues n} {width : } (hvalue : ∀ (inputLength : ), values inputLength idx + constant width inputLength) :
(addConst idx constant).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.add_internal {n : } (srcIdx dstIdx counterIdx : Fin n) {initialSpace : } {values : BinaryValues n} {width : } (hsrc : ∀ (inputLength : ), values inputLength srcIdx width inputLength) (hsum : ∀ (inputLength : ), values inputLength dstIdx + values inputLength srcIdx width inputLength) :
(add srcIdx dstIdx counterIdx).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.mulAdd_internal {n : } (leftIdx rightIdx accIdx mulCounterIdx addCounterIdx : Fin n) {initialSpace : } {values : BinaryValues n} {width : } (hleft : ∀ (inputLength : ), values inputLength leftIdx width inputLength) (hright : ∀ (inputLength : ), values inputLength rightIdx width inputLength) (htotal : ∀ (inputLength : ), values inputLength accIdx + values inputLength leftIdx * values inputLength rightIdx + values inputLength leftIdx width inputLength) :
(mulAdd leftIdx rightIdx accIdx mulCounterIdx addCounterIdx).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.evalPolynomial_internal {n : } (inputIdx resultIdx scratchIdx mulCounterIdx addCounterIdx : Fin n) (p : Polynomial ) {initialSpace : } {values : BinaryValues n} {width : } (hvalue : ∀ (inputLength : ), 2 * TM.binaryPolynomialValueCap p (values inputLength inputIdx) width inputLength) :
(evalPolynomial inputIdx resultIdx scratchIdx mulCounterIdx addCounterIdx p).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.emitNatCode_internal {n : } (counterIdx valueIdx : Fin n) {initialSpace : } {values : BinaryValues n} {width : } (hvalue : ∀ (inputLength : ), values inputLength valueIdx width inputLength) :
(emitNatCode counterIdx valueIdx).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.emitRawGate_internal {n : } (op : AndOrOp) (negated₀ negated₁ : Bool) (emitCounterIdx input₀Idx input₁Idx : Fin n) {initialSpace : } {values : BinaryValues n} {width : } (hinput₀ : ∀ (inputLength : ), values inputLength input₀Idx width inputLength) (hinput₁ : ∀ (inputLength : ), values inputLength input₁Idx width inputLength) :
(emitRawGate op negated₀ negated₁ emitCounterIdx input₀Idx input₁Idx).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.emitRawGateStep_internal {n : } (op : AndOrOp) (negated₀ negated₁ : Bool) (emitCounterIdx availableIdx input₀Idx input₁Idx : Fin n) {initialSpace : } {values : BinaryValues n} {width : } (havailable : ∀ (inputLength : ), values inputLength availableIdx width inputLength) (hinput₀ : ∀ (inputLength : ), values inputLength input₀Idx width inputLength) (hinput₁ : ∀ (inputLength : ), values inputLength input₁Idx width inputLength) :
(emitRawGateStep op negated₀ negated₁ emitCounterIdx availableIdx input₀Idx input₁Idx).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.seq_internal {n : } {first second : BinaryRoutine n} {initialSpace : } {values : BinaryValues n} {width : } (hfirst : first.SpaceBoundByWidthAt initialSpace values width) (hsecond : second.SpaceBoundByWidthAt initialSpace (fun (inputLength : ) => first.effect (values inputLength)) width) :
(first.seq second).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.set_internal {n : } (idx : Fin n) (value : ) {initialSpace : } {values : BinaryValues n} {width : } (hcurrent : ∀ (inputLength : ), values inputLength idx width inputLength) (hvalue : ∀ (inputLength : ), value width inputLength) :
(set idx value).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.seqList_internal {n : } (routines : List (BinaryRoutine n)) {initialSpace : } {values : BinaryValues n} {width : } (hspace : SeqListSpaceBoundByWidthAt routines initialSpace values width) :
(seqList routines).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SeqListSpaceBoundByWidthAt.append_internal {n : } (first second : List (BinaryRoutine n)) {initialSpace : } {values : BinaryValues n} {width : } (hfirst : SeqListSpaceBoundByWidthAt first initialSpace values width) (hsecond : SeqListSpaceBoundByWidthAt second initialSpace (fun (inputLength : ) => (seqList first).effect (values inputLength)) width) :
SeqListSpaceBoundByWidthAt (first ++ second) initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.repeatRoutine_of_invariant_internal {n : } (count : ) (routine : BinaryRoutine n) (invariant : BinaryValues nProp) {initialSpace : } {values : BinaryValues n} {width : } (hvalues : ∀ (inputLength : ), invariant (values inputLength)) (hspace : ∀ (trajectory : BinaryValues n), (∀ (inputLength : ), invariant (trajectory inputLength))routine.SpaceBoundByWidthAt initialSpace trajectory width) (heffect : ∀ (current : BinaryValues n), invariant currentinvariant (routine.effect current)) :
(repeatRoutine count routine).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.branchZero_internal {n : } {onZero onPositive : BinaryRoutine n} (idx : Fin n) {initialSpace : } {values : BinaryValues n} {width : } (hzero : onZero.SpaceBoundByWidthAt initialSpace values width) (hpositive : onPositive.SpaceBoundByWidthAt initialSpace values width) :
(branchZero idx onZero onPositive).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.to_log_internal {n : } {routine : BinaryRoutine n} {initialSpace : } {values : BinaryValues n} {width : } (hspace : routine.SpaceBoundByWidthAt initialSpace values width) (hinitial : BigO initialSpace fun (inputLength : ) => Nat.log 2 inputLength) (p : Polynomial ) (hwidth : ∀ (inputLength : ), width inputLength Polynomial.eval inputLength p) :
routine.SpaceBoundInLogAt initialSpace values
theorem Complexity.BinaryRoutine.SpaceBoundInLogAt.emitBits_internal {n : } (word : List Bool) {initialSpace : } {values : BinaryValues n} (hinitial : BigO initialSpace fun (inputLength : ) => Nat.log 2 inputLength) :
(emitBits word).SpaceBoundInLogAt initialSpace values
theorem Complexity.BinaryRoutine.SpaceBoundInLogAt.identity_internal {n : } {initialSpace : } {values : BinaryValues n} (hinitial : BigO initialSpace fun (inputLength : ) => Nat.log 2 inputLength) :
identity.SpaceBoundInLogAt initialSpace values
theorem Complexity.BinaryRoutine.BinaryForSpaceEnvelope.iterationSpaceMax_le_internal {n : } {body : BinaryRoutine n} {counterIdx limitIdx : Fin n} {initialSpace : } {initial : BinaryValues n} {bound : } (envelope : body.BinaryForSpaceEnvelope counterIdx limitIdx initialSpace initial bound) :
body.binaryForIterationSpaceMax counterIdx initialSpace initial (binaryForCount counterIdx limitIdx initial) bound
theorem Complexity.BinaryRoutine.BinaryForSpaceEnvelope.binaryForSpace_le_internal {n : } {body : BinaryRoutine n} {counterIdx limitIdx : Fin n} {initialSpace : } {initial : BinaryValues n} {bound : } (envelope : body.BinaryForSpaceEnvelope counterIdx limitIdx initialSpace initial bound) :
body.binaryForSpace counterIdx limitIdx initialSpace initial bound
theorem Complexity.BinaryRoutine.BinaryForSpaceEnvelope.spaceBound_le_internal {n : } {body : BinaryRoutine n} {counterIdx limitIdx : Fin n} {initialSpace : } {initial : BinaryValues n} {bound : } (envelope : body.BinaryForSpaceEnvelope counterIdx limitIdx initialSpace initial bound) :
(body.binaryFor counterIdx limitIdx).spaceBound initialSpace initial bound
theorem Complexity.BinaryRoutine.SpaceBoundInLogAt.binaryFor_of_envelope_internal {n : } {body : BinaryRoutine n} {counterIdx limitIdx : Fin n} {initialSpace : } {values : BinaryValues n} {bound : } (henvelope : ∀ (inputLength : ), body.BinaryForSpaceEnvelope counterIdx limitIdx (initialSpace inputLength) (values inputLength) (bound inputLength)) (hbound : BigO bound fun (inputLength : ) => Nat.log 2 inputLength) :
(body.binaryFor counterIdx limitIdx).SpaceBoundInLogAt initialSpace values
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.binaryFor_of_envelope_internal {n : } {body : BinaryRoutine n} {counterIdx limitIdx : Fin n} {initialSpace : } {values : BinaryValues n} {width : } (constant : ) (henvelope : ∀ (inputLength : ), body.BinaryForSpaceEnvelope counterIdx limitIdx (initialSpace inputLength) (values inputLength) (initialSpace inputLength + constant * (width inputLength).size + constant)) :
(body.binaryFor counterIdx limitIdx).SpaceBoundByWidthAt initialSpace values width
theorem Complexity.BinaryRoutine.SpaceBoundByWidthAt.binaryFor_of_clamped_body_internal {n : } {body : BinaryRoutine n} {counterIdx limitIdx : Fin n} {initialSpace : } {values : BinaryValues n} {width : } (hlimit : ∀ (inputLength : ), values inputLength limitIdx width inputLength) (hcounter : ∀ (inputLength count : ), count < binaryForCount counterIdx limitIdx (values inputLength)body.binaryForValues counterIdx (values inputLength) count counterIdx width inputLength) (hbody : body.SpaceBoundByWidthAt (fun (code : ) => initialSpace (Nat.unpair code).1) (body.binaryForClampedValues counterIdx limitIdx values) fun (code : ) => width (Nat.unpair code).1) :
(body.binaryFor counterIdx limitIdx).SpaceBoundByWidthAt initialSpace values width