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.MachineRead public import Geb.Prototypes.Computability.BitTree.Elias.MachineCounter public import Geb.Prototypes.Computability.BitTree.Elias.MachineNormalize
set_option doc.verso true

The empty-payload transition

The shortest delta header encodes length zero. Reading its terminating one initializes the width counter; two binary countdowns then reach zero and erase both fields before completing the leaf. The entire transition takes sixteen machine steps.

Main statements

  • configs_empty_leaf proves the exact result and cost of the empty-leaf transition.

  • configs_empty_leaf_headBound bounds every intermediate work-tape head.

Tags

Elias delta code, Turing machine, empty leaf, simulation

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

Decrementing the one-bit width field reaches the payload countdown with a zero width.

theorem configs_empty_width (input : List (Fin 3)) (pos : Fin (input.length + 2)) (pending : ) : machine.configs (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = scanCfg input pos (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = [] := input:List (Fin 3)pos:Fin (input.length + 2)pending:configs (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = scanCfg input pos (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) ([true].length + 1)) (2 * [true].length + 3) = counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false (Counter.decrement [true]) (afterDecrement false ((Counter.decrement [true]).any id)) ([true].length + 1) machine.outputString (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) ([true].length + 1)) (2 * [true].length + 3) = []configs (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = scanCfg input pos (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) 2) 5 = counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [false] (stDecrement true) 2 machine.outputString (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) ([true].length + 1)) (2 * [true].length + 3) = []configs (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = scanCfg input pos (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) 2) 5 = counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [false] (stDecrement true) 2 machine.outputString (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) ([true].length + 1)) (2 * [true].length + 3) = []hstart:counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) ([true].length + 1) = scanCfg input pos (stDecrement false) pending 0 [true] [true]configs (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = scanCfg input pos (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) 2) 5 = counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [false] (stDecrement true) 2 machine.outputString (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) ([true].length + 1)) (2 * [true].length + 3) = []hstart:counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) ([true].length + 1) = scanCfg input pos (stDecrement false) pending 0 [true] [true]hend:counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [false] (stDecrement true) ([false].length + 1) = scanCfg input pos (stDecrement true) pending 0 [false] [true]configs (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = scanCfg input pos (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) 2) 5 = counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [false] (stDecrement true) 2 machine.outputString (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) ([true].length + 1)) (2 * [true].length + 3) = []hstart:counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) 2 = scanCfg input pos (stDecrement false) pending 0 [true] [true]hend:counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [false] (stDecrement true) 2 = scanCfg input pos (stDecrement true) pending 0 [false] [true]configs (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = scanCfg input pos (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) 2) 5 = counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [false] (stDecrement true) 2 machine.outputString (counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) 2) 5 = []hstart:counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) 2 = scanCfg input pos (stDecrement false) pending 0 [true] [true]hend:counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [false] (stDecrement true) 2 = scanCfg input pos (stDecrement true) pending 0 [false] [true]configs (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = scanCfg input pos (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = scanCfg input pos (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = []hstart:counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [true] (stDecrement false) 2 = scanCfg input pos (stDecrement false) pending 0 [true] [true]hend:counterCfg (scanCfg input pos (stDecrement false) pending 0 [true] [true]) false [false] (stDecrement true) 2 = scanCfg input pos (stDecrement true) pending 0 [false] [true]configs (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = scanCfg input pos (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos (stDecrement false) pending 0 [true] [true]) 5 = [] All goals completed! 🐙

Decrementing the one-bit payload field reaches cleanup with both fields zero.

theorem configs_empty_payload (input : List (Fin 3)) (pos : Fin (input.length + 2)) (pending : ) : machine.configs (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = scanCfg input pos stClear pending 0 [false] [false] machine.outputString (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = [] := input:List (Fin 3)pos:Fin (input.length + 2)pending:configs (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = scanCfg input pos stClear pending 0 [false] [false] machine.outputString (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) ([true].length + 1)) (2 * [true].length + 3) = counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true (Counter.decrement [true]) (afterDecrement true ((Counter.decrement [true]).any id)) ([true].length + 1) machine.outputString (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) ([true].length + 1)) (2 * [true].length + 3) = []configs (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = scanCfg input pos stClear pending 0 [false] [false] machine.outputString (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) 2) 5 = counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [false] stClear 2 machine.outputString (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) ([true].length + 1)) (2 * [true].length + 3) = []configs (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = scanCfg input pos stClear pending 0 [false] [false] machine.outputString (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) 2) 5 = counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [false] stClear 2 machine.outputString (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) ([true].length + 1)) (2 * [true].length + 3) = []hstart:counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) ([true].length + 1) = scanCfg input pos (stDecrement true) pending 0 [false] [true]configs (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = scanCfg input pos stClear pending 0 [false] [false] machine.outputString (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) 2) 5 = counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [false] stClear 2 machine.outputString (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) ([true].length + 1)) (2 * [true].length + 3) = []hstart:counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) ([true].length + 1) = scanCfg input pos (stDecrement true) pending 0 [false] [true]hend:counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [false] stClear ([false].length + 1) = scanCfg input pos stClear pending 0 [false] [false]configs (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = scanCfg input pos stClear pending 0 [false] [false] machine.outputString (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) 2) 5 = counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [false] stClear 2 machine.outputString (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) ([true].length + 1)) (2 * [true].length + 3) = []hstart:counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) 2 = scanCfg input pos (stDecrement true) pending 0 [false] [true]hend:counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [false] stClear 2 = scanCfg input pos stClear pending 0 [false] [false]configs (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = scanCfg input pos stClear pending 0 [false] [false] machine.outputString (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) 2) 5 = counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [false] stClear 2 machine.outputString (counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) 2) 5 = []hstart:counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) 2 = scanCfg input pos (stDecrement true) pending 0 [false] [true]hend:counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [false] stClear 2 = scanCfg input pos stClear pending 0 [false] [false]configs (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = scanCfg input pos stClear pending 0 [false] [false] machine.outputString (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:h:configs (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = scanCfg input pos stClear pending 0 [false] [false] machine.outputString (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = []hstart:counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [true] (stDecrement true) 2 = scanCfg input pos (stDecrement true) pending 0 [false] [true]hend:counterCfg (scanCfg input pos (stDecrement true) pending 0 [false] [true]) true [false] stClear 2 = scanCfg input pos stClear pending 0 [false] [false]configs (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = scanCfg input pos stClear pending 0 [false] [false] machine.outputString (scanCfg input pos (stDecrement true) pending 0 [false] [true]) 5 = [] All goals completed! 🐙

Erasing the two zero fields completes an empty leaf in four transitions.

theorem configs_empty_clear (input : List (Fin 3)) (pos : Fin (input.length + 2)) (pending : ) (hp : 0 < pending) : machine.configs (scanCfg input pos stClear pending 0 [false] [false]) 4 = modelCfg input pos (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stClear pending 0 [false] [false]) 4 = [] := input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendingconfigs (scanCfg input pos stClear pending 0 [false] [false]) 4 = modelCfg input pos (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stClear pending 0 [false] [false]) 4 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendingh:configs (clearingCfg (scanCfg input pos stClear pending 0 [false] [false]) [false] [false] 2 2) (max 2 2 + 2) = completedCfg (scanCfg input pos stClear pending 0 [false] [false]) machine.outputString (clearingCfg (scanCfg input pos stClear pending 0 [false] [false]) [false] [false] 2 2) (max 2 2 + 2) = []configs (scanCfg input pos stClear pending 0 [false] [false]) 4 = modelCfg input pos (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stClear pending 0 [false] [false]) 4 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendingh:configs (clearingCfg (scanCfg input pos stClear pending 0 [false] [false]) [false] [false] 2 2) (max 2 2 + 2) = completedCfg (scanCfg input pos stClear pending 0 [false] [false]) machine.outputString (clearingCfg (scanCfg input pos stClear pending 0 [false] [false]) [false] [false] 2 2) (max 2 2 + 2) = []hn:clearingCfg (scanCfg input pos stClear pending 0 [false] [false]) [false] [false] ([false].length + 1) ([false].length + 1) = scanCfg input pos stClear pending 0 [false] [false]configs (scanCfg input pos stClear pending 0 [false] [false]) 4 = modelCfg input pos (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stClear pending 0 [false] [false]) 4 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendingh:configs (clearingCfg (scanCfg input pos stClear pending 0 [false] [false]) [false] [false] 2 2) (max 2 2 + 2) = completedCfg (scanCfg input pos stClear pending 0 [false] [false]) machine.outputString (clearingCfg (scanCfg input pos stClear pending 0 [false] [false]) [false] [false] 2 2) (max 2 2 + 2) = []hn:clearingCfg (scanCfg input pos stClear pending 0 [false] [false]) [false] [false] 2 2 = scanCfg input pos stClear pending 0 [false] [false]configs (scanCfg input pos stClear pending 0 [false] [false]) 4 = modelCfg input pos (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stClear pending 0 [false] [false]) 4 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendingh:configs (scanCfg input pos stClear pending 0 [false] [false]) (max 2 2 + 2) = modelCfg input pos (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stClear pending 0 [false] [false]) (max 2 2 + 2) = []hn:clearingCfg (scanCfg input pos stClear pending 0 [false] [false]) [false] [false] 2 2 = scanCfg input pos stClear pending 0 [false] [false]configs (scanCfg input pos stClear pending 0 [false] [false]) 4 = modelCfg input pos (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stClear pending 0 [false] [false]) 4 = [] All goals completed! 🐙

Reading the shortest delta header finishes its empty leaf in sixteen silent steps.

theorem configs_empty_leaf (input : List (Fin 3)) (pos : Fin (input.length + 2)) (pending : ) (hp : 0 < pending) (hin : (scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)) : machine.configs (scanCfg input pos stZeros pending 0 [] [true]) 16 = modelCfg input (moveInputPos pos 1) (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 16 = [] := input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendinghin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)configs (scanCfg input pos stZeros pending 0 [] [true]) 16 = modelCfg input (moveInputPos pos 1) (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 16 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendinghin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = if true = true then scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true] else scanCfg input (moveInputPos pos 1) stZeros pending (0 + 1) [] [true]configs (scanCfg input pos stZeros pending 0 [] [true]) 16 = modelCfg input (moveInputPos pos 1) (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 16 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendinghin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]configs (scanCfg input pos stZeros pending 0 [] [true]) 16 = modelCfg input (moveInputPos pos 1) (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 16 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendinghin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hread:configs (scanCfg input pos stZeros pending 0 [] [true]) 1 = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 1 = []configs (scanCfg input pos stZeros pending 0 [] [true]) 16 = modelCfg input (moveInputPos pos 1) (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 16 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendinghin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hread:configs (scanCfg input pos stZeros pending 0 [] [true]) 1 = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 1 = []hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (if 0 = 0 then stDecrement false else stSizeBit) pending 0 [true] [true]configs (scanCfg input pos stZeros pending 0 [] [true]) 16 = modelCfg input (moveInputPos pos 1) (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 16 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendinghin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hread:configs (scanCfg input pos stZeros pending 0 [] [true]) 1 = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 1 = []hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]configs (scanCfg input pos stZeros pending 0 [] [true]) 16 = modelCfg input (moveInputPos pos 1) (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 16 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendinghin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hread:configs (scanCfg input pos stZeros pending 0 [] [true]) 1 = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 1 = []hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]hcheck:configs (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) 1 = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true] machine.outputString (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) 1 = []configs (scanCfg input pos stZeros pending 0 [] [true]) 16 = modelCfg input (moveInputPos pos 1) (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 16 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendinghin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hread:configs (scanCfg input pos stZeros pending 0 [] [true]) 1 = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 1 = []hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]hcheck:configs (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) 1 = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true] machine.outputString (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) 1 = []h2:configs (scanCfg input pos stZeros pending 0 [] [true]) (1 + 1) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) (1 + 1) = []configs (scanCfg input pos stZeros pending 0 [] [true]) 16 = modelCfg input (moveInputPos pos 1) (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 16 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendinghin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hread:configs (scanCfg input pos stZeros pending 0 [] [true]) 1 = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 1 = []hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]hcheck:configs (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) 1 = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true] machine.outputString (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) 1 = []h2:configs (scanCfg input pos stZeros pending 0 [] [true]) (1 + 1) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) (1 + 1) = []h7:configs (scanCfg input pos stZeros pending 0 [] [true]) (2 + 5) = scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) (2 + 5) = []configs (scanCfg input pos stZeros pending 0 [] [true]) 16 = modelCfg input (moveInputPos pos 1) (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 16 = [] input:List (Fin 3)pos:Fin (input.length + 2)pending:hp:0 < pendinghin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hread:configs (scanCfg input pos stZeros pending 0 [] [true]) 1 = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 1 = []hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]hcheck:configs (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) 1 = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true] machine.outputString (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) 1 = []h2:configs (scanCfg input pos stZeros pending 0 [] [true]) (1 + 1) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) (1 + 1) = []h7:configs (scanCfg input pos stZeros pending 0 [] [true]) (2 + 5) = scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) (2 + 5) = []h12:configs (scanCfg input pos stZeros pending 0 [] [true]) (7 + 5) = scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) (7 + 5) = []configs (scanCfg input pos stZeros pending 0 [] [true]) 16 = modelCfg input (moveInputPos pos 1) (Scanner.finish pending) [] [] machine.outputString (scanCfg input pos stZeros pending 0 [] [true]) 16 = [] All goals completed! 🐙

