Emitting a canonical frame in reverse
DefinitionReversed self-delimiting frame emitter#✓fully proved
Cslib.Complexity.PolynomialEncoding.emitFrame
Emit one raw payload as a reversed self-delimiting frame.
def emitFrame (a b : K) (d : Γ a → Option Bool) (g : Bool → Γ b)
(self next : Λ) : TM2.Stmt Γ Λ Bool :=
.peek a (fun _ o => isBit d o) <| .branch id
(.pop a (fun _ o => bitOf d o) <|
.push b (fun _ => g true) <| .push b g <| .goto fun _ => self)
(.push b (fun _ => g false) <| .goto fun _ => next)
def isBit {α : Type} (d : α → Option Bool) (o : Option α) : Bool := (o.bind d).isSome
MathlibExt/Computability/TuringMachine/BitOps.lean:47
def bitOf {α : Type} (d : α → Option Bool) (o : Option α) : Bool := (o.bind d).getD false
MathlibExt/Computability/TuringMachine/BitOps.lean:50
Uses 2 · Used by 5
Statement usesBit on top of a stack · Bit test for the top of a stack
TheoremFrame emitter takes one step per payload bit plus one#✓fully proved
Cslib.Complexity.PolynomialEncoding.emitFrame_run
Emit a complete frame in payload.length + 1 steps, restoring the
input suffix and leaving every unrelated stack unchanged.
theorem emitFrame_run {M : Λ → TM2.Stmt Γ Λ Bool}
{a b : K} {d : Γ a → Option Bool} {g : Bool → Γ b}
{self next : Λ} (hM : M self = emitFrame a b d g self next)
(hab : a ≠ b) (ga : Bool → Γ a) (hga : ∀ c, d (ga c) = some c)
(payload : List Bool) : ∀ (tail : List (Γ a)) (v : Bool)
(S : ∀ k, List (Γ k)), EndsBitBlock d tail →
S a = payload.map ga ++ tail →
∃ S', Run M (payload.length + 1) ⟨some self, v, S⟩
⟨some next, false, S'⟩ ∧ S' a = tail ∧
S' b = ((delimit payload).map g).reverse ++ S b ∧
∀ k, k ≠ a → k ≠ b → S' k = S k
def emitFrame (a b : K) (d : Γ a → Option Bool) (g : Bool → Γ b)
(self next : Λ) : TM2.Stmt Γ Λ Bool :=
.peek a (fun _ o => isBit d o) <| .branch id
(.pop a (fun _ o => bitOf d o) <|
.push b (fun _ => g true) <| .push b g <| .goto fun _ => self)
(.push b (fun _ => g false) <| .goto fun _ => next)
CSLibExt/Computability/Complexity/PolynomialEncoding/Frame.lean:32
def EndsBitBlock {α : Type} (d : α → Option Bool) (A : List α) : Prop := A.head?.bind d = none
MathlibExt/Computability/TuringMachine/BitOps.lean:57
def Run (n : ℕ) (c d : TM2.Cfg Γ Λ σ) : Prop :=
(flip bind (TM2.step M))^[n] (some c) = some d
MathlibExt/Computability/TuringMachine/Program.lean:84
def delimit : List Bool → List Bool
| [] => [false]
| b :: l => true :: b :: delimit l
MathlibExt/Computability/Complexity.lean:68
Uses 7 · Used by 2
2 fully proved
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.