Imports
Continuous compact exactly-one source for one structured row
This is the row-level composition boundary. One fixed controller emits the label and state groups, bridges directly to every fixed stack block, and stops at the stack-family exit. The common height and affine offsets remain runtime unary counters throughout the complete run.
noncomputable sectionopen StateTransitionnamespace CLRS.Chapter34.Turing.PolyBuilderprivate def structuredRowRelabelOp {Γ Δ Λ Μ : Type} (tag : Λ → Μ) :
Op Γ Δ Λ → Op Γ Δ Μ
| .pushOutput symbol next => .pushOutput symbol (tag next)
| .pushWork₁ symbol next => .pushWork₁ symbol (tag next)
| .pushWork₂ symbol next => .pushWork₂ symbol (tag next)
| .moveInputWork₁ nextEmpty nextMoved =>
.moveInputWork₁ (tag nextEmpty) (fun symbol => tag (nextMoved symbol))
| .moveWork₁Input nextEmpty nextMoved =>
.moveWork₁Input (tag nextEmpty) (fun symbol => tag (nextMoved symbol))
| .moveInputWork₂ nextEmpty nextMoved =>
.moveInputWork₂ (tag nextEmpty) (fun symbol => tag (nextMoved symbol))
| .moveWork₂Input nextEmpty nextMoved =>
.moveWork₂Input (tag nextEmpty) (fun symbol => tag (nextMoved symbol))
| .moveWork₁Work₂ nextEmpty nextMoved =>
.moveWork₁Work₂ (tag nextEmpty) (fun symbol => tag (nextMoved symbol))
| .moveWork₂Work₁ nextEmpty nextMoved =>
.moveWork₂Work₁ (tag nextEmpty) (fun symbol => tag (nextMoved symbol))
| .copyInputWorks nextEmpty nextMoved =>
.copyInputWorks (tag nextEmpty) (fun symbol => tag (nextMoved symbol))
| .popInput nextEmpty nextMoved =>
.popInput (tag nextEmpty) (fun symbol => tag (nextMoved symbol))
| .popWork₁ nextEmpty nextMoved =>
.popWork₁ (tag nextEmpty) (fun symbol => tag (nextMoved symbol))
| .popWork₂ nextEmpty nextMoved =>
.popWork₂ (tag nextEmpty) (fun symbol => tag (nextMoved symbol))
| .inc₁ next => .inc₁ (tag next)
| .inc₂ next => .inc₂ (tag next)
| .inc₃ next => .inc₃ (tag next)
| .dec₁ nextZero nextSucc => .dec₁ (tag nextZero) (tag nextSucc)
| .dec₂ nextZero nextSucc => .dec₂ (tag nextZero) (tag nextSucc)
| .dec₃ nextZero nextSucc => .dec₃ (tag nextZero) (tag nextSucc)
| .jump next => .jump (tag next)
| .halt => .haltFixed controller for the prefix followed by a fixed stack-width family.
abbrev affineExactlyOneStructuredRowRevProgram
(labelWidth stateWidth : Nat) (cellCounts : List Nat) :
Program UnaryFrameSym UnaryFrameSym :=
let prefixProgram := affineExactlyOnePrefixRevProgram labelWidth stateWidth
let stacksProgram := affineExactlyOneStackFamilyRevProgram cellCounts
letI := prefixProgram.labelDecidableEq
letI := prefixProgram.labelFintype
letI := stacksProgram.labelDecidableEq
letI := stacksProgram.labelFintype
{ Label := Sum prefixProgram.Label stacksProgram.Label
main := .inl prefixProgram.main
op := fun
| .inl (.finish) => .jump (.inr stacksProgram.main)
| .inl label => structuredRowRelabelOp .inl (prefixProgram.op label)
| .inr label => structuredRowRelabelOp .inr (stacksProgram.op label) }Gate offset at the beginning of the first stack.
def affineExactlyOneStructuredRowStackStart
(labelWidth stateWidth start : Nat) : Nat :=
start + (3 * labelWidth + 4) + (3 * stateWidth + 4)Source offset at the beginning of the first stack.
def affineExactlyOneStructuredRowStackBase
(labelWidth stateWidth rowBase : Nat) : Nat :=
rowBase + 1 + labelWidth + stateWidthExact compact frame sequence emitted for one row.
def affineExactlyOneStructuredRowFrames
(labelWidth stateWidth : Nat) (cellCounts : List Nat)
(height start rowBase : Nat) : List AffineExactlyOneFrame :=
affineExactlyOnePrefixFrames labelWidth stateWidth start rowBase ++
affineExactlyOneStackFamilyFrames cellCounts height
(affineExactlyOneStructuredRowStackStart labelWidth stateWidth start)
(affineExactlyOneStructuredRowStackBase labelWidth stateWidth rowBase)private def affineExactlyOneStructuredRowCfg
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
(label : (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts).Label)
(buffer₁ buffer₂ : Option UnaryFrameSym) (test : Bool)
(input output work₁ work₂ : List UnaryFrameSym)
(height start rowBase : List Unit) :
BuilderCfg (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) where
label := some label
buffer₁ := buffer₁
buffer₂ := buffer₂
test := test
input := input
output := output
work₁ := work₁
work₂ := work₂
counter₁ := height
counter₂ := start
counter₃ := rowBaseClean entry for one structured row.
def affineExactlyOneStructuredRowLoadedCfg
(labelWidth stateWidth : Nat) (cellCounts : List Nat)
(height start rowBase : Nat) (input output : List UnaryFrameSym) :
BuilderCfg (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) :=
affineExactlyOneStructuredRowCfg
(affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts).main
none none false input output [] []
(List.replicate height ()) (List.replicate start ())
(List.replicate rowBase ())Public row exit, inherited from the complete stack family.
def affineExactlyOneStructuredRowFinishCfg
(labelWidth stateWidth : Nat) (cellCounts : List Nat)
(height start rowBase : Nat) (input output : List UnaryFrameSym) :
BuilderCfg (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) :=
affineExactlyOneStructuredRowCfg
(.inr (affineExactlyOneStackFamilyFinishLabel cellCounts))
none none false input output [] []
(List.replicate height ())
(List.replicate (affineExactlyOneStackFamilyEndStart cellCounts height
(affineExactlyOneStructuredRowStackStart labelWidth stateWidth start)) ())
(List.replicate (affineExactlyOneStackFamilyEndBase cellCounts height
(affineExactlyOneStructuredRowStackBase labelWidth stateWidth rowBase)) ())Explicit public shape of the row exit. This lets an outer controller replace the halt while retaining the exact persistent counter values.
theorem affineExactlyOneStructuredRowFinishCfg_eq
(labelWidth stateWidth : Nat) (cellCounts : List Nat)
(height start rowBase : Nat) (input output : List UnaryFrameSym) :
affineExactlyOneStructuredRowFinishCfg labelWidth stateWidth cellCounts
height start rowBase input output =
{ label := some (.inr
(affineExactlyOneStackFamilyFinishLabel cellCounts))
buffer₁ := none
buffer₂ := none
test := false
input := input
output := output
work₁ := []
work₂ := []
counter₁ := List.replicate height ()
counter₂ := List.replicate
(affineExactlyOneStackFamilyEndStart cellCounts height
(affineExactlyOneStructuredRowStackStart
labelWidth stateWidth start)) ()
counter₃ := List.replicate
(affineExactlyOneStackFamilyEndBase cellCounts height
(affineExactlyOneStructuredRowStackBase
labelWidth stateWidth rowBase)) () } := rflThe public row exit is the embedded stack-family halt boundary.
@[simp] theorem affineExactlyOneStructuredRow_op_finish
(labelWidth stateWidth : Nat) (cellCounts : List Nat) :
(affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts).op
(.inr (affineExactlyOneStackFamilyFinishLabel cellCounts)) =
Op.halt := by
change structuredRowRelabelOp Sum.inr
((affineExactlyOneStackFamilyRevProgram cellCounts).op
(affineExactlyOneStackFamilyFinishLabel cellCounts)) = Op.halt
rw [affineExactlyOneStackFamily_op_finish]
rflprivate def structuredRowRelabelCfg
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
{P : Program UnaryFrameSym UnaryFrameSym}
(tag : P.Label → (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts).Label)
(c : BuilderCfg P) :
BuilderCfg (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) where
label := c.label.map tag
buffer₁ := c.buffer₁
buffer₂ := c.buffer₂
test := c.test
input := c.input
output := c.output
work₁ := c.work₁
work₂ := c.work₂
counter₁ := c.counter₁
counter₂ := c.counter₂
counter₃ := c.counter₃private def liftStructuredRowPrefixCfg
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
(c : BuilderCfg
(affineExactlyOnePrefixRevProgram labelWidth stateWidth)) :
BuilderCfg (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) :=
structuredRowRelabelCfg .inl cprivate def liftStructuredRowStacksCfg
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
(c : BuilderCfg (affineExactlyOneStackFamilyRevProgram cellCounts)) :
BuilderCfg (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) :=
structuredRowRelabelCfg .inr cprivate theorem structuredRowRelabel_stepOp
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
{P : Program UnaryFrameSym UnaryFrameSym}
(tag : P.Label → (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts).Label)
(op : Op UnaryFrameSym UnaryFrameSym P.Label) (c : BuilderCfg P) :
stepOp (structuredRowRelabelOp tag op) (structuredRowRelabelCfg tag c) =
structuredRowRelabelCfg tag (stepOp op c) := by
rcases c with
⟨label, buffer₁, buffer₂, test, input, output, work₁, work₂,
counter₁, counter₂, counter₃⟩
cases op <;>
simp only [structuredRowRelabelOp, structuredRowRelabelCfg, stepOp] <;>
first
| rfl
| split <;> rflprivate theorem affineExactlyOneStructuredRow_op_prefix
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
(label : AffineExactlyOnePrefixLabel labelWidth stateWidth)
(hexit : label ≠ .finish) :
(affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts).op (.inl label) =
structuredRowRelabelOp .inl
((affineExactlyOnePrefixRevProgram labelWidth stateWidth).op label) := by
cases label <;>
simp_all [affineExactlyOneStructuredRowRevProgram]private theorem affineExactlyOneStructuredRow_op_stacks
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
(label : (affineExactlyOneStackFamilyRevProgram cellCounts).Label) :
(affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts).op (.inr label) =
structuredRowRelabelOp .inr
((affineExactlyOneStackFamilyRevProgram cellCounts).op label) := by
rfl
private theorem liftStructuredRowPrefix_step
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
(c : BuilderCfg
(affineExactlyOnePrefixRevProgram labelWidth stateWidth))
(hexit : c.label ≠ some .finish) :
step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) (liftStructuredRowPrefixCfg c) =
Option.map liftStructuredRowPrefixCfg
(step (affineExactlyOnePrefixRevProgram labelWidth stateWidth) c) := by
unfold step
rw [show (liftStructuredRowPrefixCfg c).label =
c.label.map .inl by rfl]
cases hlabel : c.label with
| none => rfl
| some label =>
have hlabelExit : label ≠ .finish := by
intro h
apply hexit
simpa [hlabel] using congrArg some h
simp only [Option.map_some]
exact congrArg some
(structuredRowRelabel_stepOp .inl
((affineExactlyOnePrefixRevProgram labelWidth stateWidth).op label) c)
private theorem liftStructuredRowStacks_step
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
(c : BuilderCfg (affineExactlyOneStackFamilyRevProgram cellCounts)) :
step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) (liftStructuredRowStacksCfg c) =
Option.map liftStructuredRowStacksCfg
(step (affineExactlyOneStackFamilyRevProgram cellCounts) c) := by
unfold step
rw [show (liftStructuredRowStacksCfg c).label =
c.label.map .inr by rfl]
cases hlabel : c.label with
| none => rfl
| some label =>
simp only [Option.map_some]
exact congrArg some
(structuredRowRelabel_stepOp .inr
((affineExactlyOneStackFamilyRevProgram cellCounts).op label) c)
private theorem structuredRow_iterate_bind_none {σ : Type}
(f : σ → Option σ) : ∀ n : Nat,
(flip Option.bind f)^[n] none = none := by
intro n
induction n with
| zero => rfl
| succ n ih =>
rw [Function.iterate_succ_apply]
change (flip Option.bind f)^[n] none = none
exact ih
private theorem structuredRow_haltExit_no_return
{P : Program UnaryFrameSym UnaryFrameSym} (exit : P.Label)
(hop : P.op exit = .halt) (a b : BuilderCfg P)
(ha : a.label = some exit) (hb : b.label = some exit) : ∀ n : Nat,
(flip Option.bind (step P))^[n] (step P a) ≠ some b := by
intro n
let halted : BuilderCfg P :=
{ a with label := none, buffer₁ := none, buffer₂ := none, test := false }
have hstep : step P a = some halted := by
unfold step
rw [ha]
simp [hop, stepOp, halted]
cases n with
| zero =>
rw [hstep]
intro h
have hlabel := congrArg (fun cfg => cfg.label) (Option.some.inj h)
simp [halted, hb] at hlabel
| succ n =>
rw [hstep, Function.iterate_succ_apply]
change (flip Option.bind (step P))^[n] (step P halted) ≠ some b
have hnone : step P halted = none := rfl
rw [hnone, structuredRow_iterate_bind_none]
simp
private theorem structuredRow_lift_iterations_to_haltExit
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
{P : Program UnaryFrameSym UnaryFrameSym} (exit : P.Label)
(hop : P.op exit = .halt)
(tr : BuilderCfg P → BuilderCfg
(affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts))
(hstep : ∀ c, c.label ≠ some exit →
step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) (tr c) =
Option.map tr (step P c))
{a b : BuilderCfg P} (hb : b.label = some exit) : ∀ n : Nat,
(flip Option.bind (step P))^[n] (some a) = some b →
(flip Option.bind
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts)))^[n]
(some (tr a)) = some (tr b) := by
intro n
induction n generalizing a with
| zero =>
intro h
injection h with hab
simp [hab]
| succ n ih =>
intro h
rw [Function.iterate_succ_apply] at h ⊢
change (flip Option.bind (step P))^[n] (step P a) = some b at h
change (flip Option.bind
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts)))^[n]
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) (tr a)) = some (tr b)
have haexit : a.label ≠ some exit := by
intro ha
exact structuredRow_haltExit_no_return exit hop a b ha hb n h
cases hsource : step P a with
| none =>
rw [hsource, structuredRow_iterate_bind_none] at h
contradiction
| some c =>
have hsim := hstep a haexit
rw [hsource] at hsim
simp only [Option.map_some] at hsim
rw [hsim]
rw [hsource] at h
exact ih h
private theorem structuredRow_lift_iterations
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
{P : Program UnaryFrameSym UnaryFrameSym}
(tr : BuilderCfg P → BuilderCfg
(affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts))
(hstep : ∀ c,
step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) (tr c) =
Option.map tr (step P c)) :
∀ {a b : BuilderCfg P} (n : Nat),
(flip Option.bind (step P))^[n] (some a) = some b →
(flip Option.bind
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts)))^[n]
(some (tr a)) = some (tr b) := by
intro a b n
induction n generalizing a with
| zero =>
intro h
injection h with hab
simp [hab]
| succ n ih =>
intro h
rw [Function.iterate_succ_apply] at h ⊢
change (flip Option.bind (step P))^[n] (step P a) = some b at h
change (flip Option.bind
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts)))^[n]
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts) (tr a)) = some (tr b)
rw [hstep]
cases hsource : step P a with
| none =>
rw [hsource, structuredRow_iterate_bind_none] at h
contradiction
| some c =>
simp only [Option.map_some]
rw [hsource] at h
exact ih hprivate def affineExactlyOneStructuredRow_prefix_run
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
(height start rowBase : Nat) (input output : List UnaryFrameSym) :
EvalsToInTime
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts))
(liftStructuredRowPrefixCfg
(affineExactlyOnePrefixLoadedCfg labelWidth stateWidth height start
rowBase input output))
(some (liftStructuredRowPrefixCfg
(affineExactlyOnePrefixFinishCfg labelWidth stateWidth height start
rowBase input
((encodeAffineExactlyOneCompactFamily
(affineExactlyOnePrefixFrames labelWidth stateWidth start rowBase)
).reverse ++ output))))
(affineExactlyOnePrefixSteps labelWidth stateWidth start rowBase) := by
have sourceRun := affineExactlyOnePrefix_runToFinish
labelWidth stateWidth height start rowBase input output
have htarget :
(affineExactlyOnePrefixFinishCfg labelWidth stateWidth height start
rowBase input
((encodeAffineExactlyOneCompactFamily
(affineExactlyOnePrefixFrames labelWidth stateWidth start rowBase)
).reverse ++ output)).label = some .finish := rfl
refine ⟨⟨sourceRun.steps, ?_⟩, sourceRun.steps_le_m⟩
exact structuredRow_lift_iterations_to_haltExit
(AffineExactlyOnePrefixLabel.finish
(labelWidth := labelWidth) (stateWidth := stateWidth)) rfl
liftStructuredRowPrefixCfg liftStructuredRowPrefix_step htarget
sourceRun.steps sourceRun.evals_in_stepsprivate def affineExactlyOneStructuredRow_stacks_run
{labelWidth stateWidth : Nat} {cellCounts : List Nat}
{a b : BuilderCfg (affineExactlyOneStackFamilyRevProgram cellCounts)}
{steps : Nat}
(sourceRun : EvalsToInTime
(step (affineExactlyOneStackFamilyRevProgram cellCounts))
a (some b) steps) :
EvalsToInTime
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts))
(liftStructuredRowStacksCfg a)
(some (liftStructuredRowStacksCfg b)) steps := by
refine ⟨⟨sourceRun.steps, ?_⟩, sourceRun.steps_le_m⟩
exact structuredRow_lift_iterations liftStructuredRowStacksCfg
liftStructuredRowStacks_step sourceRun.steps sourceRun.evals_in_stepsExact runtime of the complete structured-row source.
def affineExactlyOneStructuredRowSteps
(labelWidth stateWidth : Nat) (cellCounts : List Nat)
(height start rowBase : Nat) : Nat :=
affineExactlyOnePrefixSteps labelWidth stateWidth start rowBase + 1 +
affineExactlyOneStackFamilySteps cellCounts height
(affineExactlyOneStructuredRowStackStart labelWidth stateWidth start)
(affineExactlyOneStructuredRowStackBase labelWidth stateWidth rowBase)Fixed coefficient for a complete structured-row quadratic bound.
def affineExactlyOneStructuredRowStepCoeff
(labelWidth stateWidth : Nat) (cellCounts : List Nat) : Nat :=
31 * (labelWidth + stateWidth + 2) +
affineExactlyOneStackFamilyStepCoeff cellCounts *
(5 * (labelWidth + stateWidth + 2)) ^ 2A complete structured row is quadratic in the loaded runtime height and two affine offsets.
theorem affineExactlyOneStructuredRowSteps_le
(labelWidth stateWidth : Nat) (cellCounts : List Nat)
(height start rowBase : Nat) :
affineExactlyOneStructuredRowSteps labelWidth stateWidth cellCounts
height start rowBase ≤
affineExactlyOneStructuredRowStepCoeff
labelWidth stateWidth cellCounts *
(height + start + rowBase + 1) ^ 2 := by
let payload := height + start + rowBase + 1
let stackStart := affineExactlyOneStructuredRowStackStart
labelWidth stateWidth start
let stackBase := affineExactlyOneStructuredRowStackBase
labelWidth stateWidth rowBase
let stackPayload := height + stackStart + stackBase + 1
let scale := 5 * (labelWidth + stateWidth + 2)
have hpayload : 1 ≤ payload := by simp [payload]
have hprefSource := affineExactlyOnePrefixSteps_le
labelWidth stateWidth start rowBase
have hpref :
affineExactlyOnePrefixSteps labelWidth stateWidth start rowBase + 1 ≤
31 * (labelWidth + stateWidth + 2) * payload ^ 2 := by
have hsourcePayload : start + rowBase + 1 ≤ payload := by
dsimp only [payload]
omega
have hpayloadSquare : payload ≤ payload ^ 2 := by nlinarith
have hmain :
affineExactlyOnePrefixSteps labelWidth stateWidth start rowBase ≤
30 * (labelWidth + stateWidth + 2) * payload ^ 2 :=
hprefSource.trans <| (Nat.mul_le_mul_left
(30 * (labelWidth + stateWidth + 2)) hsourcePayload).trans <|
Nat.mul_le_mul_left
(30 * (labelWidth + stateWidth + 2)) hpayloadSquare
have hone : 1 ≤ (labelWidth + stateWidth + 2) * payload ^ 2 := by
nlinarith
calc
affineExactlyOnePrefixSteps labelWidth stateWidth start rowBase + 1 ≤
30 * (labelWidth + stateWidth + 2) * payload ^ 2 +
(labelWidth + stateWidth + 2) * payload ^ 2 :=
Nat.add_le_add hmain hone
_ = 31 * (labelWidth + stateWidth + 2) * payload ^ 2 := by ring
have hstackPayload : stackPayload ≤ scale * payload := by
dsimp only [stackPayload, stackStart, stackBase, scale, payload]
simp only [affineExactlyOneStructuredRowStackStart,
affineExactlyOneStructuredRowStackBase]
nlinarith
have hsquare : stackPayload ^ 2 ≤ scale ^ 2 * payload ^ 2 := by
nlinarith
have hstackSource := affineExactlyOneStackFamilySteps_le
cellCounts height stackStart stackBase
have hstack : affineExactlyOneStackFamilySteps cellCounts height
stackStart stackBase ≤
affineExactlyOneStackFamilyStepCoeff cellCounts *
(scale ^ 2 * payload ^ 2) := by
exact hstackSource.trans
(Nat.mul_le_mul_left
(affineExactlyOneStackFamilyStepCoeff cellCounts) hsquare)
calc
affineExactlyOneStructuredRowSteps labelWidth stateWidth cellCounts
height start rowBase =
(affineExactlyOnePrefixSteps labelWidth stateWidth start rowBase + 1) +
affineExactlyOneStackFamilySteps cellCounts height
stackStart stackBase := by
simp [affineExactlyOneStructuredRowSteps, stackStart, stackBase]
_ ≤ 31 * (labelWidth + stateWidth + 2) * payload ^ 2 +
affineExactlyOneStackFamilyStepCoeff cellCounts *
(scale ^ 2 * payload ^ 2) := Nat.add_le_add hpref hstack
_ = affineExactlyOneStructuredRowStepCoeff
labelWidth stateWidth cellCounts * payload ^ 2 := by
simp [affineExactlyOneStructuredRowStepCoeff, scale]
ringprivate theorem structuredRow_encode_append
(left right : List AffineExactlyOneFrame) :
encodeAffineExactlyOneCompactFamily (left ++ right) =
encodeAffineExactlyOneCompactFamily left ++
encodeAffineExactlyOneCompactFamily right := by
induction left with
| nil => rfl
| cons frame rest ih =>
simp [encodeAffineExactlyOneCompactFamily, ih, List.append_assoc]The single row controller emits the prefix and every stack block in exact canonical structured order, preserving the runtime height.
def affineExactlyOneStructuredRow_runToFinish
(labelWidth stateWidth : Nat) (cellCounts : List Nat)
(height start rowBase : Nat) (input output : List UnaryFrameSym) :
EvalsToInTime
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts))
(affineExactlyOneStructuredRowLoadedCfg labelWidth stateWidth cellCounts
height start rowBase input output)
(some (affineExactlyOneStructuredRowFinishCfg labelWidth stateWidth
cellCounts height start rowBase input
((encodeAffineExactlyOneCompactFamily
(affineExactlyOneStructuredRowFrames labelWidth stateWidth
cellCounts height start rowBase)).reverse ++ output)))
(affineExactlyOneStructuredRowSteps labelWidth stateWidth cellCounts
height start rowBase) := by
let stackStart :=
affineExactlyOneStructuredRowStackStart labelWidth stateWidth start
let stackBase :=
affineExactlyOneStructuredRowStackBase labelWidth stateWidth rowBase
let prefixFrames :=
affineExactlyOnePrefixFrames labelWidth stateWidth start rowBase
let stackFrames :=
affineExactlyOneStackFamilyFrames cellCounts height stackStart stackBase
let prefixOutput :=
(encodeAffineExactlyOneCompactFamily prefixFrames).reverse ++ output
let finalOutput :=
(encodeAffineExactlyOneCompactFamily stackFrames).reverse ++ prefixOutput
let prefixStart := liftStructuredRowPrefixCfg (cellCounts := cellCounts)
(affineExactlyOnePrefixLoadedCfg labelWidth stateWidth height start
rowBase input output)
let prefixDone := liftStructuredRowPrefixCfg (cellCounts := cellCounts)
(affineExactlyOnePrefixFinishCfg labelWidth stateWidth height start
rowBase input prefixOutput)
let stacksStart := liftStructuredRowStacksCfg
(labelWidth := labelWidth) (stateWidth := stateWidth)
(affineExactlyOneStackFamilyLoadedCfg cellCounts height stackStart
stackBase input prefixOutput)
let stacksDone := liftStructuredRowStacksCfg
(labelWidth := labelWidth) (stateWidth := stateWidth)
(affineExactlyOneStackFamilyFinishCfg cellCounts height stackStart
stackBase input finalOutput)
have hprefix : EvalsToInTime
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts)) prefixStart (some prefixDone)
(affineExactlyOnePrefixSteps labelWidth stateWidth start rowBase) := by
simpa [prefixStart, prefixDone, prefixFrames, prefixOutput] using
affineExactlyOneStructuredRow_prefix_run (cellCounts := cellCounts)
height start rowBase input output
have hbridge : EvalsToInTime
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts)) prefixDone (some stacksStart) 1 := by
refine ⟨⟨1, ?_⟩, le_rfl⟩
rfl
have hstacksSource := affineExactlyOneStackFamily_runToFinish cellCounts
height stackStart stackBase input prefixOutput
have hstacks : EvalsToInTime
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts)) stacksStart (some stacksDone)
(affineExactlyOneStackFamilySteps cellCounts height stackStart
stackBase) := by
simpa [stacksStart, stacksDone, stackFrames, finalOutput] using
affineExactlyOneStructuredRow_stacks_run
(labelWidth := labelWidth) (stateWidth := stateWidth) hstacksSource
let h₁ := EvalsToInTime.trans
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts)) _ 1 _ prefixDone _ hprefix hbridge
let full := EvalsToInTime.trans
(step (affineExactlyOneStructuredRowRevProgram
labelWidth stateWidth cellCounts)) _ _ _ stacksStart _ h₁ hstacks
convert full using 1
· rfl
· simp [stacksDone, liftStructuredRowStacksCfg, structuredRowRelabelCfg,
affineExactlyOneStructuredRowFinishCfg,
affineExactlyOneStackFamilyFinishCfg,
affineExactlyOneStackFamilyCfg,
affineExactlyOneStructuredRowCfg, affineExactlyOneStructuredRowFrames,
structuredRow_encode_append, finalOutput, stackFrames, prefixOutput,
prefixFrames, List.reverse_append, List.append_assoc,
stackStart, stackBase]
· simp [affineExactlyOneStructuredRowSteps, stackStart, stackBase]
omegaend CLRS.Chapter34.Turing.PolyBuilder