Documentation

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

Uniform next-store buffering for control instructions #

theorem Complexity.RAM.RegisterStore.Machine.finishBufferedControlInstructionTM_hoareTime_frame_internal {n : } (tapes : ControlInstructionTapes n) (store : Store) (pcValue newPC : ) (initialWork : Fin (n + 1)Tape) (inp₀ out₀ : Tape) (control : TM (n + 1)) (controlTime : ) (hready : InstructionExecutionReady tapes store pcValue initialWork) (hinput : TM.Parked inp₀) (houtput : TM.Parked out₀) (hcontrol : control.HoareTime (fun (inp : Tape) (work : Fin (n + 1)Tape) (out : Tape) => inp = inp₀ work = initialWork out = out₀) (fun (inp : Tape) (work : Fin (n + 1)Tape) (out : Tape) => inp = inp₀ ControlInstructionResult tapes.lifted store newPC initialWork work out = out₀) controlTime) :
(finishControlInstructionTM tapes control).HoareTime (fun (inp : Tape) (work : Fin (n + 1)Tape) (out : Tape) => inp = inp₀ work = initialWork out = out₀) (fun (inp : Tape) (work : Fin (n + 1)Tape) (out : Tape) => inp = inp₀ BufferedInstructionResult tapes store store newPC (fun (x : Fin 5) => 0) (List.length store) work out = out₀) (controlTime + 1 + (List.flatMap Entry.encode store).length + 1)

Representation-independent form of the control-instruction finisher. Control instructions preserve the encoded store, leave zero on every cleanup role, and retain the old entry count for the generic cleanup pass.

theorem Complexity.RAM.RegisterStore.Machine.executeInstructionTM_jz_hoareTime_frame {n : } (tapes : ControlInstructionTapes n) (store : Store) (pcValue source target : ) (initialWork : Fin (n + 1)Tape) (inp₀ out₀ : Tape) (hready : InstructionExecutionReady tapes store pcValue initialWork) (hinput : TM.Parked inp₀) (houtput : TM.Parked out₀) :
(executeInstructionTM tapes (Instr.jz source target)).HoareTime (fun (inp : Tape) (work : Fin (n + 1)Tape) (out : Tape) => inp = inp₀ work = initialWork out = out₀) (fun (inp : Tape) (work : Fin (n + 1)Tape) (out : Tape) => inp = inp₀ InstructionExecutionResult tapes (Instr.jz source target) pcValue store work out = out₀) (executeInstructionTime tapes (Instr.jz source target) pcValue store)

Conditional-zero execution has the common one-buffer instruction contract.

theorem Complexity.RAM.RegisterStore.Machine.executeInstructionTM_jmp_hoareTime_frame {n : } (tapes : ControlInstructionTapes n) (store : Store) (pcValue target : ) (initialWork : Fin (n + 1)Tape) (inp₀ out₀ : Tape) (hready : InstructionExecutionReady tapes store pcValue initialWork) (hinput : TM.Parked inp₀) (houtput : TM.Parked out₀) :
(executeInstructionTM tapes (Instr.jmp target)).HoareTime (fun (inp : Tape) (work : Fin (n + 1)Tape) (out : Tape) => inp = inp₀ work = initialWork out = out₀) (fun (inp : Tape) (work : Fin (n + 1)Tape) (out : Tape) => inp = inp₀ InstructionExecutionResult tapes (Instr.jmp target) pcValue store work out = out₀) (executeInstructionTime tapes (Instr.jmp target) pcValue store)

Unconditional-jump execution has the common one-buffer instruction contract.

theorem Complexity.RAM.RegisterStore.Machine.executeInstructionTM_halt_hoareTime_frame {n : } (tapes : ControlInstructionTapes n) (store : Store) (pcValue : ) (initialWork : Fin (n + 1)Tape) (inp₀ out₀ : Tape) (hready : InstructionExecutionReady tapes store pcValue initialWork) (hinput : TM.Parked inp₀) (houtput : TM.Parked out₀) :
(executeInstructionTM tapes Instr.halt).HoareTime (fun (inp : Tape) (work : Fin (n + 1)Tape) (out : Tape) => inp = inp₀ work = initialWork out = out₀) (fun (inp : Tape) (work : Fin (n + 1)Tape) (out : Tape) => inp = inp₀ InstructionExecutionResult tapes Instr.halt pcValue store work out = out₀) (executeInstructionTime tapes Instr.halt pcValue store)

Halt execution has the common one-buffer instruction contract.