Documentation

Complexitylib.Classes.PPoly.Uniform.Unrolling.Generator.Transition.MovedHead.Internal

Direct-unrolling moved-head generator -- proof internals #

Scratch owned by the conjunction between an effect child and a predecessor-head child. The run-time target and tape selector are deliberately excluded because the predecessor routine preserves them.

Instances For
    theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.emitMovedHeadEffect_requires_internal {k : ℕ} (tm : NTM k) (tape : TapeSlot k) (direction : Dir3) (values : BinaryValues WorkCount) (hclean : CaseFormulaClean values) (havailable : 1 ≤ values Work.available) :
    (emitMovedHeadEffect tm tape direction).requires values

    Register state after emitting and saving one moved-head disjunction member.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.emitMovedHeadMember_requires_internal {k : ℕ} (tm : NTM k) (tape : TapeSlot k) (direction : Dir3) (directionCode : ℕ) (save : Fin WorkCount) (values : BinaryValues WorkCount) (hclean : CaseFormulaClean values) (hloop₁ : values Work.loop₁ = 0) (hhorizon : 0 < values Work.horizon) (htarget : values Work.limit₂ ≤ values Work.horizon) (havailable : 1 ≤ values Work.available) (hsave : save = Work.savedOutput ∨ save = Work.direction ∨ save = Work.atomKind) :
      (emitMovedHeadMember tm tape direction directionCode save).requires values
      theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.emitMovedHeadMember_effect_internal {k : ℕ} (tm : NTM k) (tape : TapeSlot k) (direction : Dir3) (directionCode : ℕ) (save : Fin WorkCount) (values : BinaryValues WorkCount) (hclean : CaseFormulaClean values) (hloop₁ : values Work.loop₁ = 0) (hhorizon : 0 < values Work.horizon) (htarget : values Work.limit₂ ≤ values Work.horizon) (havailable : 1 ≤ values Work.available) :
      (emitMovedHeadMember tm tape direction directionCode save).effect values = movedHeadMemberResult values save (movedHeadEffectSizeAt (transitionCases tm).length k (values Work.horizon) (movedHeadCaseSelectedAt tm tape) (effectCaseChoiceAt tm) (movedHeadDirectionCode direction))
      theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.emitMovedHeadMember_emitted_internal {k : ℕ} (tm : NTM k) (tape : TapeSlot k) (direction : Dir3) (directionCode base : ℕ) (save : Fin WorkCount) (values : BinaryValues WorkCount) (hclean : CaseFormulaClean values) (hloop₁ : values Work.loop₁ = 0) (hhorizon : 0 < values Work.horizon) (htarget : values Work.limit₂ ≤ values Work.horizon) (havailable : 1 ≤ values Work.available) (hcode : directionCode = movedHeadDirectionCode direction) (hmemberAvailable : values Work.available = movedHeadMemberAvailable (transitionCases tm).length k (values Work.horizon) base (movedHeadCaseSelectedAt tm tape) (effectCaseChoiceAt tm) directionCode) :
      theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.emitMovedHeadMember_sound_internal {k : ℕ} (tm : NTM k) (tape : TapeSlot k) (direction : Dir3) (directionCode : ℕ) (save : Fin WorkCount) :
      (emitMovedHeadMember tm tape direction directionCode save).Sound
      @[simp]
      theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.emitMovedHeadFormula_requires_internal {k : ℕ} (tm : NTM k) (tape : TapeSlot k) (values : BinaryValues WorkCount) (hclean : MovedHeadFormulaClean values) (hhorizon : 0 < values Work.horizon) (htarget : values Work.position ≤ values Work.horizon) (havailable : 1 ≤ values Work.available) :
      theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.emitMovedHeadFormula_spaceBoundByWidth_internal {k : ℕ} (tm : NTM k) (tape : TapeSlot k) {initialSpace : ℕ → ℕ} {values : ℕ → BinaryValues WorkCount} {width : ℕ → ℕ} (hclean : ∀ (inputLength : ℕ), MovedHeadFormulaClean (values inputLength)) (hhorizon : ∀ (inputLength : ℕ), 0 < values inputLength Work.horizon) (htarget : ∀ (inputLength : ℕ), values inputLength Work.position ≤ values inputLength Work.horizon) (havailable : ∀ (inputLength : ℕ), 1 ≤ values inputLength Work.available) (hvalues : ∀ (inputLength : ℕ) (index : Fin WorkCount), values inputLength index ≤ width inputLength) (hcap : ∀ (inputLength stateIndex tapeIndex symbolIndex position : ℕ), stateIndex < Fintype.card tm.Q → tapeIndex ≤ k + 1 → symbolIndex < 4 → position ≤ values inputLength Work.horizon + 1 → values inputLength Work.available + movedHeadFormulaScheduleSize (transitionCases tm).length k (values inputLength Work.horizon) (movedHeadCaseSelectedAt tm tape) (effectCaseChoiceAt tm) + transitionStateRef (values inputLength Work.configBase) stateIndex + (transitionHeadRef (Fintype.card tm.Q) (values inputLength Work.horizon) (values inputLength Work.configBase) tapeIndex position + tapeIndex + values inputLength Work.horizon + 1) + (transitionCellRef (Fintype.card tm.Q) (k + 2) (values inputLength Work.horizon) (values inputLength Work.configBase) tapeIndex position symbolIndex + (tapeIndex * (values inputLength Work.horizon + 2) + position) + (values inputLength Work.horizon + 2) + (k + 2) + tapeIndex + 4) + caseReadSize (values inputLength Work.horizon) + 2 * TM.binaryPolynomialValueCap predecessorHeadSchedulePolynomial (values inputLength Work.horizon) + 2 * (values inputLength Work.horizon + 2) + values inputLength Work.horizon ≤ width inputLength) :
      (emitMovedHeadFormula tm tape).SpaceBoundByWidthAt initialSpace values width