Deterministic Word-RAM state-transition implementations #
This file defines Cslib.DataStructure.WordRAM.StateTransitionImpl, the unified standalone and
inline Word-RAM subroutine implementation and resource certificate for a relational state-transition
specification D : Cslib.DataStructure.StateTransitionSpec.
A data structure is packaged once as a Cslib.WordRAM.SubroutineCode B r_ds k_init and certified by
a StateTransitionImpl bundle extending Cslib.WordRAM.SubroutineBase. From that single proof,
this file derives:
- Defined-evaluation basis lifting (
StateTransitionImpl.mapSimulates,StateTransitionImpl.toStandard): Non-faulting executions overBasis.exactlift instruction-for-instruction toBasis.standardviaBasis.Simulates.exactStandard. - Standalone
DataStructureprojections:toDynamicProgram,toCertificate,toAmortized,toBound, and adaptive-client corollaries (run_client_demonic_amortized,run_client_demonic_bound,run_client_amortized,run_client_bound). - Relocated inline calls (
code_rename,call_rename,code_rename_ofFn,call_rename_ofFn): Inline execution on caller state spaceData r_callerwith amortized potential accounting and DS-to-callerModifiesframing. - Flat-program operation-sequence execution (
RunsOps,run_ops_exact_fresh,run_ops_exact_reusable): Standalone flat-program sequence theorems overP.initFreshProg,P.initClearProg, andP.opProg.
Main definitions #
Cslib.DataStructure.WordRAM.StateTransitionImpl: unified standalone and inline Word-RAM implementation and resource certificate forD : StateTransitionSpec.Cslib.DataStructure.WordRAM.StateTransitionImpl.ofFn: constructor for deterministic specifications ([D.HasStepFn f]).Cslib.DataStructure.WordRAM.StateTransitionImpl.toCertificate: standalone.standard-basisDynamicCertificateprojection.Cslib.DataStructure.WordRAM.StateTransitionImpl.RunsOps: sequential flat-program operation execution relation.
Main results #
Cslib.DataStructure.WordRAM.StateTransitionImpl.toAmortized,Cslib.DataStructure.WordRAM.StateTransitionImpl.toBound,Cslib.DataStructure.WordRAM.StateTransitionImpl.run_client_amortized,Cslib.DataStructure.WordRAM.StateTransitionImpl.run_client_bound: standalone amortized and worst-case instruction bounds overBasis.standard.Cslib.DataStructure.WordRAM.StateTransitionImpl.code_rename,Cslib.DataStructure.WordRAM.StateTransitionImpl.call_rename,Cslib.DataStructure.WordRAM.StateTransitionImpl.code_rename_ofFn,Cslib.DataStructure.WordRAM.StateTransitionImpl.call_rename_ofFn: relocated inline subroutine calls.Cslib.DataStructure.WordRAM.StateTransitionImpl.run_ops_exact_fresh,Cslib.DataStructure.WordRAM.StateTransitionImpl.run_ops_exact_reusable,Cslib.DataStructure.WordRAM.StateTransitionImpl.run_ops_exact_fresh_ofFn,Cslib.DataStructure.WordRAM.StateTransitionImpl.run_ops_exact_reusable_ofFn: standalone flat-program operation-sequence theorems.
References #
Unified standalone and subroutine specification/resource certificate for
P : SubroutineCode B r_ds k_init implementing a relational specification
D : StateTransitionSpec at word width w, base address base, runtime parameters params, and
initial state s₀.
Extends SubroutineBase P D.Result D.valid w base params s₀ (inheriting toDynamicProgram,
initFresh_exec, initFresh_rename, initClear_exec, initClear_rename,
frame_caller, and prepareRegs), and existentially quantifies over a permitted outcome
(s', a) satisfying D.step s o s' a in step_exec.
- span_exec {x : Data r_ds} : Data.Bounded w x → x.regs P.frontierReg = base → (∀ (j : Fin k_init), x.regs (P.initParams j) = params j) → ∃ (x₁ : Data r_ds), ExecWithin w P.allocSpan x x₁ self.spanTime ∧ x₁.mem = x.mem ∧ x₁.regs P.baseReg = base ∧ x₁.regs P.frontierReg = base + self.space ∧ ∀ (j : Fin k_init), x₁.regs (P.initParams j) = params j
- setup_exec {x₁ : Data r_ds} : Data.Bounded w x₁ → x₁.regs P.baseReg = base → x₁.regs P.frontierReg = base + self.space → (∀ (j : Fin k_init), x₁.regs (P.initParams j) = params j) → (∀ a ∈ { base := base, length := self.space }.footprint, x₁.mem a = 0) → ∃ (y : Data r_ds), ExecWithin w P.initSetup x₁ y self.setupTime ∧ y.regs P.frontierReg = base + self.space ∧ self.rep s₀ y ∧ self.potential y ≤ self.initPotential ∧ Modifies { base := base, length := self.space }.footprint x₁.mem y.mem
- step_exec {s : D.State} {x : WordRAM.Data r_ds} (o : D.Op) : self.rep s x → D.valid s o → self.argMatch o x.regs → ∃ (y : WordRAM.Data r_ds) (s' : D.State) (a : D.Result o) (n : ℕ), WordRAM.Exec w P.code x y n ∧ D.step s o s' a ∧ self.decode o y.regs = some a ∧ self.rep s' y ∧ WordRAM.Modifies { base := base, length := self.space }.footprint x.mem y.mem ∧ n + self.potential y ≤ self.charge s o + self.potential x
Angelic execution of
P.codefor any admissible operationowhose arguments matchx.regs, witnessing some permitted outcome(s', a)withD.step s o s' a.
Instances For
Construct a StateTransitionImpl for a deterministic specification ([D.HasStepFn f]) from a
functional step_exec proof at (D.stepFn s o).
Instances For
Projection 1: Basis lifting and standalone DynamicProgram / DataStructure theorems #
Lift a StateTransitionImpl certificate along any defined-evaluation basis simulation.
Instances For
Lift an exact-basis StateTransitionImpl certificate to Basis.standard.
Instances For
Project a .standard-basis StateTransitionImpl to a standalone DynamicCertificate.
Instances For
Project a .standard-basis StateTransitionImpl to a standalone DataStructure.Amortized
certificate, charging + 1 per operation for DynamicProgram's trailing halt instruction.
When C.potential is identically zero, StateTransitionImpl projects directly to a worst-case
DataStructure.Bound certificate.
Standalone adaptive-client amortized bound for any demonically admissible client p.
Standalone adaptive-client worst-case bound when C.potential is identically zero.
Standalone adaptive-client amortized bound on a deterministic specification.
Standalone adaptive-client worst-case bound on a deterministic specification when
C.potential is identically zero.
Projection 2: Relocated inline subroutine calls (code_rename, call_rename) #
Execute P.code.rename f inline when arguments already match (x.comap f).regs,
witnessing a permitted outcome (s', a) with D.step s o s' a.
Execute .seq prep (P.code.rename f) inline after a caller argument-preparation block prep
that preserves persistent DS registers and memory in [base, base + C.space).
Deterministic specialization of code_rename for [D.HasStepFn g].
Deterministic specialization of call_rename for [D.HasStepFn g].
Sequential flat-program execution of ops : List D.Op by repeated calls to P.opProg:
each call prepares input registers via prepRegs, runs P.opProg from pc = 0 to halt,
decodes a permitted outcome (s₁, a) with D.step s o s₁ a, modifies memory only within
[base, base + C.space), records the resulting transcript tr : D.Transcript, and accumulates
total instructions executed (including each trailing halt).
- nil {B : WordRAM.Basis} {r_ds k_init w base : ℕ} {P : WordRAM.SubroutineCode B r_ds k_init} {D : StateTransitionSpec} {params : Fin k_init → ℕ} {s₀ : D.State} {C : StateTransitionImpl P D w base params s₀} {prepRegs : optParam (D.Op → (Fin r_ds → ℕ) → Fin r_ds → ℕ) C.prepareRegs} {s : D.State} {x : WordRAM.Data r_ds} : C.RunsOps prepRegs s x [] [] s x 0
- cons {B : WordRAM.Basis} {r_ds k_init w base : ℕ} {P : WordRAM.SubroutineCode B r_ds k_init} {D : StateTransitionSpec} {params : Fin k_init → ℕ} {s₀ : D.State} {C : StateTransitionImpl P D w base params s₀} {prepRegs : optParam (D.Op → (Fin r_ds → ℕ) → Fin r_ds → ℕ) C.prepareRegs} {s s₁ s₂ : D.State} {x : WordRAM.Data r_ds} {o : D.Op} {a : D.Result o} {ops : List D.Op} {tr : D.Transcript} {pc : ℕ} {y z : WordRAM.Data r_ds} {steps rest : ℕ} : WordRAM.Runs w P.opProg { pc := 0, data := { regs := prepRegs o x.regs, mem := x.mem } } { pc := pc, data := y } steps → (∃ (out : ℕ), WordRAM.step w P.opProg { pc := pc, data := y } = WordRAM.Outcome.halt out) → D.step s o s₁ a → C.decode o y.regs = some a → WordRAM.Modifies { base := base, length := C.space }.footprint x.mem y.mem → C.RunsOps prepRegs s₁ y ops tr s₂ z rest → C.RunsOps prepRegs s x (o :: ops) ({ op := o, result := a, nextState := s₁ } :: tr) s₂ z (steps + 1 + rest)
Instances For
Flat-program sequence execution under a custom register-preparation function prepRegs.
Flat-program sequence execution using C.prepareRegs.
Standalone flat-program operation-sequence theorem with fresh initialization on zeroed
[base, base + C.space): P.initFreshProg runs at most C.initTime steps before its halt.
Standalone flat-program operation-sequence theorem with reusable initialization on arbitrary
w-bounded memory: P.initClearProg runs at most C.initTime + 4 * C.space + 6 steps before its
halt.
Deterministic specialization of run_ops_exact_fresh for [D.HasStepFn g], executing the
canonical transcript D.canonicalTranscript s₀ ops to (D.run s₀ ops).1.
Deterministic specialization of run_ops_exact_reusable for [D.HasStepFn g], executing the
canonical transcript D.canonicalTranscript s₀ ops to (D.run s₀ ops).1.