You are on page 1of 15

# MELJUN P.

CORTES, MBA,MPA,BSCS,ACS Fall 2008
CSC 3130: Automata theory and formal languages

Limitations of context-free languages

Andrej Bogdanov
http://www.cse.cuhk.edu.hk/~andrejb/csc3130

Non context-free languages
• Recall the pumping lemma for regular languages allows us to show some languages are not regular
L1 = {anbn: n ≥ 0} L2 = {x: x has same number of as and bs} L3 = {1n: n is prime} L4 = {anbncn: n ≥ 0} L5 = {x#xR: x ∈ {0, 1}*} L6 = {x#x: x ∈ {0, 1}*}

Are these languages context-free?

Some intuition
L4 = {anbncn: n ≥ 0} • Let’s try to show this is context-free
S → aBc B → ?? context-free grammar

read a / push 1 ??? read c / pop 1 pushdown automaton

More intuition
• Suppose we could construct some CFG for L4, e.g.
S  BC B  CS | b C  SB | a ... S  BC  CSC  aSC  aBCC  abCC  abaC  abaSB  abaBCB  ababCB  ababaB  ababab

• We do some derivations of “long” strings

More intuition
• If derivation is long enough, some variable must appear twice on same path in parse tree
S  BC  CSC  aSC  aBCC  abCC  abaC  abaSB  abaBCB  ababCB  ababaB  ababab

S B C

C

S

S

B

B C B C

a

b

a b

a

b

More intuition
• Then we can “cut and paste” part of parse tree
ababab ✗
B C S S S
B
S C SS B C B C a b b

ababbabb

C B
a b

C

B CB a b S B b

B C B C
a b a b a b

More intuition
• We can repeat this many times
ababab ✗ ababbabb ✗ ababnabnbb • Every sufficiently large derivation will have a part that can be repeated indefinitely
– This is caused by cycles in the grammar

ababbbabbb

General picture
u

u v
A

A

u y v

A

A y x

y x

v A

x
v

A

v A v A x x

w

A

x

w

uvwxy

xvvwxxy w

uv3wx3y

Example
L4 = {anbncn: n ≥ 0}

• If L4 has a context-free grammar G, then
If uvwxy can be derived in G, so can uviwxiy for every i

• What happens for anbncn?
a a a ... a a b b b ... b b c c c ... c c
u v w x y

• No matter how it is split, uv2wx2y  L4!

Pumping lemma for context-free languages
• Theorem: For every context-free language L There exists a number n such that for every string z in L, we can write z = uvwxy where  |vwx| ≤ n  |vx| ≥ 1  For every i ≥ 0, the string uviwxiy is in L.

u

v

w

x

y

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 for every way of writing z = uvwxy where  |vwx| ≤ n and  |vx| ≥ 1, the string uviwxiy is not in L for some i ≥ 0.

u

v

w

x

y

Proving language is not context-free
• Just like for regular languages, need strategy that, regardless of adversary, always wins you this game adversary you
1 choose n 2 write z = uvwxy
(|vwx| ≤ n,|vx| ≥ 1)

choose z  L choose i you win if uviwxiy  L

Example
1 choose n 2 write z = uvwxy
(|vwx| ≤ n,|vx| ≥ 1)

you choose z  L choose i you win if uviwxiy  L

L4 = {anbncn: n ≥ 0}
1 n 2 write z = uvwxy

you z = anbncn i=?

a a a ... a a b b b ... b b c c c ... c c
u v w
x

y

Example
• Case 1: v or x contains two kinds of symbols
a a a ... a a b b b ... b b c c c ... c c
v x

Then uv2wx2y not in L because pattern is wrong • Case 2: v and x both contain one kind of symbol
a a a ... a a b b b ... b b c c c ... c c
v x

Then uv2wx2y does not have same number of as, bs, cs

More examples
• Which of these is context-free?
L1 = {anbn: n ≥ 0} L2 = {x: x has same number of as and bs} L3 = {1n: n is prime} L4 = {anbncn: n ≥ 0} L5 = {x#xR: x  {0, 1}*} L6 = {x#x: x  {0, 1}*}