CSCI 3130: Formal languages and automata theory
Andrej Bogdanov
http://www.cse.cuhk.edu.hk/~andrejb/csc3130
The Chinese University of Hong Kong
Limitations of pushdown automata
Fall 2011
Non context-free languages
L1 = {anbnn ≥ 0}
L2 = {ss has same number of as and bs}
L3 = {anbncnn ≥ 0}
L4 = {ssRs  {ab}*}
L5 = {sss  {ab}*}
These are not regular
Are they context-free?
?
An attempt
Lets try to design a CFG or PDA
L3 = {anbncnn ≥ 0}
S → aBc | 
B → ??
read a / push x
read b / pop x
???
What would happen if...
Suppose we could construct some CFG for L3, e.g.
Lets do somelong derivations
 BC
 CS | b
 SB | a
. . .
  BC     CSC     aSC     aBCC     abCC     abaC     abaSB
     abaBCB     ababCB     ababaB
     ababab
Repetition in long derivations
If derivation is long enough, some variable mustappear twice on same path in parse tree
S
B
C
B
C
S
S
B
C
B
C
a
b
a
b
a
b
  BC     CSC     aSC     aBCC     abCC     abaC     abaSB
     abaBCB     ababCB     ababaB
     ababab
Pumping example
Then we can cut and paste part of parse tree
S
B
C
B
C
S
S
B
C
B
C
a
b
a
b
a
b
B
S
B
C
a
b
b
B
C
B
C
S
S
B
C
B
a
b
a
b
b
C
S
ababab
ababbabb
Pumping example
We can repeat this many times
Every sufficiently large derivation will have a middlepart that can be repeated indefinitely
ababab
ababbabb
ababbbabbb
ababnabnbb
Pumping in general
uvwxy
uv3wx3y
u
v
v
v
w
x
y
A
A
A
A
x
x
uv2wx2y
u
v
v
w
x
y
A
A
A
x
u
v
w
x
y
A
A
u
w
y
A
uwy
Example
If L3 has a context-free grammar G, then
What happens for anbncn?
No matter how it is split, uv2wx2y  L3!
If uvwxy is in Gso are uv2wx2yuv3wx3yuwy, ...
L3 = {anbncnn ≥ 0}
w
u
y
x
v
a a a ... a a b b b ... b b c c c ... c c
Pumping lemma for context-free languages
Pumping lemma: For every context-free language L
There exists a number n such that for everystring z in L, we can write z = uvwxy where    |vwx| ≤ n    |vx| ≥ 1     For every i ≥ 0, the string uviwxiy is in L.
w
u
y
x
v
Pumping lemma for context-free languages
So to prove L is not context-free, it is enough that
For every n there exists z in L, such that forevery way of writing z = uvwxy where |vwx| ≤ n  and  |vx| ≥ 1, the string uviwxiisnot in L for some i ≥ 0.
w
u
y
x
v
Proving language is not context-free
Like for regular languages, you need a strategy thatalways wins you this game
Donald
choose nwrite z = uvwxy(|vwx| ≤ n,|vx| ≥ 1)
you
choose z  Lchoose iyou win if uviwxiy  L
1
2
w
u
y
x
v
≤ n
At least oneis not empty
Example
Donald
choose nwrite z = uvwxy(|vwx| ≤ n,|vx| ≥ 1)
you
choose z  Lchoose iyou win if uviwxiy  L
1
2
1
2
L3 = {anbncnn ≥ 0}
w
u
y
x
v
a a a ... a a b b b ... b b c c c ... c c
choose n
write z = uvwxy
z anbncn
i = ?
Example
Case 1:  v or x contains two kinds of symbolsThen uv2wx2y not in L3 because pattern is wrong
Case 2:  v and x both contain one kind of symbolThen uv2wx2y does not have same number of as, bs, cs
x
v
a a a ... a a b b b ... b b c c c ... c c
x
v
a a a ... a a b b b ... b b c c c ... c c
More examples
L1 = {anbnn ≥ 0}
L2 = {ss has same number of as and bs}
L3 = {anbncnn ≥ 0}
L4 = {ssRs  {ab}*}
L5 = {sss  {ab}*}
Which is context-free?
Example
1
2
L5 = {sss  {ab}*}
w
u
y
x
v
a a a a a a a a a b a a a a a a a a a b
choose n
write z = uvwxy
z anbanb
i = ?
w
x
v
u
y
a a a a a a a a a b a a a a a a a a a b
What if:
Example
1
2
L5 = {sss  {ab}*}
w
u
y
x
v
a a a a a a b b b b b b a a a a a a b b b b b b
choose n
write z = uvwxy
z anbnanbn
i = ?
Recall that |vwx| ≤ n
Example
Case 1:
w
x
v
a a a a a a b b b b b b a a a a a a b b b b b b
Three cases
Case 2:
w
x
v
a a a a a a b b b b b b a a a a a a b b b b b b
Case 3:
w
x
v
a a a a a a b b b b b b a a a a a a b b b b b b
vwx is in the first half of anbnanbn
vwx is in the middle part of anbnanbn
vwx is in the second half of anbnanbn
Example
Case 1:
w
x
v
a a a a a a b b b b b b a a a a a a b b b b b b
Apply pumping with i = 0
Case 2:
w
x
v
a a a a a a b b b b b b a a a a a a b b b b b b
Case 3:
w
x
v
a a a a a a b b b b b b a a a a a a b b b b b b
uwy looks like ajbkanbn, where j < n or k < n
uwy looks like anbjakbn, where j < n or n
uwy looks like anbnajbk, where j < n or k < n
Example
Case 1:
Apply pumping with i = 0
Case 2:
Case 3:
uv0wx0y looks like ajbkanbn, where j < n or k < n
uv0wx0y looks like anbjakbn, where j < n or k < n
uv0wx0y looks like anbnajbk, where j < n or k < n
Not of the form ss
Not of the form ss
Not of the form ss
This covers all the cases, so L5 is not context-free
L5 = {sss  {ab}*}