Pumping Lemma for Regular Languages

Download Report

Transcript Pumping Lemma for Regular Languages

Chomsky Hierarchy II
(정규포함 관계)
12.1 언어 class들 사이의 포함관계
12.2 Regular 언어에 대한 pumping lemma
Lemma 증명
12.3 Pumping lemma 응용
응용 예
12.4 CFL에 대한 pumping lemma
Lemma 응용 예
12.5 Ogden’s lemma
Lemma 응용
12.6 CFL에 대한 pumping lemma 증명
연습문제
301
302
Review
Chomsky Hierarchy
Languages (grammars)
Recursively
Enumerable
Sets (type 0)
Context-sensitive
Languages(type 1)
Machines
Turing
Machines
(TM)
Linear-bounded
Automata
(LBA)
Context-free
Languages(type 2)
Pushdown
Automata
(PDA)
Regular
Languages(type3)
Finite State
Automata
(FA)
기타 Models
Post System,
Markov Algorithms,
-recursive Functions
.
.
.
.
.
Regular
Expression
303
형식언어 및 오토마타 체계 II
12. Chomsky Hierarchy II
(정규포함 관계)
우리는 7 장에서 여러 형식언어들과 automata 사이의 계층적 체계인 소위 Chomsky hierarchy를 소개하고 최 하위에
있는 regular language 계층의 횡적 관계, 즉 특성화 (characterization) 관계를 증명하였다.이 장에서는 다시 Chomsky
hierarchy로 돌아가 하위 두 계층들 사이의 수직관계를 증명하기로 한다. 아래 두 그림은Chomsky hierarchy의 수직
관계, 즉 언어모음 (language class)들 사이의 정규 포함 ( , 즉 proper containment) 관계와automata 기능 사이의 정규
포함관계를 나타낸다. 하위 class에 있는 언어는 상위 class 언어의 일종이며, 상위 class 언어 중에는 하위 class에
속하지 않은 언어가 있다는 뜻이다. Automata 측면에서는 상위 class에 속한 automata는 하위 class에 속한 automata가
인식하는 언어를 인식할 수 있지만, 그 역은 참이 아니라는 뜻이다.
TM
LBA
Type-3L
Type-0L
Type-1L
Type-2L
(a) Language class의 포함관계
PDA
FA
(b) Automata 기능의 포함관계
304
형식언어 및 오토마타 체계 II
정규포함관계
Chomsky hierarchy의 상위 계층에 갈수록 계층의 특성화 관계와 계층들 사이의 정규포함관계를 증명하기 위하여
보다 깊은 논리적인 사고를 필요로 한다. 이를 위하여 우리가 1 장에서 배운 주요 증명법을 충분히 활용할 필요가 있다.
(Chomsky hierarchy의 증명을 이해하고 나면, computer science를 공부하는 과정에 등장하는 논리적인 문제를 극복할
수 있는 지식을 갖추게 된다고 생각한다. )
305
형식언어 및 오토마타 체계 II
12. 1 언어 class 사이의 포함관계
Language class들 사이의 정규포함관계(, proper containment) 를 증명
하기에 앞서, 다음 Theorem이 말하는 포함관계(, containment)를 증명
하기로 한다.
Theorem. Type i (i = 0, 1, 2, 3) language class를 Type-iL 이라 하자. 모든
i < 3 에 대하여, 다음과 같은 포함관계가 성립한다.
Type-iL  Type-(i+1)L
증명. Grammar G = (VT, VN, P, S)의 rule을 라 하자. 정의에 의하여
type 3 (regular) grammar rule의 형식은 type 2 grammar (CFG) rule의 조건
|| = 1에 추가 조건  = xB 또는  = x (단, x  (VT)*, B  VN)을 둔 것이다.
따라서 type 3 grammar는 분명 type 2 grammar의 일종이다. 그러므로 type 3
언어는 모두 type 2 언어에 속한다. 즉,
Type-2L  Type-3L
306
형식언어 및 오토마타 체계 II
포함관계
증명(계속). 정의에 의하여 type 1 grammar (CSG) rule은 type 0 grammar
rule 형식에 rule의 좌측이 우측 보다 길 수 없다는 제한조건을 갖고
있으므로, 분명 모든 CSG는 type 0 grammar 이다. 따라서
Type-0L  Type-1L
정의에 의하면, CSG rule은 type 0 grammar rule에 조건 ||  ||를,
CFG rule은 type 0 grammar rule에 조건 || = 1을 추가한 것이다. 따라서
Type-1L 와 Type 2L 사이의 포함관계를 앞서 적용한 것과 같은 단순한
논리를 이용하여 증명할 수 없다. 문제는 -production rule 이다. CSG
는 start 기호에 한하여 S  을 허용하고 A  와 같은 임의의
nonterminal 기호는 을 생성할 수 없다. 이는 rule의 좌측이 우측 보다
길 수 없다는 CSG 조건에 맞지 않기 때문이다. 반면 CFG은 위와 같은
-production rule 모두 허용한다. 분명 CFG의 rule 중에 -production rule
이 아닌 rule은 모두 CSG의 rule 조건을 만족하므로 문제가 될 수 없다.
307
형식언어 및 오토마타 체계 II
포함관계
우리가 10 장 1 절에서 배운 CFG의 -production의 수를 최소로 줄일 수
있다는 다음의 Theorem을 기억한다면, CFG의 -production rule 문제는
쉽게 해결할 수 있다.
Theorem. 임의의 CFG G 가 주어졌다 하자. 다음 조건을 만족하는 CFG
G´를 만들 수 있다.
• L(G) = L(G´)
•   L(G) 면, G´에는 - production rule 이 없다.
•   L(G) 면, S   는 G´ 이 가지고 있는 유일한 -production rule 이다.
분명 G' 는 CSG 이다. 이 Theorem은 모든 CFL는 위의 3 조건을 만족하는
CFG G', 즉 일종의 CSG로 생성할 수 있다는 뜻이다. 따라서
Type-1L  Type-2L
308
포함관계
형식언어 및 오토마타 체계 II
이상의 결과를 종합하면 language class들 사이에 다음과 같은 포함관계를
얻는다.
Type-0L  Type-1L  Type-2L  Type-3L
이제 우리의 목표는 이 포함관계를 다음과 같은 정규포함관계 (proper
containment)로 발전시키는 것이다.
Type-0L  Type-1L  Type-2L  Type-3L
이를 위하여 각 i = 0, 1, 2, 3에 대하여,상위 class Type-iL 에 속하면서 하위
class Type-(i+1)L 에 속하지 않는 언어 하나를 제시할 수 있으면 족하다.
이 장에서는 우리가 아는 CFL {aibi | i  0 }가 regular language가 아니며,
CSL {aibici | i  0 }는 CFL가 아님을 보여 Type-1L  Type-2L  Type-3L 임을
증명한다. 나머지 상위 두 class 사의의 정규포함관계 Type-0L  Type-1L
는 보다 깊은 논리를 다루는 15 장으로 미루기로 한다.
309
형식언어 및 오토마타 체계 II
12.2 Pumping Lemma
우리는 앞 절에서 Chomsky hierarchy의 하위 계층은 상위 계층에 포함
되어 있음을 증명하였다.이 포함관계가 정규포함 관계임(proper
containment)을 증명하기 위하여 상위계층에 있지만 하위계층에 없는
언어 하나를 보여줌으로 충분하다. 먼저 CFL와 regular language 사이의
관계, 즉 모든 regular language는 CFL이지만, CFL 중에는 regular
language 가 아닌 언어가 있음을 증명한다.
증명을 위하여 먼저 regular language들이 공통적으로 갖고 있는 한 특
성을 찾아내고, 이 특성이 없는 CFL를 보여주기로 한다. 이러한 특성은
어디서 찾을 수 있을까? 크기가 유한한 언어는 모두 regular 이다.
(이 절의 되새김 참조.) 따라서 regular 언어에 있으면서 CFL에는 없을
특성은 크기가 무한한 언어 중에서 찾아야 한다. 다음 Lemma가 그러한
특성을 제시하고 있다.
310
Pumping Lemma
형식언어 및 오토마타 체계 II
Pumping Lemma: L을 크기가 무한한 임의의 regular
language라 할 때, 다음 조건을 만족하는 상수 n가 있다:
Language L의 alphabet를 라 하자. L에 있는 길이가 n 보다
크거나 같은 모든 string z에 대하여 아래의 조건을 만족
하는 string u, v, w가 존재한다.
• z = uvw, |uv|  n, |v|  1
• 모든 i  0 에 대하여 uviw  L
311
형식언어 및 오토마타 체계 II
Pumping Lemma
증명: M을 언어 L을 인식하는 DFA의 state transition graph 이라 하자.
Graph M 상에서 edge의 방향을 따라 두 state를 연결하는 길을 state
transition path 라 하고, 이 path의 각 edge 상에 있는 기호를 차례로 모
아 만든 string 을 그 state transition path 의 path label 이라 하자.
아래의 state transition graph 상에서 state 1  2  4  3  2  4 를
차례로 잇는 edge로 구성된 transition path의 path label은 aabba 이다.
물론 이 DFA에 aabba를 input로 주면 path 1  2  4  3  2  4 를
따라 transition이 발생한다.
2
a
a
start
1
a
b
3
4
b
b
312
형식언어 및 오토마타 체계 II
Pumping Lemma: 증명
크기가 무한한 임의의 regular 언어 L이 주어졌다 하고, 이를 인식하는
DFA의 state transition graph을 M, state 수를 n이라 하자. 언어
있는 길이가 n 보다 크거나 같은 임의의 string z (즉, |z|  n)를
주었을 때 M 상에서 transition이 어떻게 진행하는지 알아 보자.
수 n이 유한하고 언어 L 이 무한하므로 분명 L은 n 보다 긴
가진 string z 를 포함하고 있다.
L 내에
input로
State의
길이를
String z 의 길이가 m (즉, |z| = m  n ) 이라 하고, z = a1a2 …am라 하자.
(이해를 돕기 위하여 예로 들었던 다음의 DFA를 이용하기로 한다. )
2
a
a
start
1
a
b
3
4
b
b
313
형식언어 및 오토마타 체계 II
Pumping Lemma: 증명
String z의 길이가 M의 state 수 보다 크므로 (즉 |z| ≥ n ), 아래 그림 (b)
와 같이 z를 label로 갖는 transition path에는 cycle이 반드시 존재한다.
즉, path 상에 두 번 방문한 state q가 있다. (이 사실은 Pigeonhole 원리나
proof-by-induction 방법으로 쉽게 증명할 수 있다. 1장의 pigeonhole
principle 응용 예, 또는 연습문제 1.8 참조. )
|z| = m  n
2
a
a
start
1
a
b
3
4
aj+ .
.
1
.
. am
q
a1 . .
a2
ai+1 aj
ai
start
b
b
(a) Label aabba를 갖는 path
M
(b) Label a1a2 …am를 갖는 path
314
형식언어 및 오토마타 체계 II
Pumping Lemma: 증명
String z 가 DFA M이 인식하는 언어 L에 포함되어 있으므로 input z 에
의한 transition은 그림과 같이 accepting state (예의 4) 에서 끝나야 한다.
|z| = m  n
2
a
a
start
1
a
b
3
4
start
a1
a2
.
..
ai
aj+ .
q1
ai+1
aj
.
. am
b
b
(a) Label aabba을 갖는 path
M
(b) Label a1a2 …am을 갖는 path
315
형식언어 및 오토마타 체계 II
Pumping Lemma: 증명
아래 그림과 같이 z를 label로 갖는 transition path 상에서 cycle 이전의
부분의 path label을 u, cycle 부분의 path label을 v, cycle 이후부터
accepting state 까지 path label을 w 라 하자. State q 가 start state 이면 u = ,
transition path의 최종 state 이면 w =  이다. Cycle 부분 v 는 최소한
하나의 symbol 이 있어야 하므로 |v|  1 이다.
z = a1a2 …ai ai+1 . . . . aj aj+1 . . . .am
u = a, v = abb, w = a
2
a
a
start
1
b
w
|z| = m  n
a
b
3
v
u
4
b
start
a1
a2
.
..
u
M
ai
aj+ .
q1
ai+1
|v|  1
.
aj
. am
w
v
316
형식언어 및 오토마타 체계 II
Pumping Lemma: 증명
Node의 수가 n인 방향성 graph 에서 길이가 n 인 path에는 반드시
cycle이 존재하므로 |uv|  n 인 조건이 성립한다.
z = a1a2 …ai ai+1 . . . . aj aj+1 . . . .am
u = a, v = abb, w = a
2
a
a
start
1
3
b
|z| = m  n
a
b
v
u
w
|uv|  n
|v|  1
4
b
start
a1
a2
.
..
u
M
ai
aj+ .
q1
ai+1
.
aj
. am
w
v
317
형식언어 및 오토마타 체계 II
Pumping Lemma: 증명
DFA M는 string uvw 를 accept 하므로, 분명
uw = uv0w, uvvw = uv2w, uvvvw = uv3w, . . . .
등 모든 i  0 에 대하여, uviw 도 accept 한다. 즉, uviw  L 이다.
z = a1a2 …ai ai+1 . . . . aj aj+1 . . . .am
u = a, v = abb, w = a
For all i  0, a(abb)ia  L
2
a
a
start
1
b
|z| = m  n
4
b
w
|uv|  n
|v|  1
For all i  0, uviw  L
a
b
3
v
u
start
a1
a2
.
..
u
ai
aj+ .
q1
ai+1
.
. am
aj
w
v
M
318
Pumping Lemma: 증명
형식언어 및 오토마타 체계 II
따라서 다음의 pumping lemma는 참이다.
Pumping Lemma: L을 크기가 무한한 임의의 regular
language 라 할 때, 다음 조건을 만족하는 상수 n가 있다:
Language L에 있는 길이가 n 보다 크거나 같은 모든 string
z에 대하여 (즉, |z| = m ≥ n) 아래의 조건을 만족하는
string u, v, w 가 존재한다.
• z = uvw, |uv|  n, |v|  1
• 모든 i  0 에 대하여 uviw  L
319
형식언어 및 오토마타 체계 II
12.3 Pumping Lemma 응용
이제 pumping lemma를 이용하여 regular language가 아닌 CFL가 있음을
증명하기로 한다. 응용에 앞서 편이 상 lemma가 갖고 있는 논리적인
요소가 분명히 드러나도록 다음과 같이 lemma를 정리하여 다시 쓴다.
(1) 크기가 무한한 모든 regular 언어 L 에 대하여, //  regular language L,
(2) 다음 조건을 만족하는 상수 n이 존재한다. //  a constant n such that
(3) | z |  n 인 모든 string z  L 에 대하여, //  string z  L, | z |  n
(4) 다음 네 조건을 만족하는
string u, v 및 w 가 존재한다.
//  strings u, v, w such that
(i) z = uvw,
(ii) |uv|  n,
(iii) |v|  1,
(iv) 모든 정수 i  0 에 대하여,
uviw  L.
//  i  0, uviw  L.
320
Pumping Lemma: 응용
형식언어 및 오토마타 체계 II
응용에 앞서 1장에서 증명법을 배울 때 existential quantification
(,내재적 계량)과 universal quantification (, 보편적 계량)을 처리하는
법을 상기하자. 응용은 특정한 CFL 에 대하여 pumping lemma가 옳지
않음을 증명하는 것이므로, lemma의 existential quantification에 관련된
부분(상수 n, strings u, v, w)은 모든 경우를 다 고려해야 한다. 반면,
universal quantification 을 갖고 있는 부분 (regular language L, 길이가
 n 인 string z  L , 정수 i  0) 은 증명하는데 편리한 하나의 경우를
