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.Elias.MachineBit public import Geb.Prototypes.Computability.BitTree.Elias.MachineAccounting public import Geb.Prototypes.Computability.BitTree.Elias.MachineEnd
set_option doc.verso true

Whole-input execution of the Elias recognizer

Each complete input transition realizes one step of the pure scanner account. Composing those transitions bounds all intermediate head positions, including the counter sweeps between successive input bits.

Main statements

  • configs_account realizes every input prefix and bounds its visited space.

Tags

Elias delta code, Turing machine, execution, complexity

@[expose] public sectionnamespace Geb.BitTree.Elias.Machineopen Turing MultiTapeTM

Every prefix realizes its account at the exact accumulated transition cost.

theorem configs_account (w : List Bool) : t, (ht : t w.length) let cost := 1 + runCost (w.take t) let a := account (w.take t) machine.configs (machine.initCfg (w.map boolEmb)) cost = modelCfg (w.map boolEmb) t + 1, w:List Boolt:ht:t w.lengthcost: := 1 + runCost (List.take t w)a:Account := account (List.take t w)t + 1 < (List.map (⇑boolEmb) w).length + 2 w:List Boolt:ht:t w.lengthcost: := 1 + runCost (List.take t w)a:Account := account (List.take t w)t + 1 < w.length + 2; All goals completed! 🐙 a.1 a.2.1 a.2.2 machine.outputString (machine.initCfg (w.map boolEmb)) cost = [] u cost, HeadBound (w.length + 1) (machine.configs (machine.initCfg (w.map boolEmb)) u) := w:List Bool (t : ) (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Bool (ht : Nat.zero w.length), let cost := 1 + runCost (List.take Nat.zero w); let a := account (List.take Nat.zero w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) Nat.zero + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)w:List Bool (n : ), (∀ (ht : n w.length), let cost := 1 + runCost (List.take n w); let a := account (List.take n w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) n + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)) (ht : n.succ w.length), let cost := 1 + runCost (List.take n.succ w); let a := account (List.take n.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) n.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Bool (ht : Nat.zero w.length), let cost := 1 + runCost (List.take Nat.zero w); let a := account (List.take Nat.zero w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) Nat.zero + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolht:Nat.zero w.lengthlet cost := 1 + runCost (List.take Nat.zero w); let a := account (List.take Nat.zero w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) Nat.zero + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolht:Nat.zero w.lengthconfigs (initCfg (List.map (⇑boolEmb) w)) 1 = modelCfg (List.map (⇑boolEmb) w) Nat.zero + 1, (account (List.take Nat.zero w)).1 (account (List.take Nat.zero w)).2.1 (account (List.take Nat.zero w)).2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take Nat.zero w)) = [] u 1 + runCost (List.take Nat.zero w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) refine ?_, outputString_start _, headBound_start _ _ (w:List Boolht:Nat.zero w.length1 w.length + 1 All goals completed! 🐙) w:List Boolht:Nat.zero w.lengthmodelCfg (List.map (⇑boolEmb) w) 1 (Scanner.Mode.tree, 1) [] [] = modelCfg (List.map (⇑boolEmb) w) Nat.zero + 1, (account (List.take Nat.zero w)).1 (account (List.take Nat.zero w)).2.1 (account (List.take Nat.zero w)).2.2 All goals completed! 🐙 w:List Bool (n : ), (∀ (ht : n w.length), let cost := 1 + runCost (List.take n w); let a := account (List.take n w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) n + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)) (ht : n.succ w.length), let cost := 1 + runCost (List.take n.succ w); let a := account (List.take n.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) n.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthlet cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthlet cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)let cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)let cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, let cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])let cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []let cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1let cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthlet cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthlet cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = tlet cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)let cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]let cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, let cost := 1 + runCost (List.take t.succ w); let a := account (List.take t.succ w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t.succ w)) = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, (account (List.take t.succ w)).1 (account (List.take t.succ w)).2.1 (account (List.take t.succ w)).2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t.succ w)) = [] u 1 + runCost (List.take t.succ w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t.succ w)) = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, (account (List.take t.succ w)).1 (account (List.take t.succ w)).2.1 (account (List.take t.succ w)).2.2w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t.succ w)) = []w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, u 1 + runCost (List.take t.succ w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t.succ w)) = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, (account (List.take t.succ w)).1 (account (List.take t.succ w)).2.1 (account (List.take t.succ w)).2.2 w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, configs (modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2) (macroCost a w[t]) = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, (account (List.take t.succ w)).1 (account (List.take t.succ w)).2.1 (account (List.take t.succ w)).2.2 w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, (account (List.take t.succ w)).1 (account (List.take t.succ w)).2.1 (account (List.take t.succ w)).2.2 w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, modelCfg (List.map (⇑boolEmb) w) t + 1 + 1, (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2 = modelCfg (List.map (⇑boolEmb) w) t.succ + 1, (accountStep (account (List.take t w)) w[t]).1 (accountStep (account (List.take t w)) w[t]).2.1 (accountStep (account (List.take t w)) w[t]).2.2 All goals completed! 🐙 w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t.succ w)) = [] w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, [] ++ machine.outputString (modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2) (macroCost a w[t]) = [] w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, [] ++ machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = [] w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, [] ++ [] = [] All goals completed! 🐙 w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, u 1 + runCost (List.take t.succ w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, u 1 + runCost (List.take t w) + macroCost a w[t], HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, t_1 macroCost a w[t], HeadBound (w.length + 1) (configs (configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w))) t_1) w:List Boolt:ih: (ht : t w.length), let cost := 1 + runCost (List.take t w); let a := account (List.take t w); configs (initCfg (List.map (⇑boolEmb) w)) cost = modelCfg (List.map (⇑boolEmb) w) t + 1, a.1 a.2.1 a.2.2 machine.outputString (initCfg (List.map (⇑boolEmb) w)) cost = [] u cost, HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)ht:t.succ w.lengthhlt:t < w.lengthhc:configs (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2ho:machine.outputString (initCfg (List.map (⇑boolEmb) w)) (1 + runCost (List.take t w)) = []hh: u 1 + runCost (List.take t w), HeadBound (w.length + 1) (configs (initCfg (List.map (⇑boolEmb) w)) u)a:Account := account (List.take t w)pos:Fin ((List.map (⇑boolEmb) w).length + 2) := t + 1, hin:(modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2).inputSymbol = some (boolEmb w[t])hs:configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = modelCfg (List.map (⇑boolEmb) w) (moveInputPos pos 1) (Scanner.step a.1 w[t]) (nextWords a.1.1 a.2.1 a.2.2 w[t]).1 (nextWords a.1.1 a.2.1 a.2.2 w[t]).2hout:machine.outputString (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) (bitCost a.1.1 a.2.1 a.2.2 w[t]) = []hp:(account (List.take t w)).1.2 (List.take t w).length + 1hz:zeroCount (account (List.take t w)).1.1 (List.take t w).lengthhb:(account (List.take t w)).2.1.length (List.take t w).lengthhd:(account (List.take t w)).2.2.length (List.take t w).lengthhlen:(List.take t w).length = thbound: t_1 bitCost a.1.1 a.2.1 a.2.2 w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) pos a.1 a.2.1 a.2.2) t_1)he:1 + runCost (List.take (t + 1) w) = 1 + runCost (List.take t w) + macroCost a w[t]hpos:moveInputPos pos 1 = t + 1 + 1, t_1 macroCost a w[t], HeadBound (w.length + 1) (configs (modelCfg (List.map (⇑boolEmb) w) t + 1, (account (List.take t w)).1 (account (List.take t w)).2.1 (account (List.take t w)).2.2) t_1) All goals completed! 🐙
end Geb.BitTree.Elias.Machine