PushDown Automata What is a stack? • A stack is a Last In First Out data structure where I only have access to the last element inserted in the stack. • In order to access other elements I have to remove those that are on top one by one. Stack Stack Stack Stack Stack Stack Stack Stack What is a PDA? • A PDA is an enhanced finite automaton that also contains an infinite stack. • The transitions in a PDA are of the form a, x ⟶ y meaning that if you see an a in the input string and the stack contains the symbol x on top then you remove the x and add a y. • The stack gives us extra power to recognize non-regular languages. Transitions • Transitions of the form a, x ⟶ y require that the next input symbol should be a and the top stack symbol should be x. q a, x ⟶ y x w Stack q’ ...abb... Input q a, x ⟶ y q’ y w ...abb... Stack Input Transitions • Transitions of the form ε, x ⟶ y require that the top stack symbol is x. q ε, x ⟶ y x w Stack q’ ...abb... Input q ε, x ⟶ y q’ y w ...abb... Stack Input Transitions • Transitions of the form a, ε ⟶ y require that the next input symbol is a. q a, ε ⟶ y x w Stack q’ ...abb... Input q a, ε ⟶ y q’ y x w ...abb... Stack Input Transitions • Transitions of the form ε, ε ⟶ y can be followed without restrictions. q ε, ε ⟶ y x w Stack q’ ...abb... Input q ε, ε ⟶ y q’ y x w ...abb... Stack Input PDA Accept – Reject Status • The PDA accepts when there exists a computation path such that: – The computation path ends in an accept state – All the input is consumed – (no requirement for the stack) • The PDA rejects when all the paths: – Either end in a non-accepting state – Or are incomplete (meaning that at some point there is no possible transition under the current input and stack symbols) A PDA for {anbn : n ≥ 0} • We usually use the stack for counting. • For this language for example, you first insert all the as in the stack until you start seeing bs . • When you see the first b start removing as from the stack. • When you have consumed the whole string you check the stack: if it’s empty then this means that the number of as equals the number of bs. Is the stack empty? How can you check if the stack is empty? • What we usually do is to place a special symbol (for example a $) at the bottom of the stack. • Whenever we find the $ again we know that we reached the end of the stack. • In order to accept a string there is no need for the stack to be empty. Stack push and pop in PDA • a, ε ⟶ t when you see an a in the input push t on the stack • a, b ⟶ ε when you see an a in the input and b is on the top of the stack, pop b out. A PDA for {anbn : n ≥ 0} q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 Visualization of {anbn:n ≥ 0} aaabbb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 Visualization of {anbn:n ≥ 0} aaabbb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 $ Visualization of {anbn:n ≥ 0} aaabbb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 a $ Visualization of {anbn:n ≥ 0} aaabbb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 a a $ Visualization of {anbn:n ≥ 0} aaabbb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 a a a $ Visualization of {anbn:n ≥ 0} aaabbb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 a a $ Visualization of {anbn:n ≥ 0} aaabbb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 a $ Visualization of {anbn:n ≥ 0} aaabbb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 $ Visualization of {anbn:n ≥ 0} aaabbb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 Visualization of {anbn:n ≥ 0} aab q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 Visualization of {anbn:n ≥ 0} aab q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 $ Visualization of {anbn:n ≥ 0} aab q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 a $ Visualization of {anbn:n ≥ 0} aab q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 a a $ Visualization of {anbn:n ≥ 0} aab q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 a $ Visualization of {anbn:n ≥ 0} aab q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 a $ Visualization of {anbn:n ≥ 0} abb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 Visualization of {anbn:n ≥ 0} abb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 $ Visualization of {anbn:n ≥ 0} abb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 a $ Visualization of {anbn:n ≥ 0} abb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 $ Visualization of {anbn:n ≥ 0} abb q0 ε, ε ⟶ $ q1 b, a ⟶ ε q3 ε, $ ⟶ ε q2 $ PDA formally • A PDA is a sextuple (Q, Σ, Γ, δ, q0, F), where: – Q is the set of states – Σ is the input alphabet – Γ is the alphabet for the stack – δ is the transition function – q0 is the start state – F is the set of accepting states About Γ: The stack alphabet can contain any symbol you want. It can be completely disjoint from Σ. L() : proper opening and closing parenthesis ε, ε ⟶ $ q0 (, ε ⟶ * q1 ε, $ ⟶ ε ), * ⟶ ε Try it yourself • Create a PDA for the language: L= = {w : w contains an equal number of 0s and 1s} L= : equal number of 0s and 1s q0 ε, ε ⟶ $ q2 0, ε ⟶ * 1, * ⟶ ε q3 1, ε ⟶ * 0, * ⟶ ε q1 L= : equal number of 0s and 1s NPDA for this language ε, ε ⟶ $ q0 q1 ε, $ ⟶ ε 0, ε ⟶ 0 0, 1 ⟶ ε 1, ε ⟶ 1 1, 0 ⟶ ε PDA and Regular Languages • Regular languages can be recognized by PDA: – For every regular language there is an NFAε recognizing it. – Simply add ε⟶ε in every transition for the stack (i.e just don’t use it at all). • The languages recognized by PDA is a superset of regular languages. – As we saw the language L = {anbn : n≥0} is recognized by some PDA. – L is not regular. Non-Determinism • Non- determinism means that we can have more than one choice. • Non-Deterministic: q2 q1 q3 Non-Determinism • Non- determinism means that we can have more than one choice. • Non-Deterministic: q2 q1 q3 Non-Determinism • Non- determinism means that we can have more than one choice. • Non-Deterministic: 0, a ⟶ 0 0, a ⟶ 1 q1 q2 Non-Determinism • Non- determinism means that we can have more than one choice. • Non-Deterministic: q2 q1 q3 Non-Determinism • Non- determinism means that we can have more than one choices. • Non-Deterministic: q2 q1 q3 Non-Determinism • Non- determinism means that we can have more than one choices. • Deterministic: q2 q1 q3 Non-Determinism • Non- determinism means that we can have more than one choices. • Deterministic: q1 ε, ε ⟶ 0 q2 No other possible transitions Definition of DPDA (deterministic push down automata) δ : Q x Σε x Γε (Q x Γε) U {φ} A DPDA has exactly one legal move in every situation where its stack is non empty Given any state q, any letter a, any stack letter x Only one of the following is allowed to be non empty δ(q,a,x) δ(q,a, ε) δ(q, ε, x) δ(q, ε, ε) DPDA vs NPDA • Although non-deterministic and deterministic FA are equivalent this is not the case with PDA. Non-determinism helps us recognize more languages. • Intuition: LR = { wwR : w in {0,1}* } An NPDA for this language pushes the first half of the string in the stack and pops the second half. It has to guess where the middle of the string is. L#R = { w#wR : w in {0,1}* } q0 ε, ε ⟶ $ q1 0, ε ⟶ 0 1, ε ⟶ 1 #, ε ⟶ ε q3 ε, $ ⟶ ε q2 0, 0 ⟶ ε 1, 1 ⟶ ε LR = { wwR : w in {0,1}* } • Compare the previous DPDA with this NPDA q0 ε, ε ⟶ $ q1 0, ε ⟶ 0 1, ε ⟶ 1 ε, ε ⟶ ε q3 ε, $ ⟶ ε q2 0, 0 ⟶ ε 1, 1 ⟶ ε NPDA and CF languages • It can be shown that non-deterministic PDA are equivalent with context free grammars. • NPDA accept exactly the set of CF languages. • In order to prove that a language is CF you can – Construct a CF grammar that generates it – Construct a NPDA that recognizes it.