선택하면 된다.
증명은 pumping lemma를 주장하는 사람과 선택한 CFL 가 pumping
lemma를 만족하지 않는다고 주장하는 우리와의 논리적인 게임으로
다음과 같이 전개할 수 있다.
321
Pumping Lemma: 응용
형식언어 및 오토마타 체계 II
이제 우리가 잘 아는 CFL L = {aibi | i  1 } 이 pumping lemma를 만족하
지 않기 때문에 regular 언어가 아님을 증명한다. L이 regular language라
가정하자. (이 말 투는 proof-by-contradiction을 쓸 것임을 암시한다.) L이
가정대로 regular 인지를 lemma의 논리적 줄거리를 따라 따져 보기로
하자. 주장의 번호는 lemma 내에 있는 번호와 일치한다.
Pumping Lemma 의 주장
(1) 크기가 무한한 모든 regular
languages L 에 대하여,
(2) 다음 조건 (3), (4) 를
만족하는 상수 n이 존재한다.
(3) . . . . .
(4) . . . .
우리의 주장
L은 크기가 무한한 regular
언어이다. 따라서 lemma의 조건
(3)과 (4) 를 만족하는 상수 n 가
존재한다. 이 상수가 어떤 값이든
그것을 n 이라 하자. (즉 n의 모든
경우의 값을 동시에 고려한다.)
322
형식언어 및 오토마타 체계 II
Pumping Lemma: 응용
Pumping Lemma 의 주장
(3) | z |  n 인 모든
string z  L 에 대하여,
(4) 다음 조건을 만족하는
string u, v 및 w 가 존재한다.
(i) z = uvw,
(ii) |uv|  n,
(iii) |v|  1,
(iv) 모든 정수 i  0 에 대하여,
uviw  L.
n
n
aa . . . . . . . .a bb . . . . . . . . .b
u v
|uv|  n
w
우리의 주장
L에 있는 string z = anbn 를 선택 하
자. String z가 조건 (4)의 (i) – (iii)을
만족하는 모든 u, v, w 에 대하여 조
건(iv)를 만족하는지 알아 보자.
조건 (i)에 따라 z = anbn = uvw라
두면, 조건 (ii) 과 (iii)에 의하여 v는
그림과 같이 a만으로 된 string 이다
따라서 uv2w에는 a의 수가 b의 수
보다 많다. 즉, i = 2 인 경우,
uv2w  L.
L은 pumping lemma를 만족 하지
못한다. 따라서 L은 regular 언어가
아니다.
323
형식언어 및 오토마타 체계 II
되새김: Pumping Lemma 응용
•
우리는 언어 L = {aibi | i  1 }가 CFL 임을 잘 알고 있다. 이 언어가 regular 언어가 아님을 증명하였으므로 우리가
이미 12.1 절에서 증명한 CFL class와 regular 언어 class 사이의 포함관계 Type-2L  Type-3L 는 실제로 정규포함관계
Type-2L  Type-3L 임을 증명한 것이다.
•
위의 증명은 lemma가 참이 아님을 보이는 것이다. 이 때 existential quantification ( 즉, 있다, 또는 존재한다)과
universal quantification ( 즉, 모든)을 어떻게 처리하고 있는지 검토해 보자.
Lemma에는 두 곳 (2), (4)에 “. . . 가 존재한다.” 형식으로 existential quantification을 쓰고 있으며, (1), (3), (iv)에 “모
든. . .에 대하여” 형식으로universal quantification을 쓰고 있다. Lemma 가 참이 아님을 보이기 위하여 existential
quantification 부분은 주어진 모든 경우를 고려해야 하며, universal quantification 부분은 한 가지 예를 고려하는 것으로
충분하다.
따라서 (2) 번에 있는 “… 상수 n이 존재한다”는 부분에 대하여 증명은 n 을 변수로 이용하여 모든 상수 경우를 고려
하 고 있 다. Le m m a 의 (4 ) 번 에 있 는 “ … u , v 및 w 가 존재한다”는 부분 역 시 조 건 ( i ) – ( i i i ) 을
만족하는 모든 u, v, w를 고려하여 논리를 전개하고 있다.
한편, (1) 번의 “모든 regular languages…” 부분에 대하여 증명은 주어진 언어 L을 택하였고, (3) 번의 “모든 string z …”
부 분 에 대 한 증 명 은 특 정 한 s t r i n g z = a n b n 를 , ( i v ) 번 의 “ 모든 정수 i  0 … ” 에 대 한 증 명 은
i = 2 를 택하였다. (물론 z = anbn 와 i = 2 대신 다른 값을 택할 수 있다.)
324
형식언어 및 오토마타 체계 II
되새김: Pumping Lemma 응용
•
다음은
학생들이 제출한 답에서 흔히 볼 수 있는 pumping lemma를
잘못 적용한 예를 보여준다.
문제: L = {abcaiabc | i  0 } 이 regular language 인지 여부를 밝히라.
답: L은 regular language가 아니다. L이 regular라고 가정하자. L은 pumping lemma를 만족해야 한다. 정수 n을 lemma의
상수라고 하고, z = abcanabc 라 두자. 따라서 |z|  n 이므로 string z는 lemma의 조건 (2)를 만족한다. 이제 z = uvw라 두
고 u = a, v = b, w = canabc 인 경우로 고려하여 보자. 분명 uv2w = abbcanabc 이고 L에 없는 string 이다. L은 pumping
lemma를 만족하지 못한다. 따라서 L은 regular language 가 아니다!!
분명 L은 아래의 FA가 인식하는 regular language다. 이 증명에서 무엇이 잘못되었는가?
위의 증명의 결정적인 오류는 아래의 lemma의 조건 (4)의 existential quantification을 쓴 u, v, w에 대하여 특정한 경우,
즉 u = a, v = b, w = canabc 인 경우 만들 고려하고 조건 (ii)를 만족하는 다른 경우를 고려하지 않은 것이다. 다시 말하면,
“pump” 할 수 있는 위치 v는 (길이가 n인) string의 prefix 어디에도 있을 수 있음을 간과했기 때문이다. 만일 v가 string
w의 substring an 내에 있다면, 모든 정수 i  0 에 대하여, uviw  L 가 되어 lemma를 만족하기 때문에 증명은 실패한다.
(4) 다음 조건을 만족하는 string u, v 및 w 가 존재한다.
(i) z = uvw,
(ii) |uv|  n,
(iii) |v|  1,
(iv) 모든 정수 i  0 에 대하여,
uviw  L.
a
b
c
a
b
c
a
325
되새김: Pumping Lemma 응용
•
형식언어 및 오토마타 체계 II
앞의 예와 같이 주어진 언어가 regular 임을 증명하기 위하여 Pumping lemma를 이용하는 오류를 가끔 범한다.
다음과 사실을 기억해 둘 필요가 있다.
Pumping lemma는 크기가 무한한 모든 regular 언어가 갖는 특성이다. ( “For all i ≥ 0, uviw  L” 부분을 기억하자.)
크기가 유한한 언어는 모두 regular 이며, 이를 인식하는 FA의 state transition graph에는 cycle이 존재할 수 없다.
크기가 유한한 언어 L = {w1, w2, . . ., wk }가 있다 하자. L을 인식하는 FA는 아래 그림이 예시하는 것과 같이 각 string
w i 마다 w i 를 path label로 갖는 accepting transition path를 만들어 주면 된다.언어 L이 유한하므로
이 FA의 state 수도 유한하다.
w1
w2
wk
.
.
.
326
되새김: Pumping Lemma 응용
•
형식언어 및 오토마타 체계 II
언어 L 이 regular 임을 증명하기 위하여 pumping lemma를 이용하려는 학생을 가끔 본다. 이러한 시도는 언어 L을
인식 하는 FA, L을 생성하는 regular grammar, 또는 L을 표현하는 regular expression을 제시하는 것 보다 어려울 뿐
아니라, 근본적으로 다음과 같은 논리적 허점을 갖고 있어 옳은 답을 얻을 수 없다.
Pumping lemma는 크기가 무한한 regular 언어가 갖는 공통적인 특성이지만, regular 언어가 아닌 언어가 이 특성을
갖지 않는다는 증명을 한 바 없다. 실제로 pumping lemma를 만족하는 regular 언어가 아닌 언어가 있으며, 그 한 예가
부록 E 에 있다. 따라서 어떤 언어가 pumping lemma를 만족한다고 하여regular 언어라고 주장할 수는 없다.
327
형식언어 및 오토마타 체계 II
12.4 CFL에 대한 Pumping Lemma
CSL class와 CFL class 사이의 정규포함관계, 즉 Type-1L  Type-2L의
증명은 12.3 절에서 증명한 CFL class와 regular 언어 class 사이의 관계,
즉 Type-2L  Type-3L의 증명과 매우 유사하다. 먼저 크기가 무한한
CFL들이 갖는 아래와 같은 특성 (일명 CFL를 위한 pumping lemma
또는 “uvwxy Theorem”라고도 부름)을 도입하고, 2.3 절에서 CSL의 한
예로 들었던 {aibici | i ≥ 1 }가 이 특성을 만족하지 않음을 증명한다.
CFL에 대한 pumping lemma (uvwxy Theorem). 크기가 무한한 모든
CFL에 대하여 다음 조건을 만족하는 상수 p가 있다:
L에 있는 길이가 p 보다 크거나 같은 모든 string z에 대하여 다음
조건을 만족하는 string u, v, w, x, y가 존재한다.
• z = uvwxy, |vwx|  p, |vx|  1
• 모든 정수 i  0 에 대하여 uviwxiy  L
328
형식언어 및 오토마타 체계 II
CFL에 대한 Pumping Lemma
CFL에 대한 pumping lemma는 regular 언어에 대한 lemma와 매우 유사
하다. 아래 그림은 이 두 lemma를 비교한 것이다. Regular 언어pumping
lemma에서는 string z 가 u, v, w 세 부분으로 나뉘고 (즉 z = uvw) pump 할
위치가 하나 (즉, v) 이다. CFL에 대한 lemma에서는 string z가 u, v, w, x, y
다섯 부분으로 나뉘고 (즉 z= uvwxy), pump 할 위치 (화살표)가 v 와 x 두
곳 이다 .
CFL 용 lemma
Regular 언어 용 lemma
• z = uvwxy, |vwx|  p, |vx|  1
• 모든 i  0 에 대하여 uviwxiy  L
u
v
w
z
vwx|  p
x
y
• z = uvw, |uv|  n, |v|  1
• 모든 i  0 에 대하여 uviw  L
u
v
w
|uv|  n
329
형식언어 및 오토마타 체계 II
CFL에 대한 Pumping Lemma
Lemma를 응용할 때 regular 언어 용 lemma는, 조건 |uv|  n 에 의하여
pump 할 부분 v 는 길이가 n 인 z 의 prefix 내에 한정되어 있으므로 이용
하기 편하다. 반면 CFL의 경우 조건 |vwx|  p 에 의하여 pump 할 부분 v
와 x 는 넓이가 P인 창(window) 내에 존재하지만, 이 창의 위치는 string
z 의 어느 위치에나 있을 수 있다. 따라서 이 lemma를 응용하려면 논리
적으로 고려해야 할 경우가 많다. 이 lamma를 증명하기에 앞서 응용을
먼저 보기로 한다.
CFL 용 lemma
Regular 언어 용 lemma
• z = uvwxy, |vwx|  p, |vx|  1
• 모든 i  0 에 대하여 uviwxiy  L
• z = uvw, |uv|  n, |v|  1
• 모든 i  0 에 대하여 uviw  L
u
v
w
z
vwx|  p
x
y
u
v
w
|uv|  n
330
형식언어 및 오토마타 체계 II
12.5 CFL에 대한 Pumping Lemma: 응용
Regular language의 경우와 같이 lemma의 논리적인 요소를 드러내기
위하여 lemma를 다음과 같이 다시 쓴다.
(1) 크기가 무한한 모든 CFL L에 대하여
(2) 다음 조건을 만족하는 상수 p 가 존재한다:
(3) |z|  p 인 조건을 만족하는 모든 string z  L에 대하여
(4) 다음 조건을 만족하는 string u, v, w, x, y 가 존재한다.
(i) z = uvwxy,
(ii) |vwx|  p,
(iii) |vx|  1,
(iv) 모든 i  0 에 대하여, uviwxiy  L.
331
CFL에 대한 Pumping Lemma: 응용
형식언어 및 오토마타 체계 II
이제 우리가 2.3절에서 배운 CSL L = {aibici | i  1 }가 CFL에 대한
pumping lemma를 만족하지 않는다는 것을 증명 한다. 증명 방법은
{aibi | i  1 }이 regular 언어가 아님을 증명한 경우와 유사하다.
우선 L 이 CFL라 가정하자. L이 가정대로 CFL 인지를 lemma의
논리적 줄거리를 따라 가며 따져 보기로 하자. 주장의 번호는 lemma
내에 있는 번호와 일치한다.
Pumping Lemma 의 주장
(1) 크기가 무한한 모든 CFL
L 에 대하여,
(2) 다음 조건 (3), (4) 를
만족하는 상수 p 가 존재한다.
(3) . . . . .
(4) . . . .
우리의 주장
L은 크기가 무한한 CFL
이므로, lemma의 조건 (3)과 (4) 를
만족하는 상수 p 가 존재한다. 이
상수가 어떤 값이든 그것을 p 라
하자.(즉 p의 모든 경우의 값을
동시에 고려한다.)
332
CFL Pumping Lemma: 응용
형식언어 및 오토마타 체계 II
Pumping Lemma 의 주장
우리의 주장
(3) | z |  p 인 모든
string z  L 에 대하여,
(4) 다음 조건을 만족하는
string u, v, w, x, y 가 존재한다.
(i) z = uvwxy,
(ii) |vwx|  p,
(iii) |vx|  1,
(iv) 모든 정수 i  0 에 대하여,
uviwxiy  L.
p
p
L에 있는 string z = apb pcp 를
선택하고, 조건 (4)의 (i) – (iii)을
만족하는 모든 u, v, w, x, y 에
대하여 (iv)가 만족하는지
따져보기로 한다.
(i) z = apbpbp = uvwxy라 두고,
v 와 x에 있을 수 있는 기호들을
알아보기로 한다.
Substring vwx 의 길이는 p 보다
클 수 없지만, 그 위치는 z 상의
어느 곳에도 있을 수 있음을
명심하자.
p
aa . . . . . . . . .abb . . . . . . . . .bcc. . . . . . . . . c
vwx
y
u
333
형식언어 및 오토마타 체계 II
CFL Pumping Lemma: 응용
(i) z = uvwxy,
(ii) |vwx|  p,
(iii) |vx|  1,
(iv) 모든 정수 i  0 에
대하여, uviwxiy  L.
p
p
p
aa . . . . . . . . .abb . . . . . . . . .bcc. . . . . . . . . c
vwx
y
u
|vwx|  p
위의 그림이 예시하는 바와 같이, 조건 |vwx|  p 에 의하여 v 와 x는
함께 한 종류 또는 많아야 두 종류 (a 와 b, 또는 b 와 c)의 symbol을 포함
할 수 있다. (String v 의 첫 문자와 x 의 마지막 문자 사이의 거리가 p를
넘지 못한다는 조건에 유의하자.) 그리고 조건 |vx|  1에 의하여 v와
x는 함께 최소한 하나의 symbol을 포함하고 있다.
따라서 string uv2wx2y 에는 같은 수의 a, b, c 가 있을 수 없다. 즉,
uv2wx2y  L. 이는 i = 2일 경우 조건 (iv)를 만족하지 못한다는 뜻이다.
따라서 L은 CFL 가 아니다.
334
형식언어 및 오토마타 체계 II
되새김: CFL에 대한 Pumping Lemma 응용
•
CFL에 대한 pumping lemma를 응용할 때, regular language에 대한 pumping lemma와 다른 점에 유의할 필요가 있다.
Regular language의 경우 pump 할 곳 (즉, z = uvw 내의 v)은 선택한 string z 의 길이 n인 prefix 내에 한정되어 있다.
CFL의 경우 pump 할 곳 (z = uvwxy 내의 v와 x)은 string u와 y의 길이에 제한이 없으므로 조건 |vwx|  p 에 의하여
넓이가 최대 p인 창(window)이 있을 수 있는 위치이면 어디든지 가능하다. String vwx 는 z의 prefix가 될 수도 있고 suffix
가 될 수도 있다. 따라서 CFL에 대한 pumping lemma를 이용하여 어떤 language L이 CFL가 아님을 증명하는 과정에서
조건 (iv) 를 만족할 수 없음을 보이기 위하여 vwx가 있을 수 있는 z 상의 모든 위치를 고려해야 한다.
• 앞서 배운 CFL에 대한 pumping lemma는 응용 예로 든 언어에 대하여 비교적 쉽게 적용할 수 있었다. 그러나 이 lemma의
약점은 CFL가 아님에도 lemma를 적용하여 이를 증명할 수 없는 경우가 많다. 예를 들어 CFL가 아닌 아래 언어 L을 예로
들어 보자. L은 동일한 binary string이 string a i 로 분리되어 있거나, binary string 만 갖고 있는 언어이다.
이 언어에 속한 길이가 p 보다 같거나 큰 어떤 string을 택하든지 이 string을 pump 하여 lemma 에 모순됨을 보여 줄 수 없다.
L = {xaix | i > 0, x  {0,1}+}  {x | x  {0,1}+}
p p
p p
예를 들어 string z = 1 0 aaa1 0 = uvwxy를 pump 하여 L에 속하지 않은 string을 만들 수 있는지 검토하여 보자. 분명
p p p p
v = a, w = a, x = a 일 경우, 모든 i  0 에 대하여 uviwxiy  L 이다. 기호 a가 하나 있을 경우 즉, z = 1 0 a1 0 일 때도
v = a, w = x =  라 두면, 역시 모든 i  0 에 대하여 uviwxiy  L 가 됨을 알 수 있다. 이런 점에서 우리가 배운 CFL에 대한
pumping lemma는 CFL가 아닌 다양한 언어에 적용할 수 없는 약점을 갖고 있다. 이러한 결점을 보강하기 위하여 W.
Ogden은 소위 Ogden’s lemma라는 pumping lemma를 도입하였다.
335
형식언어 및 오토마타 체계 II
12.6 Ogden’s Lemma
Ogden의 lemma는 pumping lemma와 매우 유사하다. 다른 점은 pumping
할 수 있는 string 내의 문자를 아래 lemma의 적색 부분과 같이 mark 하여
제한할 수 있다는 것이다.
(1) 크기가 무한한 모든 CFL L에 대하여
(2) 다음 조건을 만족하는 상수 p 가 존재한다.
(3) |z|  p 인 조건을 만족하는 모든 string z  L에 대하여
z 내의 최소 p 개의 위치에 있는 문자를 mark 했다면,
(4) 다음 조건을 만족하는 string u, v, w, x, y 가 존재한다.
(i) z = uvwxy,
(ii) |vwx|  p,
(iii) |vx|  1, vx 내에는 최소 한 개의 mark 된 문자가 있을 때,
(iv) 모든 i  0 에 대하여, uviwxiy  L.
(이 lemma의 증명은 본 과목의 정도를 벗어나므로 약하기로 한다. 흥미 있는 독자는 Hopcroft, Motwani, Ullman 저
“Introduction to Formal Languages, Automata Theory, Languages and Computation” (2001. Addison Wedley)를 참고하기
바란다. )
336
형식언어 및 오토마타 체계 II
Ogden’s Lemma
이제 앞서 CFL에 대한 pumping lemma를 적용하는데 실패했던 다음
언어에 Ogden의 lemma를 적용하여 보자.
L = {xaix | i > 0, x  {0,1}+}  {x | x  {0,1}+}
p p
p p
p
String z = 1 0 a1 0 = uvwxy 을 선택하고 이 string의 prefix 1 에 있는
symbol을 전부 mark 했다 하자. Ogden의 lemma에 의하여 |vwx|  p 이며
vx에 최소 하나의 mark되 symbol 이 있어야 하므로, x는 결코 a를 포함할
수 없다. Pump 한 string z' = uv2wx2y는 언어 L의 조건을 만족할 수 없다.
왜냐하면 a의 앞 부분의 binary string이 a 다음의 string과 같을 수 없기
때문이다. 따라서 uv2wx2y  L. 언어 L은Ogden의 lemma를 만족하지
않으므로 CFL가 아니다.
337
형식언어 및 오토마타 체계 II
되새김: Ogden’s Lemma 응용
Programming 언어의 syntax 대부분이 context-free 언어의 특성을 갖고 있지만, context-dependent 한 부분도 있다. 예를
들면, 한 block 내에 동일한 변수를 중복하여 선언할 수 없다는 것, 다음의 FORTRAN program 예와 같이 matching
integer label (예에서 10)을 쓰는 경우, 등이 그 대표적인 예이다.
....
DO 10 I = 1, 100, 1
SUM = SUM + I
10
PRO = PRO * I
....
위의 예와 같은 context-dependence 언어 구조는 앞서 Ogden의 lemma의 응용 예로 들었던 다음 언어 L과 같은 구조를 갖고
있음을 알 수 있다.
L = {xaix | i > 0, x  {0,1}+}  {x | x  {0,1}+}
String x는 matching label (예의 10)에 해당하고 ai 대신 임의의 string (프로그램)이 있을 수 있으며, matching label이 없을
수 도 있기 때문이다.
338
형식언어 및 오토마타 체계 II
12.7 CFL에 대한 Pumping Lemma: 증명
우선 증명의 바탕이 되는 개념을 설명하기 위하여 간단한 예를 들고
형식적인 증명은 약하기로 한다. (예로 제시된 개념을 일반화 하는 것은
어렵지 않다.) Chomsky normal form (CNF)으로 표현된 다음의 CFG을
고려하여 보자. (모든 CFG는 CNF로 전환할 수 있다는 것을 기억하자.)
S  AB
C  DB | c
A  DE
F  HC
B  FD
Dd
E  FC
Hh
이 CFG의 언어의 크기는 무한하다. 예를 들면, 다음 쪽의 parse tree에서
긴 가지에 해당하는 일련의 rule 중에 3 개의 rule B  FD, F  HC, 그리고
C  DB을 반복하여 적용할 수 있다. 즉, B가 F를 F가 C를, 그리고 C가 다
시 B를 생성할 수 있기 때문에 무한히 많은 string을 생성할 수 있다. 그림은
이 줄기에서 string z = d(hd)3hc(d)3dchdchd 를 생성하고 있음을 보여준다.
339
형식언어 및 오토마타 체계 II
CFL에 대한 Pumping Lemma: 증명
CFG G:
S
A
S
AB
C
DB | c
F
HC
D
d
A
DE
B  FD
E
H
D
d
H
FC
h
h
d
* 가장 긴 가지의 “마디” F-C-B 가
임의 번 반복할 수 있으며, 여기에
맺은 “열매”가 좌측에는 hb 우측엔
d 가 반복횟수 만큼 달린다. 즉,
For all i ≥ 0, uviwxiy  L(G)
F
H
C
h D
d
B
d
D
d
F
H
h
F D
H C
B
B
D
B
F
d
C
C
D
h
E
F
D
C
d
c
H
C
h
c
d
D B
F
H C
h c
D
D
d
A
N
I
z = d ( h d )3 h c (d)3 d h c d h c d
u
v
w x
y
340
d
형식언어 및 오토마타 체계 II
CFL에 대한 Pumping Lemma: 증명
Parse tree의 가장 긴 줄기에 해당하는 path label 에 반복하는 pattern
F-C-B 가 있다. 이러한 반복 pattern은 발생하는 언어의 크기가 무한한
grammar의 공통적인 특성이다. 왜냐하면, nonterminal symbol의 수가
상수인 반면, grammar가 발생하는 string은 임의로 길 수 있기 때문이다.
예에서 반복 pattern F-C-B 은 제거하여 그 수를 감소시킬 수도 있고,
삽입하여 증가시킬 수도 있다. 반복하는 pattern F-C-B 의 왼편과 오른
편에 각 각 terminal string hd 와 d가 발생하므로 모든 string
d(hd)ihc(d)idchdchd ( i  0 )에 대한 parse tree가 존재하며, 이들은 모두
주어진 grammar에 의하여 발생할 수 있다는 것을 알 수 있다.
341
CFL에 대한 Pumping Lemma: 증명
형식언어 및 오토마타 체계 II
일반적으로 CNF로 표현된 CFG의 parse tree의 높이가 grammar의
nonterminal symbol 의 수 보다 크면, 가장 긴 줄기(path) 상에 최소한 한
개의 nonterminal symbol 이 반복하여 나타난다. 이 symbol을 A라 하자.
Symbol A 부터 다음 A 까지 줄기의 왼편 가지에서 생긴 terminal string을
v, 오른편 가지에서 생긴 terminal string을 x, 줄기의 끝에서 생긴 string
을 w,이 외에 줄기의 좌 우편에 발생한 string을 각 각 u, y 라 하자.
Grammar의 parse tree가 string z를 생성한다고 하면, z = uvwxy라 쓸
수 있고, 모든string z' = uviwxiy (i  0) 이 주어진 grammar에 의하여 발
생될 수 있음을 알 수 있다. VN을 grammar의 nonterminal symbol의 집합
이라 하자. Grammar가 CNF로 표현되어 있으므로 |vwx|  p = c|VN|
이며 (여기서 c는 상수), |vx|  1 임을 증명할 수 있다.
342
CFL에 대한 Pumping Lemma: 증명
형식언어 및 오토마타 체계 II
이상의 분석을 정리하면 다음의 결론을 얻는다.
(1) 모든 CFL L에 대하여
(2) 다음 조건을 만족하는 상수 p 가 존재한다.
(3) |z|  p 인 조건을 만족하는 모든 string z  L에 대하여
(4) 다음 조건을 만족하는 string u, v, w, x, y 가 존재한다.
(i) z = uvwxy,
(ii) |vwx|  p,
(iii) |vx|  1,
(iv) 모든 정수 i  0 에 대하여, uviwxiy  L.
343
연습문제
12.1 Pumping lemma를 이용하여 언어 L = {xxR | x {a, b, c}* }가 regular 가 아님을 다음과 같은 논리로 증명하려 한다.
다음 각 질문에 답하여 증명을 완성하라.
증명. 언어 L이 regular 라 하고 lemma의 상수를 n 이라 하자. 분명 다음에 주어진 모든 string은 L에 속한다.
(a) abccba
(b) a100b100b100a100
(c ) an/2bn/2b n/2an/2
(d) anbnbnan
질문 1: 이 중에 어느 string을 lemma의 string z로 선택하겠는가? 다른 string을 선택하지 않은 이유는? 만일 어느
string도 z로 선택할 수 없다면, L 내의 어느 string을 선택할 것인가?
질문 2: (i) z = uvw, (ii) |uv|  n, (iii) |v|  1 을 만족하는 string u, v, w {a, b, c}* 를 고려해 보자. String v의 내용은
어떤 것일 까? 가능한 모든 경우를 간략하게 기술하라.
질문 3: Pumping lemma에 의하면 “For all i  0, string uviw  L.” 언어 L이 regular 가 아님을 증명하기 위하여 lemma의
이 부분을 어떻게 이용하겠으며, 그 이유는?
12.2 다음 각 언어가 regular 언어인지 여부를 밝히고 증명하라. 증명의 논리는 명료해야 한다.
L1 = {aibjck | i, j, k > 0 }
L2 = {aaaaibjci | i, j > 0 }
12.3 String x에 있는 기호 a, b, c의 수를 각 각 #a(x), #b(x), 및 #c(x) 로 표기하기로 하자. 다음 각 언어가 CFL 인지
여부를 가리고 증명하라. 증명의 논리는 명료해야 한다.
L3 = { x | x {a,b,c}+, and #a(x) > #b(x) }
L4 = { x | x {a,b,c}+, and #a(x) = #b(x) = #c(x) }
L5 = {x | x {a,b,c}+, and #a(x) < #b(x) < #c(x) }
12.4 언어 { w#wR | w  {a, b}* } 는 CFL 임을 배웠다. 다음 언어는 CFL 이 아님을 증명하라.
L6 = {w#w | w  {a, b}* }
L7 = {xyx | x, y  {a, b}* }
344