A statement preserves its symbol support
ProvedPvsNP.stepAux_supportedIf all input stack symbols and all symbols pushable by a statement lie in S, its resulting stack symbols lie in S.
Status: Local proof checked; unpublished draft statement.
import Definitions.Def_PvsNPSupport
namespace PvsNP
theorem stepAux_supported (M : Turing.FinTM2) (S : Set (Sigma M.Γ))
(q : M.Stmt) (hq : stmtPushSymbols M q ⊆ S) (v : M.σ)
(stk : ∀ k, List (M.Γ k)) (hs : SupportedStacks M S stk) :
SupportedStacks M S (Turing.TM2.stepAux q v stk).stk := by sorry
end PvsNPRead-back
What the Lean code literally says, in plain math · gpt-6-astra
For every machine , set of tagged symbols, statement , hypothesis , control state , stack family , and hypothesis , execute from and these stacks once as described here, and let be the stacks in its returned configuration. The conclusion is . The set need not be finite, no reachability hypothesis is required, and the statement proves preservation for this one statement execution, including a returned jump or halt. Here is a TM2 machine with a finite type of stack indices and decidable equality on , designated input and output indices , stack-symbol types , a finite type of program labels with a main label, a finite type of control states with an initial state, a finite input alphabet , and a statement for each label . No finiteness of for other is assumed. A tagged symbol has and ; tags from different stacks remain distinct. For a statement , its set of syntactically possible pushed tagged symbols is recursively defined: a push onto with symbol function and continuation contributes ; a peek, pop, or control-state load contributes only its continuation’s set; a conditional branch contributes the union of both branch sets; a jump to a program label and a halt contribute the empty set. Thus both branch bodies and all control states are counted, regardless of reachability, while a jump does not recursively inspect its target. Executing one statement pushes the symbol selected by the current state, peeks at or pops the current stack head (using an absent-head value for an empty stack and an empty tail when popping it), or changes the control state as specified, then executes the continuation; a branch executes its selected body, and jump/halt returns a configuration with a label/no label and unchanged stacks. A jump does not execute the next labeled statement within this same statement execution.