OAI/Computability/RationalHitting/StackLanguage.lean
32 declarations, 0 contain sorry, 0 declared as axioms
A finite structured binary-stack language. Every primitive is a push, pop, or transfer.
- def
OAI.RationalHitting.TMTime.execline 8 - lemma
OAI.RationalHitting.TMTime.exec_zeroline 12 - lemma
OAI.RationalHitting.TMTime.exec_addline 14 - lemma
OAI.RationalHitting.TMTime.exec_transline 21 - lemma
OAI.RationalHitting.TMTime.exec_positive_congrline 25 - def
OAI.RationalHitting.TMTime.OneToZero.weightline 35Source documentation
Syntactic statement bound, fixed once the finite machine is fixed.
def weight : TM1.Stmt Γ Λ σ → ℕ | .move _ q | .write _ q | .load _ q => weight q+1 | .branch _ q r => max (weight q) (weight r)+1 | .goto _ | .halt => 1
- lemma
OAI.RationalHitting.TMTime.OneToZero.weight_posline 40 - theorem
OAI.RationalHitting.TMTime.OneToZero.statement_timeline 46Source documentation
Each TM1 macro-step takes at most its statement size in real TM0 steps. Load and branch are absorbed into the next primitive step by Mathlib's compiler.
theorem statement_time (M : Λ → TM1.Stmt Γ Λ σ) (q : TM1.Stmt Γ Λ σ) (v : σ) (T : Tape Γ) : ∃ t, 0<t ∧ t ≤ weight q ∧ exec (TM0.step (TM1to0.tr M)) t ⟨(some q,v),T⟩ = some (TM1to0.trCfg M (TM1.stepAux q v T)) := by …Mentions: OAI.RationalHitting.TMTime.OneToZero.weight, OAI.RationalHitting.TMTime.exec
- theorem
OAI.RationalHitting.TMTime.OneToZero.execution_timeline 91Source documentation
Linear transition overhead for a finitely supported TM1 program.
theorem execution_time (M : Λ → TM1.Stmt Γ Λ σ) (S : Finset Λ) (hs : TM1.Supports M S) (C : ℕ) (hC : ∀ l ∈ S, weight (M l) ≤ C) (t : ℕ) (a b : TM1.Cfg Γ Λ σ) (ha : a.l ∈ Finset.insertNone S) (hr : exec (TM1.step M) t a = some b) : ∃ u ≤ C*t, exec (TM0.step (TM1to0.tr M)) u (TM1to0.trCfg M a) = some (TM1to0.trCfg M b) := by …Mentions: OAI.RationalHitting.TMTime.OneToZero.weight, OAI.RationalHitting.TMTime.exec
- theorem
OAI.RationalHitting.TMTime.OneToZero.haltsline 117 - inductive
OAI.RationalHitting.StackLanguage.Programline 132 - abbrev
OAI.RationalHitting.StackLanguage.Storeline 142 - abbrev
OAI.RationalHitting.StackLanguage.Labelsline 143 - def
OAI.RationalHitting.StackLanguage.transferline 147Source documentation
Move one head symbol if present, popping the first register before updating the second, including when both registers coincide.
def transfer (a b : K) (s : Store K) : Store K := …
Mentions: OAI.RationalHitting.StackLanguage.Store
- inductive
OAI.RationalHitting.StackLanguage.Evalline 153 - abbrev
OAI.RationalHitting.StackLanguage.Stmtline 173 - def
OAI.RationalHitting.StackLanguage.jumpline 175 - def
OAI.RationalHitting.StackLanguage.instructionline 178 - def
OAI.RationalHitting.StackLanguage.machineline 193 - def
OAI.RationalHitting.StackLanguage.cfgline 197 - theorem
OAI.RationalHitting.StackLanguage.jump_evalline 200 - theorem
OAI.RationalHitting.StackLanguage.eval_compilesline 205Source documentation
Exact big-step correctness in real TM2 steps, with no unbounded internal state or alphabet.
theorem eval_compiles {p : Program K} {s v : Store K} {t : ℕ} (h : Eval p s v t) (main : Program K) (ps : List (Program K)) : exec (TM2.step (machine main)) t (cfg (p::ps) s) = some (cfg ps v) := by …Mentions: OAI.RationalHitting.StackLanguage.Program, OAI.RationalHitting.StackLanguage.Store, OAI.RationalHitting.StackLanguage.Eval, OAI.RationalHitting.StackLanguage.machine, OAI.RationalHitting.StackLanguage.cfg
- def
OAI.RationalHitting.StackLanguage.successorsline 243Source documentation
Possible jump targets; inspecting a head has only three finite cases.
def successors : List (Program K) → Finset (List (Program K)) | [] => ∅ | .skip :: ps => {ps} | .push _ _ :: ps | .drop _ :: ps | .transfer _ _ :: ps => {ps} | .seq p q :: ps => {p::q::ps} | .branch _ p q r :: ps => {p::ps,q::ps,r::ps} | .loop k p :: ps => {ps,p::.loop k p::ps} /-- Finite control locations, computed structurally, despite unbounded loop iteration counts. -/Mentions: OAI.RationalHitting.StackLanguage.Program, OAI.RationalHitting.StackLanguage.transfer, OAI.RationalHitting.StackLanguage.locations
- def
OAI.RationalHitting.StackLanguage.locationsline 253Source documentation
Finite control locations, computed structurally, despite unbounded loop iteration counts.
def locations : Program K → List (Program K) → Finset (List (Program K)) | p@(.skip),ps | p@(.push ..),ps | p@(.drop ..),ps | p@(.transfer ..),ps => {p::ps,ps} | p@(.seq a b),ps => insert (p::ps) (locations a (b::ps) ∪ locations b ps) | p@(.branch _ a b c),ps => insert (p::ps) (locations a ps ∪ locations b ps ∪ locations c ps) | p@(.loop _ a),ps => insert (p::ps) (insert ps (locations a (p::ps)))Mentions: OAI.RationalHitting.StackLanguage.Program, OAI.RationalHitting.StackLanguage.transfer
- theorem
OAI.RationalHitting.StackLanguage.entry_memline 259 - theorem
OAI.RationalHitting.StackLanguage.exit_memline 262 - lemma
OAI.RationalHitting.StackLanguage.root_closedline 265 - lemma
OAI.RationalHitting.StackLanguage.locations_closedline 277 - def
OAI.RationalHitting.StackLanguage.supportline 314 - lemma
OAI.RationalHitting.StackLanguage.instruction_supportedline 316 - theorem
OAI.RationalHitting.StackLanguage.machine_supportedline 324 - theorem
OAI.RationalHitting.StackLanguage.complete_runline 340Source documentation
Entry and halting are one actual macrostep apiece.
theorem complete_run {p : Program K} {s v : Store K} {t : ℕ} (h : Eval p s v t) : exec (TM2.step (machine p)) (t+2) ⟨some none,none,s⟩ = some ⟨none,none,v⟩ := by …Mentions: OAI.RationalHitting.StackLanguage.Program, OAI.RationalHitting.StackLanguage.Store, OAI.RationalHitting.StackLanguage.Eval, OAI.RationalHitting.StackLanguage.machine