Documentation

Complexitylib.Models.RandomAccessMachine.Simulation.RegisterStore.Machine.Instruction.Control

Sparse-store control instructions #

This proof layer realizes conditional-zero jump, unconditional jump, and halt over the reusable sparse-lookup ABI and a disjoint canonical binary program- counter tape.

theorem Complexity.RAM.RegisterStore.Machine.setProgramCounterTM_hoareTime_frame_internal {n : } (pc : Fin n) (pcValue target : ) (inp₀ : Tape) (work₀ : Fin nTape) (out₀ : Tape) (hpc : (work₀ pc).HasBinaryNat pcValue) (hinput : TM.Parked inp₀) (hwork : ∀ (i : Fin n), TM.Parked (work₀ i)) (houtput : TM.Parked out₀) :
(setProgramCounterTM pc target).HoareTime (fun (inp : Tape) (work : Fin nTape) (out : Tape) => inp = inp₀ work = work₀ out = out₀) (fun (inp : Tape) (work : Fin nTape) (out : Tape) => inp = inp₀ work = Function.update work₀ pc ((Tape.init (List.map Γ.ofBool target.bits)).move Dir3.right) out = out₀) (setProgramCounterTime pcValue target)

Reset a canonical PC and load a fixed target, preserving the literal external frame.

theorem Complexity.RAM.RegisterStore.Machine.jumpInstructionTM_hoareTime_frame_internal {n : } (tapes : ControlInstructionTapes n) (store : Store) (pcValue target : ) (initialWork : Fin nTape) (inp₀ out₀ : Tape) (hready : ControlInstructionReady tapes store pcValue initialWork) (hinput : TM.Parked inp₀) (houtput : TM.Parked out₀) :
(jumpInstructionTM tapes target).HoareTime (fun (inp : Tape) (work : Fin nTape) (out : Tape) => inp = inp₀ work = initialWork out = out₀) (fun (inp : Tape) (work : Fin nTape) (out : Tape) => inp = inp₀ ControlInstructionResult tapes store target initialWork work out = out₀) (jumpInstructionTime pcValue target)

Unconditional jump replaces the PC and preserves the clean sparse-lookup boundary.

theorem Complexity.RAM.RegisterStore.Machine.zeroJumpInstructionTM_hoareTime_frame_internal {n : } (tapes : ControlInstructionTapes n) (store : Store) (pcValue source target : ) (initialWork : Fin nTape) (inp₀ out₀ : Tape) (hready : ControlInstructionReady tapes store pcValue initialWork) (hinput : TM.Parked inp₀) (houtput : TM.Parked out₀) :
(zeroJumpInstructionTM tapes source target).HoareTime (fun (inp : Tape) (work : Fin nTape) (out : Tape) => inp = inp₀ work = initialWork out = out₀) (fun (inp : Tape) (work : Fin nTape) (out : Tape) => inp = inp₀ ControlInstructionResult tapes store (if read store source = 0 then target else pcValue + 1) initialWork work out = out₀) (zeroJumpInstructionTime tapes store pcValue source target)

Conditional-zero lookup and PC update realize the sparse interpreter's jz semantics and restore the lookup operand to zero.

theorem Complexity.RAM.RegisterStore.Machine.haltInstructionTM_hoareTime_frame_internal {n : } (tapes : ControlInstructionTapes n) (store : Store) (pcValue : ) (initialWork : Fin nTape) (inp₀ out₀ : Tape) (hready : ControlInstructionReady tapes store pcValue initialWork) (hinput : TM.Parked inp₀) (houtput : TM.Parked out₀) :
haltInstructionTM.HoareTime (fun (inp : Tape) (work : Fin nTape) (out : Tape) => inp = inp₀ work = initialWork out = out₀) (fun (inp : Tape) (work : Fin nTape) (out : Tape) => inp = inp₀ ControlInstructionResult tapes store pcValue initialWork work out = out₀) haltInstructionTime

Halt is an exact one-step no-op at the clean control boundary.