Nested stack automaton
{{Bots|deny=AWB}}
File:Pushdown-overview.svg, but has less restrictions for using them.]]
In automata theory, a nested stack automaton is a finite automaton that can make use of a stack containing data which can be additional stacks.{{cite journal |last1=Aho |first1=Alfred V. |s2cid=685569 |authorlink1=Alfred Aho |title=Nested Stack Automata |journal=Journal of the ACM |date=July 1969 |volume=16 |issue=3 |pages=383–406 |doi=10.1145/321526.321529 |doi-access=free }}
Like a stack automaton, a nested stack automaton may step up or down in the stack, and read the current symbol; in addition, it may at any place create a new stack, operate on that one, eventually destroy it, and continue operating on the old stack. This way, stacks can be nested recursively to an arbitrary depth; however, the automaton always operates on the innermost stack only.
A nested stack automaton is capable of recognizing an indexed language,{{cite book | last = Partee | author-link = Barbara Partee | first = Barbara |author2=Alice ter Meulen |author2-link=Alice ter Meulen|author3=Robert E. Wall | title = Mathematical Methods in Linguistics | url = https://archive.org/details/mathematicalmeth00part_211| url-access = limited| year = 1990 | publisher = Kluwer Academic Publishers | pages = [https://archive.org/details/mathematicalmeth00part_211/page/n556 536]–542 | isbn = 978-90-277-2245-4 }} and in fact the class of indexed languages is exactly the class of languages accepted by one-way nondeterministic nested stack automata.{{cite book| author=John E. Hopcroft, Jeffrey D. Ullman| title=Introduction to Automata Theory, Languages, and Computation| year=1979| publisher=Addison-Wesley| isbn=0-201-02988-X| url-access=registration| url=https://archive.org/details/introductiontoau00hopc}} Here:p.390
Nested stack automata should not be confused with embedded pushdown automata, which have less computational power.{{citation needed|reason=The claim is currently supported only by the order in which both notions appear in the 'Automata theory: formal languages and formal grammars' overview table below.|date=February 2014}}
Formal definition
=Automaton=
A (nondeterministic two-way) nested stack automaton is a tuple {{angbr|Q,Σ,Γ,δ,q0,Z0,F,[,],]}} where
- Q, Σ, and Γ is a nonempty finite set of states, input symbols, and stack symbols, respectively,
- [, ], and ] are distinct special symbols not contained in Σ ∪ Γ,
- [ is used as left endmarker for both the input string and a (sub)stack string,
- ] is used as right endmarker for these strings,
- ] is used as the final endmarker of the string denoting the whole stack.Aho originally used "$", "¢", and "#" instead of "[", "]", and "]", respectively. See Aho (1969), p.385 top.
- An extended input alphabet is defined by Σ' = Σ ∪ {[,]}, an extended stack alphabet by Γ' = Γ ∪ {]}, and the set of input move directions by D = {-1,0,+1}.
- δ, the finite control, is a mapping from Q × Σ' × (Γ' ∪ [Γ' ∪ {], []}) into finite subsets of Q × D × ([Γ* ∪ D), such that δ mapsJuxataposition denotes string (set) concatenation, and has a higher binding priority than set union ∪. For example, [Γ' denotes the set of all length-2 strings starting with "[" and ending with a symbol from Γ'.
Q × Σ' × [Γ | into subsets of Q × D × [Γ* | (pushdown mode), | |
Q × Σ' × Γ' | into subsets of Q × D × D | (reading mode), | |
Q × Σ' × [Γ' | into subsets of Q × D × {+1} | (reading mode), | |
Q × Σ' × {]} | into subsets of Q × D × {-1} | (reading mode), | |
Q × Σ' × (Γ' ∪ [Γ') | into subsets of Q × D × [Γ*] | (stack creation mode), and | |
Q × Σ' × {[]} | into subsets of Q × D × {ε}, | (stack destruction mode), |
:Informally, the top symbol of a (sub)stack together with its preceding left endmarker "[" is viewed as a single symbol;Aho (1969), p.385 top then δ reads
:* the current state,
:* the current input symbol, and
:* the current stack symbol,
: and outputs
:* the next state,
:* the direction in which to move on the input, and
:* the direction in which to move on the stack, or the string of symbols to replace the topmost stack symbol.
- q0 ∈ Q is the initial state,
- Z0 ∈ Γ is the initial stack symbol,
- F ⊆ Q is the set of final states.
=Configuration=
A configuration, or instantaneous description of such an automaton consists in a triple
{{angbr|
q,
[a1a2...ai...an-1],
[Z1X2...Xj...Xm-1]
}},
where
- q ∈ Q is the current state,
- [a1a2...ai...an-1] is the input string; for convenience, a0 = [ and an = ] is definedAho originally used the left and right stack marker, viz. $ and ¢, as right and left input marker, respectively. The current position in the input, viz. i with 0 ≤ i ≤ n, is marked by underlining the respective symbol.
- [Z1X2...Xj...Xm-1] is the stack, including substacks; for convenience, X1 = [Z1 The top symbol of a (sub)stack together with its preceding left endmarker "[" is viewed as a single symbol. and Xm = ] is defined. The current position in the stack, viz. j with 1 ≤ j ≤ m, is marked by underlining the respective symbol.
=Example=
An example run (input string not shown):
class=wikitable | ||||||||||
Action
! Step ! colspan=11 | Stack | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| 1:
| style="font-family:monospace"|[a | style="font-family:monospace"| b | style="font-family:monospace"| [k | style="font-family:monospace"| ] | style="font-family:monospace"| [p | style="font-family:monospace"| ] | style="font-family:monospace"| c | style="font-family:monospace"| ]
| colspan=3 | | |||
create substack
| 2: | style="font-family:monospace"|{{color|#808080|[a}} | style="font-family:monospace"| {{color|#808080|b}} | style="font-family:monospace"| {{color|#808080|[k}} | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| [p | style="font-family:monospace"| [r | style="font-family:monospace"| s | style="font-family:monospace"| ] | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| {{color|#808080|c}} | style="font-family:monospace"| {{color|#808080|]}} |
pop
| 3: | style="font-family:monospace"|{{color|#808080|[a}} | style="font-family:monospace"| {{color|#808080|b}} | style="font-family:monospace"| {{color|#808080|[k}} | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| {{color|#808080|[p}} | style="font-family:monospace"| [s | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| {{color|#808080|c}} | style="font-family:monospace"| {{color|#808080|]}}
| | |
pop
| 4: | style="font-family:monospace"|{{color|#808080|[a}} | style="font-family:monospace"| {{color|#808080|b}} | style="font-family:monospace"| {{color|#808080|[k}} | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| {{color|#808080|[p}} | style="font-family:monospace"| [] | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| {{color|#808080|c}} | style="font-family:monospace"| {{color|#808080|]}}
| colspan=2 | | ||
destroy substack
| 5: | style="font-family:monospace"|{{color|#808080|[a}} | style="font-family:monospace"| {{color|#808080|b}} | style="font-family:monospace"| {{color|#808080|[k}} | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| {{color|#808080|[p}} | style="font-family:monospace"| ] | style="font-family:monospace"| {{color|#808080|c}} | style="font-family:monospace"| {{color|#808080|]}}
| colspan=4 | | |||
move down
| 6: | style="font-family:monospace"|{{color|#808080|[a}} | style="font-family:monospace"| {{color|#808080|b}} | style="font-family:monospace"| {{color|#808080|[k}} | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| {{color|#808080|[p}} | style="font-family:monospace"| ] | style="font-family:monospace"| c | style="font-family:monospace"| {{color|#808080|]}}
| colspan=4 | | |||
move up
| 7: | style="font-family:monospace"|{{color|#808080|[a}} | style="font-family:monospace"| {{color|#808080|b}} | style="font-family:monospace"| {{color|#808080|[k}} | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| {{color|#808080|[p}} | style="font-family:monospace"| ] | style="font-family:monospace"| c | style="font-family:monospace"| {{color|#808080|]}}
| colspan=4 | | |||
move up
| 8: | style="font-family:monospace"|{{color|#808080|[a}} | style="font-family:monospace"| {{color|#808080|b}} | style="font-family:monospace"| {{color|#808080|[k}} | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| [p | style="font-family:monospace"| ] | style="font-family:monospace"| {{color|#808080|c}} | style="font-family:monospace"| {{color|#808080|]}}
| colspan=4 | | |||
push
| 9: | style="font-family:monospace"|{{color|#808080|[a}} | style="font-family:monospace"| {{color|#808080|b}} | style="font-family:monospace"| {{color|#808080|[k}} | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| [n | style="font-family:monospace"| o | style="font-family:monospace"| p | style="font-family:monospace"| {{color|#808080|]}} | style="font-family:monospace"| {{color|#808080|c}} | style="font-family:monospace"| {{color|#808080|]}}
| colspan=2 | |
Properties
When automata are allowed to re-read their input ("two-way automata"), nested stacks do not result in additional language recognition capabilities, compared to plain stacks.{{cite journal |last1=Beeri |first1=C. |title=Two-way nested stack automata are equivalent to two-way stack automata |journal=Journal of Computer and System Sciences |date=June 1975 |volume=10 |issue=3 |pages=317–339 |doi=10.1016/s0022-0000(75)80004-3 |doi-access=free }}
Gilman and Shapiro used nested stack automata to solve the word problem in virtually free groups, similarly to the Muller–Schupp theorem.{{cite tech report |last1=Shapiro |first1=Robert Gilman Michael |title=On groups whose word problem is solved by a nested stack automaton |date=4 December 1998 |arxiv=math/9812028 |s2cid=12716492 |citeseerx=10.1.1.236.2029 }}
Notes
{{Reflist|group=note}}