Imports
/- Copyright (c) 2026 Terence Rokop. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Terence Rokop -/ module public import Geb.Prototypes.Computability.BitTree.BinaryMachine.Simulation public import Geb.Prototypes.Computability.BitTree.BinaryMachine.Accounting public import Geb.Prototypes.Computability.BitTree.BinaryMachine.BitStep import Mathlib.Tactic.IntervalCases
set_option doc.verso true

Executions of the binary-counter recognizer

The execution at a prefix boundary is indexed by the accumulated cost of the input and counter transitions. A fixed binary width bounds all prefixes of an input.

Main statements

  • configs_account realizes every prefix account within its accumulated cost.

  • headBound_start bounds the initialization transitions.

Tags

binary tree, Turing machine, execution, amortized complexity

@[expose] public sectionnamespace Geb.BitTree.BinaryMachineopen Turing MultiTapeTM

Initialization emits no symbols.

theorem outputString_start (input : List (Fin 4)) : machine.outputString (machine.initCfg input) 2 = [] := rfl

The initialization steps visit only cells zero and one.

theorem headBound_start (input : List (Fin 4)) (width : ) (hw : 1 width) : t 2, HeadBound width (machine.configs (machine.initCfg input) t) := input:List (Fin 4)width:hw:1 width t 2, HeadBound width (configs (initCfg input) t) input:List (Fin 4)width:hw:1 widtht:ht:t 2i:Fin 30 (configs (initCfg input) t).workTapePos i (configs (initCfg input) t).workTapePos i width input:List (Fin 4)width:hw:1 widtht:i:Fin 3ht:0 20 (configs (initCfg input) 0).workTapePos i (configs (initCfg input) 0).workTapePos i widthinput:List (Fin 4)width:hw:1 widtht:i:Fin 3ht:1 20 (configs (initCfg input) 1).workTapePos i (configs (initCfg input) 1).workTapePos i widthinput:List (Fin 4)width:hw:1 widtht:i:Fin 3ht:2 20 (configs (initCfg input) 2).workTapePos i (configs (initCfg input) 2).workTapePos i width input:List (Fin 4)width:hw:1 widtht:i:Fin 3ht:0 20 (configs (initCfg input) 0).workTapePos i (configs (initCfg input) 0).workTapePos i widthinput:List (Fin 4)width:hw:1 widtht:i:Fin 3ht:1 20 (configs (initCfg input) 1).workTapePos i (configs (initCfg input) 1).workTapePos i widthinput:List (Fin 4)width:hw:1 widtht:i:Fin 3ht:2 20 (configs (initCfg input) 2).workTapePos i (configs (initCfg input) 2).workTapePos i width input:List (Fin 4)width:hw:1 widtht:ht:2 20 (configs (initCfg input) 2).workTapePos ((fun i i) 0, ) (configs (initCfg input) 2).workTapePos ((fun i i) 0, ) widthinput:List (Fin 4)width:hw:1 widtht:ht:2 20 (configs (initCfg input) 2).workTapePos ((fun i i) 1, ) (configs (initCfg input) 2).workTapePos ((fun i i) 1, ) widthinput:List (Fin 4)width:hw:1 widtht:ht:2 20 (configs (initCfg input) 2).workTapePos ((fun i i) 2, ) (configs (initCfg input) 2).workTapePos ((fun i i) 2, ) width all_goals first | (input:List (Fin 4)width:hw:1 widtht:ht:2 20 (configs (initCfg input) 2).workTapePos ((fun i i) 2, ) (configs (initCfg input) 2).workTapePos ((fun i i) 2, ) width; All goals completed! 🐙) | (input:List (Fin 4)width:hw:1 widtht:ht:2 20 1 1 width; exact input:List (Fin 4)width:hw:1 widtht:ht:2 20 1 All goals completed! 🐙, input:List (Fin 4)width:hw:1 widtht:ht:2 21 width All goals completed! 🐙)

Every prefix boundary realizes the pure account and bounds the whole execution so far.