Every prefix of the empty-leaf transition stays within the initial pending count and two binary-field cells.

theorem configs_empty_leaf_headBound (input : List (Fin 3)) (pos : Fin (input.length + 2)) (pending width : ) (hp : 0 < pending) (hpw : pending width) (hw : 2 width) (hin : (scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)) (t : ) (ht : t 16) : HeadBound width (machine.configs (scanCfg input pos stZeros pending 0 [] [true]) t) := input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16HeadBound width (configs (scanCfg input pos stZeros pending 0 [] [true]) t) input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)HeadBound width (configs (scanCfg input pos stZeros pending 0 [] [true]) t) input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)HeadBound width (configs (scanCfg input pos stZeros pending 0 [] [true]) t) input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)HeadBound width (configs (scanCfg input pos stZeros pending 0 [] [true]) t) input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)HeadBound width (configs (scanCfg input pos stZeros pending 0 [] [true]) t) input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)HeadBound width (configs (scanCfg input pos stZeros pending 0 [] [true]) t) input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = if true = true then scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true] else scanCfg input (moveInputPos pos 1) stZeros pending (0 + 1) [] [true]HeadBound width (configs (scanCfg input pos stZeros pending 0 [] [true]) t) input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]HeadBound width (configs (scanCfg input pos stZeros pending 0 [] [true]) t) input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (if 0 = 0 then stDecrement false else stSizeBit) pending 0 [true] [true]HeadBound width (configs (scanCfg input pos stZeros pending 0 [] [true]) t) input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]HeadBound width (configs (scanCfg input pos stZeros pending 0 [] [true]) t) apply headBound_succ _ 15 width (scanCfg_headBound _ _ _ _ _ _ _ _ hpw (input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]0 width All goals completed! 🐙) (input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true][].length + 1 width input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]1 width; All goals completed! 🐙) (input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true][true].length + 1 width All goals completed! 🐙)) ?_ t ht input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true] t 15, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) t) input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]r:hr:r 15HeadBound width (configs (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) r) apply headBound_succ _ 14 width (hb _ _ _ (input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]r:hr:r 15[true].length 1 All goals completed! 🐙) (input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]r:hr:r 15[true].length 1 All goals completed! 🐙)) ?_ r hr input:List (Fin 3)pos:Fin (input.length + 2)pending:width:hp:0 < pendinghpw:pending widthhw:2 widthhin:(scanCfg input pos stZeros pending 0 [] [true]).inputSymbol = some (boolEmb true)t:ht:t 16hb: (q : Control) (bs cs : List Bool), bs.length 1 cs.length 1 HeadBound width (scanCfg input (moveInputPos pos 1) q pending 0 bs cs)hwdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hpdec: r 5, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement true) pending 0 [false] [true]) r)hclear: r 4, HeadBound width (configs (scanCfg input (moveInputPos pos 1) stClear pending 0 [false] [false]) r)htail: r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r)hs:step (scanCfg input pos stZeros pending 0 [] [true]) = scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]hc:step (scanCfg input (moveInputPos pos 1) stSizeCheck pending 0 [true] [true]) = scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]r:hr:r 15 r 14, HeadBound width (configs (scanCfg input (moveInputPos pos 1) (stDecrement false) pending 0 [true] [true]) r) All goals completed! 🐙
end Geb.BitTree.Elias.Machine