Dense-overlay indirect load #
theorem
Complexity.RAM.RegisterStore.Machine.denseIndirectLoadInstructionTM_hoareTime_frame
{n : ℕ}
(tapes : BinaryInstructionTapes n)
(input : List Bool)
(overlay : Store)
(destination addressRegister : ℕ)
(emittedBits : List Bool)
(initialWork : Fin n → Tape)
(out₀ : Tape)
(hvalid : DenseOverlay.Valid overlay)
(hinitial : EntryLookupStaticReady tapes.lhsLookup overlay initialWork)
(hreplacement : (initialWork tapes.update.replacement).HasBinaryNat 0)
(houtput : out₀.HasBinaryPrefix emittedBits)
:
(denseIndirectLoadInstructionTM tapes destination addressRegister).HoareTime
(fun (inp : Tape) (work : Fin n → Tape) (out : Tape) =>
inp = (Tape.init (List.map Γ.ofBool input)).move Dir3.right ∧ work = initialWork ∧ out = out₀)
(fun (inp : Tape) (work : Fin n → Tape) (out : Tape) =>
inp = (Tape.init (List.map Γ.ofBool input)).move Dir3.right ∧ DenseIndirectLoadInstructionResult tapes input overlay destination addressRegister initialWork work ∧ out.HasBinaryPrefix
(emittedBits ++ List.flatMap Entry.encode
(DenseOverlay.write overlay destination
(DenseOverlay.read input overlay (DenseOverlay.read input overlay addressRegister)))))
(denseIndirectLoadInstructionTime tapes input overlay destination addressRegister)
Exact semantic and time contract for one dense-overlay indirect load.