theorem configs_account (w : List Bool) : t, t w.length let cost := 2 + runCost (w.take t) let now := machine.configs (machine.initCfg (w.map boolEmb)) cost let s := account (w.take t) Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos.val = t + 1 machine.outputString (machine.initCfg (w.map boolEmb)) cost = [] u cost, HeadBound (w.length + 2).size (machine.configs (machine.initCfg (w.map boolEmb)) u) := w:List Bool t w.length, let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List BoolNat.zero w.length let cost := 2 + runCost (List.take Nat.zero w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take Nat.zero w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = Nat.zero + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)w:List Bool (n : ), (n w.length let cost := 2 + runCost (List.take n w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take n w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = n + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)) n.succ w.length let cost := 2 + runCost (List.take n.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take n.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = n.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List BoolNat.zero w.length let cost := 2 + runCost (List.take Nat.zero w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take Nat.zero w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = Nat.zero + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolht:Nat.zero w.lengthlet cost := 2 + runCost (List.take Nat.zero w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take Nat.zero w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = Nat.zero + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolht:Nat.zero w.lengthRepresents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) 2) stTree 1 0 (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take Nat.zero w))).inputPos = Nat.zero + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take Nat.zero w)) = [] u 2 + runCost (List.take Nat.zero w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolht:Nat.zero w.lengthRepresents (w.length + 2).size (startCfg (List.map (⇑boolEmb) w)) stTree 1 0 (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take Nat.zero w))).inputPos = Nat.zero + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take Nat.zero w)) = [] u 2 + runCost (List.take Nat.zero w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) All goals completed! 🐙 w:List Bool (n : ), (n w.length let cost := 2 + runCost (List.take n w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take n w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = n + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)) n.succ w.length let cost := 2 + runCost (List.take n.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take n.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = n.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthlet cost := 2 + runCost (List.take t.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)let cost := 2 + runCost (List.take t.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthlet cost := 2 + runCost (List.take t.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(account (List.take (t + 1) w)).forks.size (w.length + 2).size (account (List.take (t + 1) w)).leaves.size (w.length + 2).sizelet cost := 2 + runCost (List.take t.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizelet cost := 2 + runCost (List.take t.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))let cost := 2 + runCost (List.take t.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hstep:have cost := macroCost (account (List.take t w)) w[t]; have next := accountStep (account (List.take t w)) w[t]; Represents (w.length + 2).size (configs cfg cost) (modeState next.mode) next.forks next.leaves (configs cfg cost).inputPos = t + 2 machine.outputString cfg cost = []let cost := 2 + runCost (List.take t.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hstep:have cost := macroCost (account (List.take t w)) w[t]; have next := accountStep (account (List.take t w)) w[t]; Represents (w.length + 2).size (configs cfg cost) (modeState next.mode) next.forks next.leaves (configs cfg cost).inputPos = t + 2 machine.outputString cfg cost = []hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)let cost := 2 + runCost (List.take t.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []let cost := 2 + runCost (List.take t.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]let cost := 2 + runCost (List.take t.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t])let cost := 2 + runCost (List.take t.succ w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t.succ w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t])Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t.succ w))) (modeState (account (List.take t.succ w)).mode) (account (List.take t.succ w)).forks (account (List.take t.succ w)).leaves (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t.succ w))).inputPos = t.succ + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t.succ w)) = [] u 2 + runCost (List.take t.succ w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t])Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t.succ w))) (modeState (account (List.take t.succ w)).mode) (account (List.take t.succ w)).forks (account (List.take t.succ w)).leavesw:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t])(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t.succ w))).inputPos = t.succ + 1w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t])machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t.succ w)) = []w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t]) u 2 + runCost (List.take t.succ w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t])Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t.succ w))) (modeState (account (List.take t.succ w)).mode) (account (List.take t.succ w)).forks (account (List.take t.succ w)).leaves w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t])Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaves All goals completed! 🐙 w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t])(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t.succ w))).inputPos = t.succ + 1 w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t])(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t.succ + 1 All goals completed! 🐙 w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t])machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t.succ w)) = [] w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t])[] ++ [] = [] All goals completed! 🐙 w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t]) u 2 + runCost (List.take t.succ w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih:t w.length let cost := 2 + runCost (List.take t w); let now := configs (initCfg (List.map (⇑boolEmb) w)) cost; let s := account (List.take t w); Represents (w.length + 2).size now (modeState s.mode) s.forks s.leaves now.inputPos = t + 1 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhr:Represents (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))) (modeState (account (List.take t w)).mode) (account (List.take t w)).forks (account (List.take t w)).leaveshp:(configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))).inputPos = t + 1ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w)) = []hh: u 2 + runCost (List.take t w), HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u)hlt:t < w.lengthhs:(accountStep (account (List.take t w)) w[t]).forks.size (w.length + 2).size (accountStep (account (List.take t w)) w[t]).leaves.size (w.length + 2).sizecfg:Cfg 3 (Fin 4) (Fin 10) (List.map (⇑boolEmb) w) := configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take t w))hbound: u macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs cfg u)hr':Represents (w.length + 2).size (configs cfg (macroCost (account (List.take t w)) w[t])) (modeState (accountStep (account (List.take t w)) w[t]).mode) (accountStep (account (List.take t w)) w[t]).forks (accountStep (account (List.take t w)) w[t]).leaveshp':(configs cfg (macroCost (account (List.take t w)) w[t])).inputPos = t + 2ho':machine.outputString cfg (macroCost (account (List.take t w)) w[t]) = []he:2 + runCost (List.take (t + 1) w) = 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t]hc:configs (initCfg (List.map (⇑boolEmb) w)) (2 + runCost (List.take (t + 1) w)) = configs cfg (macroCost (account (List.take t w)) w[t]) u 2 + runCost (List.take t w) + macroCost (account (List.take t w)) w[t], HeadBound (w.length + 2).size (configs (initCfg (List.map (⇑boolEmb) w)) u) All goals completed! 🐙
end Geb.BitTree.BinaryMachine