9. Push Down Automata
9.1. Writing PDAs
Find PDAs that accept each of the languages below, both by empty stack and by final state. Identify which approach feels more suitable for each language.
9.1.1. $ L = \{\: w \in \{A,B\}^* \ | \:w \text{ is a palindrome}\} $.
9.1.2. $ L = \{ A^{m} B^{m+n} C^{n} \ | \: n, m \geq 0 \} $
9.1.3. $ L = \{w \in \{a, b\}^* | \#_a(w) = \#_b(w) \} $
9.1.4. $ L = \{w \in \{a, b\}^* | \#_a(w) \neq \#_b(w) \} $
9.1.5. $ L = \{a^ib^jc^k | i = j \lor j = k \} $
9.2. Equivalence of the definitions
9.2.1. Prove that PDAs that accept by empty stack and PDAs that accept by final state are equivalent. More concretely:
- starting from a PDA $ A$ which accepts by empty stack, create a PDA $ A'$ which accepts by final state, such that $ L(A) = L(A')$ .
- perform the same task - vice-versa.
9.2.2. Prove that the language $ L(A)$ where $ A$ is a PDA which uses only a fixed number of $ k$ stack cells, is regular.