Counted PDA runs retaining a stack frame #
PDA.RetainedFrameRun P frame n c d records a selected counted run whose
steps all occur strictly above the unchanged stack suffix frame. Each step
stores its frame-free source and target; the indexed configurations are the
corresponding configurations with frame appended. This is stronger than
bare reachability in a nondeterministic PDA and permits the retained frame to
be replaced uniformly.
A counted run together with a selected stack suffix which no step examines or changes.
- refl {Q T S : Type} [Fintype Q] [Fintype T] [Fintype S] {P : PDA Q T S} {frame : List S} (q : Q) (input : List T) (upper : List S) : P.RetainedFrameRun frame 0 { state := q, input := input, stack := upper ++ frame } { state := q, input := input, stack := upper ++ frame }
- step {Q T S : Type} [Fintype Q] [Fintype T] [Fintype S] {P : PDA Q T S} {frame : List S} {n : ℕ} {start : P.conf} {q p : Q} {input output : List T} {upper upper' : List S} (run : P.RetainedFrameRun frame n start { state := q, input := input, stack := upper ++ frame }) (last : Reaches₁ { state := q, input := input, stack := upper } { state := p, input := output, stack := upper' }) : P.RetainedFrameRun frame (n + 1) start { state := p, input := output, stack := upper' ++ frame }
Instances For
Append an untouched input suffix uniformly to a retained-frame run.
Any counted run can be lifted under an arbitrary retained stack frame.
Replace the untouched suffix of a retained-frame run.
The final configuration of a retained-frame run exposes its retained suffix.
A retained-frame run starting with no stack above its retained suffix is necessarily reflexive: a PDA has no transition from the corresponding stripped empty-stack configuration.
Split a retained-frame run at an exact step count. The intermediate configuration exposes the same retained suffix.