95
1 부록 A. Pascal Syntax Flow Graph 2 B. 2-way FA 언어를 인식하는 1-way FA 만들기 9 C. FA 언어의 Regular Expression 구하기: Dynamic programming 기법 26 D. Deterministic Context-free 언어의 특성 36 E. Pumping Lemma를 만족하는 non-regular 언어 68 F. CYK Algorithm 75 찾아보기 83

계산모델: 오토마타와 형식언어(부록-찾아보기)

Embed Size (px)

DESCRIPTION

이 파일은 컴퓨터 분야 이론 교제 '계산 모델: 오토마타와 형식언어'의 부록과 찾아보기(index)을 담고 있는 강의(presentation) 교제입니다. Animation 기능이 있는 PowerPoint 파일을 원하시면 email로 저자에게 연락하시기 바랍니다.

Citation preview

Page 1: 계산모델: 오토마타와 형식언어(부록-찾아보기)

1

부록

A. Pascal Syntax Flow Graph 2

B. 2-way FA 언어를 인식하는 1-way FA 만들기 9

C. FA 언어의 Regular Expression 구하기:

Dynamic programming 기법 26

D. Deterministic Context-free 언어의 특성 36

E. Pumping Lemma를 만족하는 non-regular 언어 68

F. CYK Algorithm 75

찾아보기 83

Page 2: 계산모델: 오토마타와 형식언어(부록-찾아보기)

2

부록 A

Pascal Syntax Flow Graph

이 Pascal syntax flow graph은 Kathleen Jensen과 Niklaus Wirth 저 “Pascal User Manual and Report”

(Springer-Verlag, 1974)에서 출판사의 양해를 얻어 발췌한 것이다. Pascal 문법에 대한 자세한 설명은

이 책을 참조하기 바란다.

Page 3: 계산모델: 오토마타와 형식언어(부록-찾아보기)

3

<program>

PROGRAM identifier identifier( ) ; block .

,

CONSTANT identifier = constant

;

TYPE identifier = type

;

,

VAR identifier : type

;

LABEL unsigned integer

,

;

; block ;

parameter listidentifierPROCEDURE

parameter listidentifierFUNCTION identifier:

BEGIN statement END

;

<block>

Pascal Syntax Flow Graph

Page 4: 계산모델: 오토마타와 형식언어(부록-찾아보기)

4

BEGIN ENDstatement

;

expression constant statementCASE OF : END

,

;

expression statementWHILE DO

expression statementREPEAT UNTIL

;

Variable identifier expression expressionFOR := TO DO

statementDOWNTO

variable statementWITH DO

,

unsigned integerGOTO

function identifier expression

procedure identifier

( )

,

unsigned integer :

variable := expression

function identifier

expression statement statementIF THEN ELSE

<statement> Pascal Syntax Flow Graph

Page 5: 계산모델: 오토마타와 형식언어(부록-찾아보기)

5

letter

digit

<identifier>

letterdigit

<unsigned integer>

<unsigned number>

unsigned integer unsigned integer. unsigned integer E

+

-

constant identifier

unsigned number

NIL

‘ ‘character

<unsigned constant>

constant identifier

unsigned number

‘ ‘character

+

-

<constant>

Pascal Syntax Flow Graph

Page 6: 계산모델: 오토마타와 형식언어(부록-찾아보기)

6

<simple type>

type identifier

identifier

constant constant

)(

,

..

simple type

type identifier

simple type type

type

simple type

field list

,

[ ] OFARRAY

PACKED

FILE OF

SET OF

RECORD END

<type>

identifier

identifier type identifier

constant field list

type

;

,

:

CASE : OF

: ( )

,

;

<field list>

Pascal Syntax Flow Graph

Page 7: 계산모델: 오토마타와 형식언어(부록-찾아보기)

7

<variable>

variable identifier

identifier

field identifier

][

,

.

field identifier

<factor>

unsigned constant

variable

expression

expression

factor

expression

,

(

(

NOT

)function

identifier

)

[ ]

..

,

expression

factor

factor

*

/

DIV

MOD

AND

<term>

Pascal Syntax Flow Graph

Page 8: 계산모델: 오토마타와 형식언어(부록-찾아보기)

8

term

+

+

-

term

- OR

<simple expression>

simple expression

=

simple expression

< > ≥ IN

<expression>

identifier type identifier

identifier

)

,

PROCEDURE

VAR

FUNCTION ,

;

:(

<parameter list>

Pascal Syntax Flow Graph

Page 9: 계산모델: 오토마타와 형식언어(부록-찾아보기)

9

부록 B. 2-way FA 언어를 인식하는1-way FA 만들기

a b. . . .

q0 q0

a b. . . .

Page 10: 계산모델: 오토마타와 형식언어(부록-찾아보기)

10

2-way FA 언어를 인식하는1-way FA 만들기

이 부록은 6.4절에서 언급한 2-way FA가 인식하는 언어는 모두 1-way

FA로 인식할 수 있는 regular 언어임을 증명한다. 증명은 임의의 2-way FA

(간단히 2-FA) M이 주어졌을 때, L(M)을 인식하는 1-way FA (간단히 1-

FA)를 만드는 기법을 제시한다.

관례상 2-FA는 다른 automata의 경우와 같이 input의 가장 왼쪽 symbol을

start state에서 읽기 시작한 후, input의 가장 오른쪽 기호를 읽고 accepting

state에서 우측으로 넘어가면 input string을 accepting 하는 것으로

정의한다. (그림에서 f는 accepting state.)

a b. . . .

q0 f

a b. . . .

(a) Starting configuration (b) Accepting configuration

Page 11: 계산모델: 오토마타와 형식언어(부록-찾아보기)

11

1

23

4 5

(a, R),

(b, R)

(a, L)

(b, L) (a, R)

(b, R)(a, L)

(b, L)

(a, R)

(b, R)

(a) 2-way DFA

a b a

12

33

41

24

55 3 3

(b) A computing profile

Accept!

먼저, 2-way DFA가 input tape 상에서 어떻게 움직이는지 알아보자. (2-

way NFA는 나중에 언급하기로 한다.) 아래 그림 (a)에 있는 2-way DFA를

예로 들자. Input string aba를 주면, 이 automaton는 그림 (b)와 같이

움직이다가 accept 할 것이다. 이 그림이 우리에게 주는 중요한 정보는

tape cell의 경계를 어떤 state로 넘어가고 오는가 하는 일련의 crossing

information이다.

2-FA로 1-FA 만들기예

Page 12: 계산모델: 오토마타와 형식언어(부록-찾아보기)

12

2-FA M의 state 집합을 Q = {1, 2, . . . , n}라 하자. 아래 그림 (a)와 같이

계산 중에 state i로 cell 경계를 좌측으로 넘어온 후, 처음으로 같은

경계를 우측으로 state qi에서 넘어간다면, 이 두 state 쌍 (i, qi)을 crossing

state pair라 부르기로 하자. 만일 M이 우측으로 넘어가지 않으면, qi를

0으로 표시한다. 그림 (b)와 같이 같은 경계상에 있는 n 개의 crossing

state pair를 crossing information (CI)이라 한다.

. . . . . . . .

i

qi

(a) Crossing state pair (i, qi)

. . . . . . . .

1q1

2q2

nqn

•••

(b) Crossing information

2-FA로 1-FA 만들기예

Page 13: 계산모델: 오토마타와 형식언어(부록-찾아보기)

13

. . . . . . .a

Crossing information (CI)의 중요한 특징은 어떤 경계 c 위의 CI를

주면, 2-FA의 state transition function 와 경계 c의 우측에 있는 input

기호를 가지고 다음 경계 c+1 위의 CI를 구할 수 있다는 것이다. 다음

그림은 어떻게 이것이 가능한지 예를 들어 보여 준다.

2

0

3

0

5

0

3

0

3

c c+1

1

2

3

4

5

2

2-FA로 1-FA 만들기예

A

N

I

1

23

4 5

(a, R),

(b, R)

(a, L)

(b, L) (a, R)

(b, R)(a, L)

(b, L)

(a, R)

(b, R)

Page 14: 계산모델: 오토마타와 형식언어(부록-찾아보기)

14

1q1

2q2

3q3

4q4

5q5

0

0

0

0

0

a b a

c0 c1 c2 c3

2-FA의 head가 input의좌측 경계를 넘어가면,

input 기호가 아닌 blank

기호를 읽어 input를

r e j e c t 하고 끝난다 .

따라서, 모든 state i에대하여 crossing state

pair는 (i, 0)이다.

정의한 crossing information을 가지고 2-FA M의 계산을 어떻게 1-FA가

simulate 하는지 예를 들어 보자. Input의 가장 왼쪽 cell 경계상의 CI는

아래 그림이 보여주는 것과 같다.

2-FA로 1-FA 만들기예

1

23

4 5

(a, R),

(b, R)

(a, L)

(b, L) (a, R)

(b, R)(a, L)

(b, L)

(a, R)

(b, R)

Page 15: 계산모델: 오토마타와 형식언어(부록-찾아보기)

15

3

2

5

0

0

1q1

2q2

3q3

4q4

5q5

0

0

0

0

0

q0 4

이제 cell 경계 c0 상의 CI를 가지고 경계 c1 상의 CI를 구한 다음, M이

start state 1에서 첫 input 기호 a를 읽은 후 어떤 state로 우측 cell로

넘어가는지 축적하여 보기로 하자. 이 state를 q0라 이름하였다.

a b a

c0 c1 c2 c3

2-FA로 1-FA 만들기예

1 2

A

N

I

1

23

4 5

(a, R),

(b, R)

(a, L)

(b, L) (a, R)

(b, R)(a, L)

(b, L)

(a, R)

(b, R)

Page 16: 계산모델: 오토마타와 형식언어(부록-찾아보기)

16

a b a

2

0

3

0

5

1

4

3

2

4

3

41q1

2q2

3q3

4q4

5q5

q03

Accept!

c0 c1 c2 c3

아래 그림은 cell 경계 c1의 CI를 가지고 c2 CI를 구한 다음, state q0를

추적하는 과정을 보여준다. 결국, M은 state 1에서 시작하여 2, 4, 3의

순으로 각 경계를 우측으로 건너가 input를 accept 한다.

2-FA로 1-FA 만들기예

2

A

N

I

1

23

4 5

(a, R),

(b, R)

(a, L)

(b, L) (a, R)

(b, R)(a, L)

(b, L)

(a, R)

(b, R)

Page 17: 계산모델: 오토마타와 형식언어(부록-찾아보기)

17

State q0의 crossing sequence 위의

궤적(trace)이 M의 transition

sequence와 일치함을 알 수 있다.

a b a

12

33

41

24

55 3 3

Accept!

2

2

0

3

0

5

1

2

4

4

3

3

4

a b a

3

1

q1

2

q2

3

q3

4

q4

5

q5

0

0

0

0

0

q0

Accept!

2-FA로 1-FA 만들기예

1

23

4 5

(a, R),

(b, R)

(a, L)

(b, L) (a, R)

(b, R)(a, L)

(b, L)(a, R)

(b, R)

Page 18: 계산모델: 오토마타와 형식언어(부록-찾아보기)

18

Algorithm compute_next_CI (c, c’, n, a, ) {

// input: a current CI c, the transition function of a 2-FA, and a.

// c is an integer array of size n, c[i] {0,1, 2, . . , n}.

// Current CI = <(1, c[1]), (2, c[2]), . . ., (n, c[n])>. Output: next CI c’.

for ( i = 1; i <= n; i++ ) {

let (q, d) = ( i, a ); // q {1, 2, . . , n}, d {+1, -1},

if (d == +1 ) c’[i] = q; // crossing to the right in state q;

else let c’[i] = trace_previous_CI (q, a); //if d = -1, trace c and returns

} // the next crossing state qi to put in c‟[i].

} // end algorithm

Computing next CI

이 algorithm은 임의의 cell 경계 위의 CI를 주면 다음 우측 경계 위의

CI를 구한다. 다음 쪽에 있는 함수 trace_previous_CI (q, a)는, M이 state

q에서 a를 읽고 처음 우측 경계를 넘을 때의 state를 return 한다.

2-FA로 1-FA 만들기Algorithm

ac c‟

Page 19: 계산모델: 오토마타와 형식언어(부록-찾아보기)

19

Algorithm trace_previous_CI ( q, a ) // M is reading a in state q.

// CI c, array size n, and transition function are global.

// Set L is used to check if M keeps crossing the left

// boundary back and forth (i.e., enters a loop).

{ let L = { } // To check if M keeps crossing to the left.

do { if (c[q] == 0) then return 0; // M never returns to the right.

if (q L ) then return 0; // M is in looping state

else put q in set L;

let (q, d) = (c[q], a);

} while ( d == -1); // Trace CI while d = -1

return q; // d = +1. M is crossing the right cell boundary in state q;

}

CI Tracing Algorithm

2-FA로 1-FA 만들기Algorithm

ac c‟

Page 20: 계산모델: 오토마타와 형식언어(부록-찾아보기)

20

let integer array c[n] = {0}; // initialize leftmost CI

define an integer array c’[n];

let q0 = 1; // 1 is the start state of M

do {

read next input into a; print (q0); // Output current value of q0.

compute_next_CI (c, c’, n, a );

c = c’ ;

let (p, d) = (q0, a);

if (d == +1) q0 = p;

else q0 = trace_previous_CI (c, n, p, a );

} forever;

아래의 프로그램은, 앞서 보여준 두 algorithm을 function으로 이용하여,

input의 제일 왼쪽 CI를 기점으로 다음 우측 CI를 계산한 후, 이를 이용하여

2-FA의 초기 상태가 우측으로 이동하며 천이하는 state (q0)를 추적한다.

다시 말하며, 이 프로그램은 2-FA M의 계산을 1-FA로 한다.

2-FA로 1-FA 만들기Algorithm

ac c‟

Page 21: 계산모델: 오토마타와 형식언어(부록-찾아보기)

21

제시된 2-FA M의 크기가 유한하므로, 위의 algorithm도 유한하다.

이는 아래 그림이 보여주는 바와 같이 2-FA M과 위의 algorithm

(그림의 A)를 가지고 같은 언어를 인식하는 1-FA를 만들 수 있음을

보여준다.

M

. . . .

(a) 2-FA M

. . . .

M

A

(b) 1-FA accepting L(M)

2-FA로 1-FA 만들기되새김

Page 22: 계산모델: 오토마타와 형식언어(부록-찾아보기)

22

2-FA M의 언어 L(M)을 1-FA로 인식하데 필요한 정보는 CI와 상태

q0이다. 다음 input 기호 a가 주어지면, algorithm에 의하여 다음 CI와 q0를

구할 수 있다. Algorithm은 고정되어 있으므로 CI와 q0가 1-FA의 상태를

결정한다. 따라서 1-FA의 상태 수는 한 CI 내의 n 개의 state에 q0를 더한

n+1 개의 state의 가능한 모든 조합, 즉 (n+1)n+1 개를 넘지 않는다. M의

state 수 n이 유한하므로 (n+1)n+1도 유한 하다.

가능한 (n+1)n+1 개의 (q0, CI)를 C0, C1, C2, . . . 와 같이 이름을 붙이면,

앞서 제시한 algorithm을 가지고 1-FA의 transition graph을 다음과 같이

만들 수 있다. ( C0는 최 좌측 경계상의 CI 이며 1-FA의 start state가 된다.)

a

C0 Ci

1 p

b

C0 Cj

1 q

2-FA로 1-FA 만들기되새김

C0

<p, Ci >a

<q, Cj >b

start

Page 23: 계산모델: 오토마타와 형식언어(부록-찾아보기)

23

지금까지 제시한 방법은 주어진 automaton이 2-DFA인 경우이다. 같은

개념을 2-NFA에도 적용할 수 있다. 같은 input 기호에 대하여 그림과

같이 2개의 nondeterministic transition이 있다면, 이 두 transition에

대응하는 두 CI (그림에서 Cj, Ck) 중의 하나를 nondeterministic 하게

선택하여 이용하는 1-NFA를 만들면 된다.

a

Ci Cj

r s

a

Ci Ck

r qt

r

s

t

(a, R)

(a, L)

(a) 2-NFA

(b) 1-NFA computing CI

<r, Ci>

<s, Cj>a

<q, Ck >a

(c) 1-NFA Transition

2-FA로 1-FA 만들기되새김

Page 24: 계산모델: 오토마타와 형식언어(부록-찾아보기)

24

r

s

t

(a, R)

(a, L)

<r, Ci>

<s, Cj>a

<q, Ck >a

(a, R)

(a) 2-FA transitions (b) 1-FA transitions<t, Cl >

a

앞서 예시한 2-NFA transition graph와 1-NFA transition graph을 비교하여

보면, 2-FA 와 1-FA의 graph가 같은 것처럼 보인다. 아래 그림은 이것이

사실이 아님을 보여준다. 예를 들어, 2-FA의 state t에 looping transition이

있다 해서, 1-FA의 state <q, Ck>에서 looping transition이 만들어지지

않는다. 왜냐하면, 두 CI <q, Ck> 와 <t, Cl>가 다를 수 있기 때문이다.

2-FA로 1-FA 만들기되새김

A

N

I

Page 25: 계산모델: 오토마타와 형식언어(부록-찾아보기)

25

1 2 3

(a,R)

(b,R)

(a,L) (b,L)

(b,R)(a,R)

L(M) = (a+b)ba*

우리가 전통적으로 배우는 1-FA는 다음과 같은 장점이 있다; (1)

Input를 on-line으로 줄 수 있다. 즉, input string을 읽으며 (동시에)

계산할 수 있다. (2) 정확히 input 길이만큼의 계산시간, 즉 순 real time

계산이 가능하다. (3)다른 automata 보다 저렴한 비용으로 hardware를

구현할 수 있다.

반면, 2-FA는 off-line을 전제로 하며, input의 크기보다 시간이 더 걸릴

수 있다. 분석이 복잡하기 때문에 1-FA와 달리 2-FA를 다루는데 쓸 수

있는 기술이 개발되어 있지 않다. 예를 들면, 아래와 같은 비교적 간단한

2-FA가 인식하는 언어가 무엇인지 알아보기도 쉽지 않다. 이러한

이유로 2-FA는 주로 개념적인 model로 소개되고 있을 뿐이다.

2-FA로 1-FA 만들기되새김

Page 26: 계산모델: 오토마타와 형식언어(부록-찾아보기)

26

부록 C. FA 언어의 Regular Expression

구하기: Dynamic programming 기법

1 2

3

ab

a

a,b

b

a*b((a+b) + (a+b)a*b)*

Page 27: 계산모델: 오토마타와 형식언어(부록-찾아보기)

27

FA 언어의 Regular Expression 구하기: Dynamic programming 기법

우리는 7.2장에서 임의의 FA M의 state transition graph을 주면, L(M)을

표현하는 regular expression을 구하는 소위 state elimination 기법을 배웠다.

이 기법은 graph가 비교적 간단할 때, 수작업으로 하기에 적합하나,

프로그램으로 쉽게 구현할 수 있는 체계적인 방법이 아니다.

이 부록은 dynamic programming 기법을 이용하여 프로그램으로

구현하기에 적합한 방법을 소개하기로 한다. 이 방법은 프로그램으로

쉽게 구현할 수 있는 장점은 있지만, 출력으로 얻은 regular expression이

일반적으로 매우 복잡하다는 단점이 있다. 먼저, 이 알고리즘의 개념을

예를 들어 설명하고 , 끝으로 , 형식적인 algor i thm을 소개한다 .

Page 28: 계산모델: 오토마타와 형식언어(부록-찾아보기)

28

• Rij(0) : state i에서 state j로 바로 가는 경로 (즉, edge) 위의 모든 label을

표시하는 regular expression.

• Rij(k) : state k 또는 k보다 작은 state를 거쳐 state i에서 j로 가는 경로

위의 모든 label을 표시하는 regular expression.

1 2

3

ab

a

a,b

b

왼편에 있는 FA의 Rij(0)는 아래와 같다. 모든 state

i에서 input 에 의하여 i로 가는 암묵적인(implicit)

transition이 있음을 기억하자.

R11(0) = a+ R12

(0) = b R13(0) = Ф

R21(0) = Ф R22

(0) = R23(0) =

R31(0) = a+b R32

(0) = a R33(0) = b+

Regular Expression 구하기

정의: FA의 state 이름을 일련번호 1, 2, . . ., n으로 주어졌다 하자.

다음과 같은 표현(notation) 을 정의한다.

Page 29: 계산모델: 오토마타와 형식언어(부록-찾아보기)

29

Rij(0)를 구하면, 모든 k ≥ 1에 대하여 Rij

(k)는 아래의 recursive

expression (재귀 식)으로 구할 수 있다. 이 식은 다음 그림으로 이해할

수 있다.

Regular Expression 구하기

i j

k

Rij(k-1)

Rik(k-1)

Rkk(k-1)

Rkj(k-1)

Rij(k) = Rij

(k-1) + Rik(k-1)(Rkk

(k-1))*Rkj(k-1)

State 1을 시작 state라 하면, accepting state f에 의하여 accept 하는

언어를 표현하는 regular expression은 R1f(n)이다. 각 k 값에 대하여 Rij

(k)를

2차원 matrix로 표현하기로 하고, 위의 DFA가 인식하는 언어를 표현하는

regular expression R13(3)를 구하여 보자.

idea

1 2

3

ab

a

a,b

b

Page 30: 계산모델: 오토마타와 형식언어(부록-찾아보기)

30

j

a+ b Ф

Ф

a+b a b+

1

2

3

1 2 3

i

Rij(0)

Rij(1) = Rij

(0) + Ri1(0)(R11

(0))*R1j(0)

1

2

3

1 2 3

(a+)+(a+ )*(a+)

= a*

Ф+ Ф(a+ )*(a+)

= Ф

(a+b)+(a+b)(a+)*(a+)

= (a+b)(+a*) = (a+b)a*

b+(a+)(a+)*b

= b+a*b = a*b

+Ф(a+)*b =

a+(a+b)(a+)*b

= a+(a+b)a*b

Ф+(a+ )(a+)*Ф

= Ф

+Ф(a+)*Ф =

(b+)+(a+b)(a+)*Ф

= (b+)

Rij(1)

Regular Expression 구하기

1 2

3

ab

a

a,b

b

Page 31: 계산모델: 오토마타와 형식언어(부록-찾아보기)

31

Rij(2) = Rij

(1) + Ri2(1)(R22

(1))*R2j(1)

1

2

3

1 2 3

a*+(a*b)*Ф

= a*

Ф+ *Ф

= Ф

(a+b)a*+

(a+(a+b)a*b)*Ф

= (a+b)a*

(a*b)+(a*b)* =

b+a*b = a*b

+* =

(a+(a+b)a*b)+

(a+(a+b)a*b)* =

a+(a+b)a*b

Ф+(a*b)*

= a*b

+* =

(b+)+

(a+(a+b)a*b)*=

(a+b+)+(a+b)a*b

Rij(2)

1

2

3

1 2 3Rij

(1)

a*

Ф

(a+b)a*

a*b

a+(a+b)a*b

b+

Фi

j

예 Regular Expression 구하기

1 2

3

ab

a

a,b

b

Page 32: 계산모델: 오토마타와 형식언어(부록-찾아보기)

32

1

2

3

1 2 3Rij

(2)

a*

Ф

(a+b)a*

i

j

a*b

a+(a+b)a*b

a*b

(a+b+)+(a+b)a*b

Rij(3) = Rij

(2) + Ri3(2)(R33

(2))*R3j(2)

1

2

3

1 2 3

R21(2) +

R23(2)(R33

(2))*R31(2)

R31(2) +

R33(2)(R33

(2))*R31(2)

R12(2) +

R13(2)(R33

(2))*R32(2)

R22(2) +

R23(2)(R33

(2))*R32(2)

R32(2) +

R33(2)(R33

(2))*R32(2)

R13(2) +

R13(2)(R33

(2))*R33(2)

R23(2) +

R23(2)(R33

(2))*R33(2)

R33(2) +

R33(2)(R33

(2))*R33(2)

R11(2) +

R13(2)(R33

(2))*R31(2)

Rij(3)

예 Regular Expression 구하기

1 2

3

ab

a

a,b

b

Page 33: 계산모델: 오토마타와 형식언어(부록-찾아보기)

33

1

2

3

1 2 3Rij

(2)

a*

Ф

(a+b)a*

i

j

a*b

a+(a+b)a*b

a*b

(a+b+)+(a+b)a*b

예의 automaton의 언어는 state 3에 의하여 accepting 한다. 따라서,

이를 표현하는 regular expression R13(3)을 구하면 다음과 같다.

예 Regular Expression 구하기

R13(3) = R13

(2) + R13(2)(R33

(2))*R33(2)

= (a*b) + (a*b)((a+b+)+(a+b)a*b)*((a+b+)+(a+b)a*b)

1 2

3

ab

a

a,b

b

Page 34: 계산모델: 오토마타와 형식언어(부록-찾아보기)

34

1

3

a

a+b

a+b

b1 2

3

ab

a

a,b

b

State 2 제거

이 결과는, 예의 FA 구조에 견주어 볼 때, 매우 복잡하다. 아래와 같이

우리가 이미 배운 state elimination 기법을 쓰면 같은 언어를 표현하는

비교적 간단한 regular expression을 구할 수 있다. 이는 위의 expression을

아래와 같이 간략하게 할 수 있다는 말이다. 그러나, 임의의 regular

expression을 간략하게 하는 실용적인 algorithm이 없다.

예 Regular Expression 구하기

R13(3) = R13

(2) + R13(2)(R33

(2))*R33(2)

= (a*b) + (a*b)((a+b+)+(a+b)a*b)*((a+b+)+(a+b)a*b)

r3 = (r11)*r13(r33 + r31(r11)

*r13)* = a*b((a+b) + (a+b)a*b)*

Page 35: 계산모델: 오토마타와 형식언어(부록-찾아보기)

35

Algorithm Regular Expression 구하기

//input: state transition graph of M, output: regular expression for L(M)

for (i = 1; i <= n; i++ )

for (j = 1; j <= n; j++ ) //compute R(0)[i][j]

if (i == j)

if ( there are m >= 0 labels a1, . . ., am on i to j edge)

R(0)[i][j]= “+a1+ . . .+am” ; // ““, if m = 0

else // (i j )

if (there are m > 0 labels a1, . . ., am on i to j edge)

R(0)[i][j]= “a1+ . . .+am” ;

else R(0)[i][j]= “Ф” ;

for ( k = 1; k <= n; k++ )

for (i = 1; i <= n; i++ )

for (j = 1; j <= n; j++ )

R(k)[i][j] = R(k-1)[i][j] + R(k-1)[i][k]( R(k-1)[k][k] )*R(k-1)[k][j] ;

output ΣfF R(n)[1][f] ; // F is the set of accepting states

Page 36: 계산모델: 오토마타와 형식언어(부록-찾아보기)

36

부록 D. DCFL의 특성

1. DPDA가 인식할 수 없는 CFL

2. DCFL의 closure (닫힘) 특성

3. Input를 끝까지 읽는 DPDA 와 DFA

Page 37: 계산모델: 오토마타와 형식언어(부록-찾아보기)

37

정리 1. DPDA가 인식할 수 없는 nondeterministic CFL가 있다.

DCFL의 특성

증명 (Nonconstructive proof). Deterministic CFL의 complement 역시

deterministic CFL이다. (이 부분은 다음 정리 2에서 증명한다.) CFL의

complement는 CFL가 아닌 경우가 있음을 9장의 CFL 특성에서

증명했다. 이는 CFL 중에는 DCFL가 아닌, 즉 DPDA에 의하여 인식할

수 없는 언어가 있다는 뜻이다. •

DCFL 모음(class)을 LDCFL라 하고, CFL 모음을 LCFL라 하자. 아래

정리 1은 LDCFL LCFL임을 보여준다. 이는 CFL 중에는 DPDA가 인식할

수 없고, NPDA가 인식할 수 있는 언어가 있다는 뜻이다. 다음 정리는 두

방법으로 증명할 수 있다. (흥미 있는 방법이므로, 둘 다 소개한다.)

1. DPDL가 아닌 CFL

Page 38: 계산모델: 오토마타와 형식언어(부록-찾아보기)

38

DCFL의 특성

정리 1의 constructive proof를 제시하기 전에, 다음과 같은 lemma를

도입한다. DPDA의 동작을 단순화하는 이 lemma는 DCFL의 여러

특성을 증명하는 정리 2에서도 필요하다.

Lemma 1 (Normal form PDA). 모든 CFL는 다음의 조건을 만족하는 PDA

M에 의하여 인식할 수 있다.

(1) Stack을 비우지 않는다. (즉, 바닥기호 Z0 를 pop하지 않는다),

(2) Push 할 때는 한 개의 문자 만 push 한다.

(3) 현재의 stack-top 기호는 바꾸지 않는다.

증명 (non-constructive): M = (Q, , , , q0, Z0, F) 이라 하고, p, q Q, A,

B , a {}라 하자. M이 조건 (1)를 만족하지 않는, 즉 stack을

비우는 transition이 있다고 하자.

DCFL가 아닌 CFL

Page 39: 계산모델: 오토마타와 형식언어(부록-찾아보기)

39

Stack을 비우고 나면, 후속 transition이 있을 수 없으므로, 아래의

그림이 예시하는 것처럼, 새로운 stack symbol X0을 도입하여, Z0를 pop

하는 대신, 이를 push 하도록 M의 state transition을 수정하면 된다.

(이렇게 수정하더라도, M이 인식하는 언어에는 변함이 없다.)

(. , z0 / )

(. , z0 / )

start

(. , z0 / X0z0 )

(. , z0 / X0z0 )

start

DCFL의 특성DCFL가 아닌 CFL

Page 40: 계산모델: 오토마타와 형식언어(부록-찾아보기)

40

s t

(a, Z0/AaBZ0)

(a)

s

(a, Z0/BZ0)

t

(, B/aB)

(, a/Aa)

(b)

조건 (2)을 갖더라도 PDA의 언어인식 능력에 영향을 주지 않음을

이미 4.3절에서 보여준 바 있다. 아래 그림 (a)와 같이 push 할 때 stack 의

높이에 대한 조건을 만족하지 않는 transition이 있다면, 그림 (b)와 같이

간단히 state를 추가하여 조건에 맞도록 변환할 수 있다. 이러한 변환은

인식하는 언어에 영향을 주지 않음을 알 수 있다.

DCFL의 특성DCFL가 아닌 CFL

Page 41: 계산모델: 오토마타와 형식언어(부록-찾아보기)

41

DCFL의 특성

이제, 조건 (1)과 (2)를 만족하고, 조건 (3)을 어겨, stack-top 기호를

바꾸는 PDA M이 있다 하자. 조건 (1)-(3)을 만족하며 L(M)을 인식하는

PDA M´을 만든다. M´은 아래의 그림과 같이 M의 stack-top 기호를 finite

state control에 저장하고 M을 simulate 한다. (그림에서 A, B, C, D은 모두

stack 기호이며, 좌측 끝 그림은 초기의 상황을 보여준다.) •

(a) M

(b) M´

Z0 .. BA .. BC .. BDA

.. B

A

.. B

C

.. BD

A

Z0A

Z0

Z0

A

Z0

A

N

I

DCFL가 아닌 CFL

Page 42: 계산모델: 오토마타와 형식언어(부록-찾아보기)

42

이제 정리 1을 constructive 한 방법으로 증명하자.

증명 (Constructive proof). Palindrome 언어 L = { wwR | w {a, b}+ }은

DPDA가 인식할 수 없는 CFL임을 증명한다. 언어 L을 인식하는 normal

form DPDA M이 있다고 하자. M이 input string x를 다 읽었을 때의 state를

qx, 이때의 stack top 기호를 Ax라 하자. 이 string x의 끝에 임의의 string z를

붙여 만든 xz를 input로 두더라도, 아래 그림이 예시하듯이, z를 읽어

처리하는 과정에, Ax를 pop 하지 않는다고 하자. 이러한 stack symbol Ax와

이 기호를 stack에 push 했을 때의 state qx의 쌍을 [qx, Ax]로 표기하기로

한다.

DCFL의 특성

x

Z0 Ax

z

tqx

Z0 Ax

x

[qx, Ax]

DCFL가 아닌 CFL

Page 43: 계산모델: 오토마타와 형식언어(부록-찾아보기)

43

M이 DPDA이므로 string x에 대하여 제시한 조건을 만족하는 쌍 [qx,

Ax]은 유일하다. 증명의 핵심은, M이 주어진 palindrome 언어 L을

인식할 수 있는 DPDA라면, 두 개의 다른 string x와 y에 대하여 같은 쌍

[qx, Ax] = [qy, Ay]이 존재함을 증명하는 것이다.

이러한 string x와 y가 있다면, xz L, yz L 가 되도록 하는 string

z를 찾을 수 있다. 두 input xz와 yz를 처리하는 과정에 M은 같은 state (즉,

qx = qy )와 같은 stack-top 기호 (즉, Ax= Ay )를 가지고 z를 읽게 되며, 이

과정에서 Ax 밑의 stack 기호에는 접근하지 않는다.

DCFL의 특성DCFL가 아닌 CFL

x

Z0 Ax

z

qx

y

Z0 Ay

z

qy[qx, Ax] = [qy, Ay]

Page 44: 계산모델: 오토마타와 형식언어(부록-찾아보기)

44

따라서, M은 DPDA이므로, 두 string xz와 yz를 모두 accept 하든지

reject 해야 한다. 그렇지만, xz L, yz L이므로 M이 언어 L을

인식하는 DPDA라는 가정에 모순이다.

그렇다면, 위와 같은 string x, y, z가 있음을 증명하는 일이 남았다.

이 목적으로 M이 하는 일을 좀 더 분석해 보기로 하자.

DCFL의 특성DCFL가 아닌 CFL

x

Z0 Ax

z

qx

y

Z0 Ay

z

qy[qx, Ax] = [qy, Ay]

Page 45: 계산모델: 오토마타와 형식언어(부록-찾아보기)

45

String u {a, b}+를 input에 둘 때, M이 u를 처리한 후, stack에 남는

내용을 u라 하자 (그림 (a) 참조). 그리고 v {a, b}*를 u의 끝에 붙여

놓았을 때, u를 가장 많이 축소하는 string이라 하자 (그림 (b)).

u

Z0

u

(a)

u v

Z0

uv

(b)

quv

다시 말하면, v는 |u| - |uv|를 최소로 만드는 string이다. 따라서 input

u를 처리한 후, 어떤 string v’을 u의 끝에 붙이더라도 M은 uv의 내용을

pop 하지 않는다. String u에 따라, 이러한 string v는 여러 개 있을 수

있으며, v = 일 수도 있다.

DCFL의 특성DCFL가 아닌 CFL

Page 46: 계산모델: 오토마타와 형식언어(부록-찾아보기)

46

Input uv를 다 읽은 직후의 state를 quv, uv에 있는 stack-top 기호를 Auv라

하고, 그 쌍을 [quv, Auv]라 표기하기로 하자. 다음과 같은 두 set을 정의한다.

M의 state set Q와 stack alphabet 의 크기가 유한하므로 set S의 크기도

유한하다. 그러나, u {a, b}+의 수, 즉 |{a, b}+|이 무한하고, 각 u에 대하여

적어도 하나의 v가 있으므로, T의 크기는 무한하다.

S = { [quv, Auv] | u {a, b}+, v {a, b}*는 |u| - |uv|를 최소로 한다 }

T = { uv | u {a, b}+, v {a, b}* and |u| - |uv|를 최소로 한다 }

DCFL의 특성DCFL가 아닌 CFL

u

Z0

u

(a)

u v

Z0

uv

(b)

quv

Page 47: 계산모델: 오토마타와 형식언어(부록-찾아보기)

47

S의 크기가 유한하며, T가 무한하고, 각 string x T에 대하여 하나의

쌍 [qx, Ax] S이 있으므로, 두 다른 string x, y T에 대하여 같은 쌍,

즉 [qx, Ax] = [qy, Ay]이 있다.

이제, 언어 L = { wwR | w {a, b}+ }과, 위의 두 string x와 y를 가지고

xz L이고, yz L인 string z를 다음과 같이 찾는다.

(1) |x| = |y|일 때. z = xR로 두면, xz = xxR L, yz = yxR L.

(2) |x| |y|일 때. |x| < |y|라 가정한다. (달리 가정하더라도 같은 논리가

적용된다.) String y를 두 부분으로 나누어 y = y1y2이며 |y1| = |x|가 되도록

한다. 이제 string y2와 길이는 같지만 내용이 다른 (즉, |w| = |y2|, w y2 )

string w를 선택하여 z = wwRxR 를 만든다. xz = xwwRxR L. 반면, yz =

y1y2wwRxR L. 왜냐하면, |y1| = |x|, |w| = |y2|, w y2이므로, 언어 L의

palindrome 특성을 만족하지 못하기 때문이다.

DCFL의 특성DCFL가 아닌 CFL

Page 48: 계산모델: 오토마타와 형식언어(부록-찾아보기)

48

x

Z0 Ax

z

qx

y

Z0 Ay

z

qy[qx, Ax] = [qy, Ay]

DCFL의 특성DCFL가 아닌 CFL

M은 deterministic PDA이고, [qx, Ax] = [qy, Ay]이므로, 두 input string

xz와 yz를 모두 accept 하든지, reject 해야 한다. 왜냐하면, M은 같은

state qx = qy, 같은 stack top symbol Ax = Ay을 가지고, 같은 input string

z를 읽으며 stack top symbol의 밑에 있는 정보에 접근하지 않고

동작하기 때문이다. 따라서, M은 L을 인식할 수 없다. L은 DCFL이

아니다.

Page 49: 계산모델: 오토마타와 형식언어(부록-찾아보기)

49

Rumination: DCFL가 아닌 CFL

우리는 5.2절(예 2)에서 언어 L = { wwR | w {a, b}+ }이 NDPA에 의하여 인식할 수 있는 CFL라는 것을 이미 배웠다. 위의

긴 증명에서 DPDA의 결정성(determinism)을 반영한 곳을 놓칠 수가 있어, 이곳에서 되짚어 보고자 한다. 증명을 자세히

보면, state, stack symbol 쌍 [qx, Ax]을 도입하면서 다음과 같이 determinism을 언급한 것을 볼 수 있다:

M 이 DPDA 이므로 string x에 대하여 이런 조건을 만족하는 쌍

[qx, Ax]은 유일하다.

만일 M이 NPDA 면, string x에 대하여 하나 이상의 쌍 [qx, Ax]가 있을 수 있기 때문에 string xz를 input로 두면, 이들 중

어떤 것은 accept 하고 다른 것은 reject 할 수 있다. 따라서 NPDA의 경우 위의 증명이 성립하지 않는다.

DCFL의 특성

Page 50: 계산모델: 오토마타와 형식언어(부록-찾아보기)

50

정리 2. Deterministic CFL는 set operation에 대하여 다음과 같은 특성을 갖고 있다.

L1과 L2를 임의의 DCFL, R을 임의의 regular 언어라 하자.

(1) L1 R 역시 DCFL 이다.

(2) L1 의 complement 역시 DCFL 이다.

(3) L1 L2와 L1 L2는 DCFL가 아닐 경우가 있다. 즉, DCFL는 union과

intersection에 대하여 닫혀있지 않다(not closed).

증명. Regular 언어 R을 인식하는 DFA를 A, 그리고 DCFL L1과 L2를

인식하는 normal form DPDA를 각각 M1와 M2라 하자. 이들 automata

들은 accept 하든 reject 하든 input string을 끝까지 읽는다고 가정한다. 이

가정이 정당한 이유는 긴 설명이 필요하므로, 본 증명을 모두 마치고

별도로 제시하기로 한다.

DCFL의 특성

2. DCFL의 특성

Page 51: 계산모델: 오토마타와 형식언어(부록-찾아보기)

51

DCFL의 특성

증명 (1). L1 R 역시 DCFL 이다.

두 automata M과 A를 가지고 L1 R를 인식하는 DPDA M´을 다음과

같이 만든다. M´은 finite state control에 A를 두고 M이 input를 읽을

때마다 A의 transition을 simulate 하여 A의 현 state (qc)를 기억해 둔다.

( DPDA M´은 input를 읽지 않을 때도 있다는 것을 기억하자.) DPDA

M´은 M과 A가 동시에 accepting state에 있을 때에만 accepting state에

있고 그렇지 않을 때는nonaccepting state에 있도록 한다. 두 automata 모두

input string을 끝까지 읽기 때문에 DPDA M´은 L1 R를 인식한다.

증명: DCFL의 closure 특성

x

A MM´qc

Page 52: 계산모델: 오토마타와 형식언어(부록-찾아보기)

52

DCFL의 특성

증명 (2). L1의 complement 역시 DCFL 이다.

이를 증명하려고, regular 언어의 complement 언어를 인식하는 DFA를

만들 때처럼 (9.1 절 참조), 간단히 accepting state를 nonaccepting,

nonaccepting state를 accepting state로 바꿀 수 없다. 그 이유를 알아보자.

아래 그림과 같이 DPDA M이 input를 읽지 않고 하는 일련의 transition을

고려하여 보자. State p로 진입하며 읽은 기호 a가 input string x의 끝

기호이면, 정의에 의하여, M은 string x를 accept 한다. 왜냐하면, input를 다

읽은 후 accepting state에 있기 때문이다. 마지막 기호를 읽으며 진입한

state p가 accepting state일 필요가 없다. 그림과 같이 input를 읽지 않고

stack 내용만을 가지고 하는 -transition이 가능하기 때문이다.

p

(a, ./..)

(, ./..) (, ./..) (, ./..) (b, ./..)

증명: DCFL의 closure 특성

Page 53: 계산모델: 오토마타와 형식언어(부록-찾아보기)

53

DCFL의 특성

이러한 DPDA를 아래 그림 (b)와 같이 accepting state를 nonaccepting

state로 nonaccepting state를 accepting state로 전환했다고 하자. M은

state p로 진입하며 accept 했던 string을 reject 하지 않고 accept 한다.

p(a, ./..)

(, ./..) (, ./..) (, ./..) (b, ./..)

(a)

p(a, ./..)

(, ./..) (, ./..) (, ./..) (b, ./..)

(b)

이 문제를 해결하려고, M을 simulate 하면서 L(M)의 complement를

accept 하는 DPDA M´을 만들기로 한다. (물론 DPDA M을 M´으로

전환하는 방법을 택할 수도 있으나 증명이 복잡하다.)

증명: DCFL의 closure 특성

Page 54: 계산모델: 오토마타와 형식언어(부록-찾아보기)

54

DCFL의 특성

DPDA M´은 L(M)의 complement를 인식하려고 다음과 같이 두 경우

(a)와 (b)로 나누어 M을 simulate한다. M에 input string x가 주어졌다

하자.

(a) M이 input (그림의 a)를 읽고 다음 input (그림의 b)를 읽기까지

accepting state에 진입한 적이 없으면, M´은 일단 accepting state에 들어간

후, M의 다음 input를 읽는 transition을 simulate 한다. 이는 그림과 같이

state p에 진입 하며 읽은 기호 a가 input string x의 마지막 기호일 경우 M은

string x를 accept 하지 않으므로, M´은 x를 accept 하려는 것이다.

p q(a, ./..)

(, ./..) (, ./..) (, ./..) (b, ./..)

증명: DCFL의 closure 특성

Page 55: 계산모델: 오토마타와 형식언어(부록-찾아보기)

55

(b) 만일 M이 input를 읽고 다음 input를 읽기까지 accepting state에 진입한

적이 있으면, M´은 (accepting state에 진입하지 않고) 다음 input 기호를

읽는 (그림의 state q에서 b를 읽는) transition을 simulate한다.

이와 같이 M을 simulate 하려고, M´은 finite state control에 M이 accepting

state에 진입했었는지를 기록하는 register를 두고, 자신의 stack으로 M의

stack을 대신한다.

DCFL의 특성증명: DCFL의 closure 특성

p q(a, ./..)

(, ./..) (, ./..) (, ./..) (b, ./..)

Page 56: 계산모델: 오토마타와 형식언어(부록-찾아보기)

56

DCFL의 특성증명: DCFL의 closure 특성

증명 (3). L1 L2와 L1 L2는 DCFL가 아닐 수 있다. 즉, DCFL는

intersection과 union에 대하여 닫혀있지 않음을 (not closed) 증명한다.

아래의 L1과 L2는 DCFL (다음 쪽 DPDA 참조)이지만, 이 두 언어의

intersection L1 L2 = {aibici | i 1}는 CFL가 아닌 CSL 이다 (12.4절 참조).

L1 = {aibick | i, k 1 }, L2 = {aibkck | i, k 1 }

L1 L2가 DCFL이 아님을 증명하려고 다음 등식을 이용한다.

L1 L2 = L1 L2 = L1 ∪ L2 = {aibici | i 1}

L1과 L2가 DCFL이므로 이들의 complement L1과 L2 역시 DCFL의 특성

(1)에 따라 DCFL이다. 만일 L1∪ L2가 DCFL이면, 역시 특성 (1)에 의하여

언어 {aibici | i 1}가 DCFL라는 결론에 이른다. 모순이다. 따라서

두 DCFL의 공집합이 DCFL가 아닐 수도 있다.

Page 57: 계산모델: 오토마타와 형식언어(부록-찾아보기)

57

DCFL의 특성증명: DCFL의 closure 특성

(a, Z0/aZ0),

(a, a/aa)

(b, a/)

(b, a/)

(c, Z0/Z0)

(c, Z0/Z0)

(a) DPDA accepting

L1 = {aibick | i, k 1 }

(a, Z0/Z0)

(c, b/)

(, Z0/Z0)

(a, Z0/Z0),

(b, Z0/bZ0),(b, b/bb)

(c, b/)

(b) DPDA accepting

L2 = {aibkck | i, k 1 }

Page 58: 계산모델: 오토마타와 형식언어(부록-찾아보기)

58

3. Input를 끝까지 읽는 DPDA 와 DFA

이제 마지막으로 정리 2를 증명할 때의 가정, 즉 다음 lemma를

증명한다.

증명. 우리는 automata를 정의할 때, 어떤 state에서 transition에 없는 input

기호가 읽히면, (끝까지 읽을 필요 없이) input string은 즉시 reject 된다고

하였다. (이렇게 암묵적으로 reject 하는 transition은 편의상 표시하지

않기로 하였다.) 따라서 input를 다 읽도록 하려면 이렇게 정의되진 않은

transition은 새로 도입한 „dead state‟로 보내어 input를 다 읽도록 하면 된다.

DCFL의 특성

Lemma 2. 모든 DCFL 와 regular 언어는 input string을 끝까지 읽는

DPD와 DFA에 의하여 각각 인식할 수 있다.

Page 59: 계산모델: 오토마타와 형식언어(부록-찾아보기)

59

우리는 9.1 절에서, DFA가 인식하는 언어의 complement(보) 언어를

인식하는 DFA를 만들 때, 아래 그림과 같이 dead state (그림의 d)를

도입하여 input를 다 읽도록 하는 방법을 이용한 적이 있다. 이 방법을

쓰면 모든 DFA는 input string을 다 읽도록 할 수 있다.

DCFL의 특성

a b

start

db

a

a, b

a, b

Input를 끝까지 읽는 DFA와 DPDA

DPDA의 경우, DFA와 달리, input string을 다 읽게 하는 것은 쉽지 않다.

문제는 DPDA에는 input를 읽지 않는 -transition이 있을 수 있기

때문이다. (DFA는 다른 두 state 사이에 -transition이 없다는 것을

기억하자.)

A

N

I

Page 60: 계산모델: 오토마타와 형식언어(부록-찾아보기)

60

DCFL의 특성

먼저 DPDA의 transition graph 상에서 정의되지 않은 transition을 찾아

DFA의 경우와 같이 dead state로 보내어 input의 나머지 부분을 모두 읽도록

하는 방법을 검토하여 보자. PDA M = (Q, , , , q0, Z0, F)이 deterministic

PDA가 되려면, 는 다음 조건을 만족해야 한다는 것을 기억하자.

(1) 임의의 p Q, a , A 에 대하여 (p, a, A)는 하나의 값 만

주거나, 정의되어 있지 않을 수 있다.

(2) (p, a, A)와 (p, , A)는 동시에 정의될 수 없다.

Input를 끝까지 읽는 DFA와 DPDA

M에 두 transition (p, , A)과 (p, a, A)이 모두 정의되어 있지 않다면,

(state P에서 a를 읽으면, reject 한다는 뜻이므로) DFA의 경우와 같이, a를

읽어 dead state로 가서 나머지 input를 모두 읽도록 한다.

Page 61: 계산모델: 오토마타와 형식언어(부록-찾아보기)

61

DCFL의 특성

= {a, b}

= {A, Z0}

( a, A/A )

1 2 3 4(a, Z0 /AZ0)

( a, A/AA )

( b, A/ )

( b, A/ )

(, Z0 /Z0)

start

(b, Z0 /Z0), d

(X, Y/Y ) (X, A/A)

(X, Z0 /Z0)

(X, A/A ),(X, Z0 /Z0)

아래의 DPDA는 자주 예로 드는 언어 {aibi | i > 0 }를 인식한다. 각 state

i에서 transition이 정의되지 않은 stack-top 기호 A 를 찾아 dead state

d로 가는 transition (i, a, A) = (d, A)를 추가하고, state d에서 input의

나머지 부분을 모두 읽도록 하였다.

X {a, b}

Y {A, Z0}

Input를 끝까지 읽는 DFA와 DPDA

Page 62: 계산모델: 오토마타와 형식언어(부록-찾아보기)

62

예의 DPDA를 분석하여 보면, state 1에서 stack-top 기호 A가 나타날 수

없고, state 2에서 stack 바닥 기호 Z0가, 그리고 state 4에서 A가 stack-

top에 나타날 수 없다. 따라서 이들 stack 기호에 대한 dead state에로의

transition을 정의할 필요가 없으므로 원하면 그림과 같이 이들

transition을 제거할 수 있다.

DCFL의 특성

(X, A/A)

(X, Z0 /Z0)

(X, A/A)

( a, A/A )

(X, Z0 /Z0),

1 2 3 4(a, Z0 /AZ0)

( a, A/AA )

( b, A/ )

( b, A/ )

(, Z0 /Z0)

start

(b, Z0 /Z0), d

(X, Y/Y )

= {a, b}

= {A, Z0}

X {a, b}

Y {A, Z0}

Input를 끝까지 읽는 DFA와 DPDA

A

N

I

Page 63: 계산모델: 오토마타와 형식언어(부록-찾아보기)

63

DCFL의 특성

앞의 예와 같은 방법으로 DPDA를 수정했다고 하여 input를 다 읽는다고

보장할 수 없을 수가 있다. DPDA가 input를 읽지 않은 동작, 즉 -

transition이 무한히 반복될 때이다.

아래 그림(a)를 예로 들어 보자. 일단 A를 push 하여 state 1에 진입하거나

stack-top에 B, 그 밑에 A를 두고 state 4로 진입하면, DPDA는 input를

읽지 않고, 그림 (b)와 같이 stack operation만 무한히 반복한다.

A..

CD..

D..

A..

BA..

(b)(a)

2

34

(, A/CD)

(, C/ )

(, D/BA)

(, B/)

(a, Z0/AZ0)

(b, E/BA)

1

Input를 끝까지 읽는 DFA와 DPDA

Page 64: 계산모델: 오토마타와 형식언어(부록-찾아보기)

64

DPDA의 transition graph에 -transition cycle이 존재하고 cycle 상에

accepting state가 없다면, 이러한 cycle에 진입하는 transition을 그림 (b)와

같이 dead state d로 보내어 그곳에서 input를 끝까지 읽도록 할 수 있다.

(a)

2

34

(, A/CD)

(, C/ )

(, D/BA)

(, B/)

(a, Z0/AZ0)

(b, E/BA)

1

(b)

2

34

(, A/CD)

(, C/ )

(, D/BA)

(, B/)

1

(a, Z0/AZ0)

(b, E/BA)

d

(X, Y/ Y)

X

Y

DCFL의 특성Input를 끝까지 읽는 DFA와 DPDA

A

N

I

Page 65: 계산모델: 오토마타와 형식언어(부록-찾아보기)

65

만일 transition graph의 -transition cycle 내에 accepting state가 있다면

(예: state 3), 다음 그림과 같이 accepting state를 거친 후에 dead state로

가도록 하면 된다. 이렇게 수정한 DPDA도 같은 언어를 인식한다.

(b)

(, C/ )

(a)

2

34

(, A/CD)

(, D/BA)

(, B/)

(a, Z0/AZ0)

(b, E/BA)

1

X

Y

2

34

(, A/CD)

(, C/ )

(, D/BA)

(, B/)

1

(a, Z0/AZ0)

(b, E/BA)

d

(X, Y/ Y)

(, B/B)

(, A/A)

DCFL의 특성Input를 끝까지 읽는 DFA와 DPDA

A

N

I

Page 66: 계산모델: 오토마타와 형식언어(부록-찾아보기)

66

앞의 예는 input를 끝까지 다 읽지 않는 DPDA M이 있다면, input를

끝까지 읽으면서 같은 언어 L(M)을 인식하는 DPDA M´을 만들 수

있음을 보여준다. 따라서 우리는 다음과 같은 주장을 할 수 있다. •

Regular 언어와 DCFL는 각각 DFA와 DPDA가 input를 끝까지

읽으며 인식할 수 있다.

DCFL의 특성Input를 끝까지 읽는 DFA와 DPDA

Page 67: 계산모델: 오토마타와 형식언어(부록-찾아보기)

67

Rumination: Input를 끝까지 읽는 DFA와 DPDA

(2) M의 transition이 -transition cycle에 진입했다고 하여 M이 input를 다 읽지 않고 reject 한다고 할 수 없다. 아래

그림에서 state 2로 진입한 transition의 경우state 3을 거쳐 빠져나간다. 그러나 state 1로 진입한 경우는 무한 loop에 빠져

input를 끝까지 읽을 수 없다.

1

2

3

4

(, A/CD) (, C/ )

(, D/BA)(, B/ )

(a, Z0/AZ0)

(b, E/CE)

(a, E/ )

DCFL의 특성

(1) 앞서 DPDA M의 언어 L(M)의 complement를 인식하는 DPDA M´을 simulation 방법에 의하여 만들 때, M이 -

transition 할 경우에 M´은 M의 accepting 상태에 있었는지 만 기록하고 실제로 transition을 할 필요가 없다. 따라서 M´은

-transition 없이 M을 simulate 할 수 있다. 따라서 모든 DCFL는 -transition 없는 DPDA에 의하여 인식할 수

있다.

Page 68: 계산모델: 오토마타와 형식언어(부록-찾아보기)

68

부록 E. Pumping Lemma를 만족하는Non-regular Language

L1 = {x | x {a, b}*, x는 부 문자열 aa 또는 bb를 갖고 있지 않다.}

L2 = {x | x {a, b}*, |x| = p, p는 prime(소수) }

L1 = {a, b}* - L1 // complement of L1

L = ( L1 L2 ) L1 // pumping lemma를 만족하는 non-regular language

Page 69: 계산모델: 오토마타와 형식언어(부록-찾아보기)

69

부록 E. Pumping Lemma를 만족하는Non-regular Language

12.2절은 크기가 무한한 regular language는 모두 pumping lemma를

만족 한다는 것을 증명했다. 우리는 다음과 같은 질문을 할 수 있다.

Pumping lemma를 만족하는 non-regular language가 있나?

아래의 언어 L은 이 질문의 답이 긍정적임을 보여준다. (이 예는 RPI의

Robert McNaughton 교수가 제공한 것임.)

L1 = {x | x {a, b}*, x는 부 문자열 aa 또는 bb를 갖고 있지 않다.}

L2 = {x | x {a, b}*, |x| = p, p는 prime number(소수) }

L1 = {a, b}* - L1

L = ( L1 L2 ) L1

L1은 regular expression (ab)* + b(ab)* + (ab)*a + (ba)*으로 표현할 수

있으므로 regular 언어다. 따라서 L1의 complement L1도 regular이다.

Page 70: 계산모델: 오토마타와 형식언어(부록-찾아보기)

70

Pumping lemma를 만족하는 non-regular 언어증명

먼저, L이 regular 언어가 아님을 증명한다. L이 regular 언어라 하자.

Regular 언어의 성질에 의하여 L1이 regular이므로, regular 언어의

특성에 따라 L - L1 = L1 L2 역시 regular 언어이며, pumping lemma를

만족해야 한다. Pumping lemma의 상수를 n이라 하고, n보다 긴 string z를

L1 L2에서 선택하여 z = uvw라 쓰자. (단, |uv| n, |v| ≥ 1).

L1 = {x | x {a, b}*, x는 부 문자열 aa 또는 bb를 갖고 있지 않다.}

L2 = {x | x {a, b}*, |x| = p, p는 prime number(소수) }

L1 = {a, b}* - L1

L = ( L1 L2 ) L1

Page 71: 계산모델: 오토마타와 형식언어(부록-찾아보기)

71

이제, string z = uvw를 pump 하여 z’ = uvpj+1w를 만든다. 정수 p = |z|는

L2의 조건에 의하여 prime number이며, j = |v|이다. Pumping 결과 string

z’의 길이는 |z’| = p + |v|pj = p(1 + j2 )이므로 prime number가 아니다.

따라서, z’ L1 L2. L1 L2는 pumping lemma를 만족하지 않으므로

regular 언어가 아니다.

L1 = {x | x {a, b}*, x는 부 문자열 aa 또는 bb를 갖고 있지 않다.}

L2 = {x | x {a, b}*, |x| = p, p는 prime number(소수) }

L1 = {a, b}* - L1

L = ( L1 L2 ) L1

Pumping lemma를 만족하는 non-regular 언어증명

L이 regular 언어이면, regular 언어의 특성에 따라, L – L1 = L1 L2도

regular 언어인데, 모순이다. 따라서, L은 regular 언어가 아니다.

Page 72: 계산모델: 오토마타와 형식언어(부록-찾아보기)

72

Pumping lemma를 만족하는 non-regular 언어증명

이제, 언어 L이 pumping lemma를 만족한다는 것을 증명한다. Pumping

lemma의 상수 n보다 짧지 않은 string z L를 선택하고, z = c1c2c3x라

하자. (단, ci {a, b}, x {a, b}*, |x| ≥ n - 3.) 증명을 위하여 상수 n과,

다음 조건을 만족하는 string u, v, w가 있음을 보여주면 된다.

(i) z = uvw (ii) |uv| n (iii) |v| ≥ 1

(iv) For all i ≥ 0, uviw L

Pumping lemma가 만족하지 않는다는 것을 증명할 때와 달리, 특정한

상수 n과, 조건 (i) – (iii)을 만족하는 특정한 string u, v, w에 대하여, 조건

(iv)를 만족한다는 것을 보이는 것으로 충분하다.

L1 = {x | x {a, b}*, x는 부 문자열 aa 또는 bb를 갖고 있지 않다.}

L2 = {x | x {a, b}*, |x| = p, p는 prime number(소수) }

L1 = {a, b}* - L1

L = ( L1 L2 ) L1

Page 73: 계산모델: 오토마타와 형식언어(부록-찾아보기)

73

Pumping lemma를 만족하는 non-regular 언어증명

경우 2: c1 = c2 (즉, z L1). u = c1c2, v = c3, w = x라 두어 pump 하면,

모든 i에 대하여 z‟ = uviw L (실제로 z‟ L1).

Lemma의 상수로 n = 3을 택하고, 가능한 다음 세 경우를 분석하여 보자.

경우 1: c1 c2 c3 (즉, z = abax, 혹은 z = babx). u = c1, v = c2, w = c3x라

두고 pump 하면, 모든 i ≥ 0에 대하여, z‟ = uviw L (실제로 i 1이면,

z‟ L1, i = 1이면, z’ = z L ).

경우 3: c2 = c3 (즉, z L1). u = , v = c1라 두고 pump 하면, 경우 2와

같이 모든 i에 대하여 z‟ = uviw L.

따라서 L은 pumping lemma를 만족한다.

L1 = {x | x {a, b}*, x는 부 문자열 aa 또는 bb를 갖고 있지 않다.}

L2 = {x | x {a, b}*, |x| = p, p는 prime number(소수) }

L1 = {a, b}* - L1

L = ( L1 L2 ) L1

Page 74: 계산모델: 오토마타와 형식언어(부록-찾아보기)

74

Pumping lemma를 만족하는 non-regular 언어

Rumination: 증명

L1 = {x | x {a, b}*, x는 부 문자열 aa 또는 bb를 갖고 있지 않다.}

L2 = {x | x {a, b}*, |x| = p, p는 prime number(소수) }

L1 = {a, b}* - L1

L = ( L1 L2 ) L1

위에 제시한 pumping lemma를 만족하는 non-regular language는 매우 흥미있는 구조를 가지고 원하는 증명을 가능하게

한다. L1은 regular 언어이고, 그 특성에 의하여 L1의 complement도 regular이다. L2와 L1 L2 모두 regular 언어가 아니다.

L2를 이런 특성이 있도록 만들었다. (일반적으로 regular 언어와 non-regular 언어의 공집합 (intersection)은 regular 언어일

수도 있음에 유의하자.) L이 non-regular라는 증명의 핵심은, L이 regular이면, L – ( complement of L1 ) = L1 L2도 regular

언어이어야 한다는 모순을 보인 것이다.

L이 pumping lemma를 만족한다는 증명이 가능한 것은, L의 구조가 L = ( L1 L2 ) ( complement of 와 L1 )처럼

만들어, L1의 일부 (즉, L2 의 특성을 공유하는 것들)와 L1의 complement를 모두 갖게 하였기 때문이다. Pumping lemma를

적용하여 pump 할 때, 선택한 string z가 L1 L2에 있는 것이면, pump 한 결과인 string z’이 L1의 complement에 있도록

하거나, L1 L2에 남는다. 반대로 z가 L1의 complement에 있는 것이면, z’은 L1 L2에 속하거나, L1의 complement에

속하게 한다.

이 증명으로 미루어, 어떤 언어가 pumping lemma를 만족한다 해서, regular 언어라고 말할 수 없다.

Page 75: 계산모델: 오토마타와 형식언어(부록-찾아보기)

75

부록 F. CYK Algorithm

Input: a CFG G = (VN, VT, P, S), x VT

Output: yes ( x L(G)), or no (x L(G))

Page 76: 계산모델: 오토마타와 형식언어(부록-찾아보기)

76

부록 F. CYK Algorithm

CFG G가 있을 때, 임의의 string w가 w L(G)인지를 결정하는, 소위

membership test problem은 compiler와 직결된 중요한 문제이다. 주어진

string w의 길이가 n이라 하자. 길이가 n인 string을 생성하는 가능한 모든

parse tree를 만들어 string w를 생성하는 tree가 있는지를 알아보면

되겠으나, 이 방법은 시간복잡도가 너무 커 (n의 지수함수) 실용적인

방법이 아니다. 이 부록은 dynamic programming 기법을 이용한 O(n3)

시간복잡도를 갖는 소위 Cocke-Younger-Kasami (CYK) algorithm을

소개한다. 이 algorithm의 input로 준 CFG는 Chomsky normal form

(CNF)으로 되어 있다고 가정한다.

String w = a1a2 . . . . an, wij = aiai+1 . . . aj (단, wii = ai ), 그리고 Vij를 아래와

같이 string wij를 derive 할 수 있는 nonterminal 기호의 집합이라 하자.

*Vij = { A | A wij }

Page 77: 계산모델: 오토마타와 형식언어(부록-찾아보기)

77

Vij

ai aj. . . . .wij =

V11 V22 V33 V44 V55

a1 a3

V66

a2 a4 a5 a6

V12 V23 V34 V45 V56

V13 V24 V35 V46

V14 V25 V36

V15 V26

V16

w =j

i

모든 Vij를 가지고 아래와 같은 2차원

배열을 만들어 보자.그림에서 j는 input

symbol의 위치 , i는 대각선 번호와

일치한다.

정의에 따라

S V16이면,

w L(G)이다.

CYK Algorithm

Page 78: 계산모델: 오토마타와 형식언어(부록-찾아보기)

78

집합 Vij 는 아래 그림의 화살표 방향으로 진행하며 Vij의 윗쪽에 있는

i번째 대각선에 있는 값과 j번째 열에 있는 값을 가지고 구한다.

. . . . .

Vii

ai

Vjj

ai+1 aj

Vi(i+1)

V(i+2)j

V(i+1)j

Vij

wij =

Vi(j-1)

CYK Algorithm

A

N

I

Page 79: 계산모델: 오토마타와 형식언어(부록-찾아보기)

79

V11 V22 V33 V44 V55

a1 a3

V66

a2 a4 a5 a6

V12 V23 V34 V45 V56

V13 V24 V35 V46

V14 V25 V36

V15 V26

V16

w =

예를 들면, 집합 V25는 그림의 화살표 방향으로 진행하며 다음과 같이

구한다.

A, B, C를 임의의 nonterminal 기호라 하자.

V25 = { A | B V22 , C V35 , and A BC }

{ A | B V23 , C V45 , and A BC }

{ A | B V24 , C V55 , and A BC }

CYK Algorithm

A

N

I

Page 80: 계산모델: 오토마타와 형식언어(부록-찾아보기)

80

일반적으로 Vij = { A | B Vik , C V(k+1) j and A BC } i k j-1

. . . . .

Vii

ai

Vjj

ai+1 aj

Vi(i+1)

V(i+2)j

V(i+1)j

Vij

wij =

Vi(j-1)

CYK Algorithm

Page 81: 계산모델: 오토마타와 형식언어(부록-찾아보기)

81

S aSb | aDb

D aD | a

S AB | AC A a B SB B b

C DB D AD | a

CFG G

CNF CFG

CYK Algorithm

예: 아래의 CFG와 input string aaaabb를 가지고 algorithm을 적용하면

Vij (1 i, j 6)는 다음과 같다.

{A, D}

a aa a b bw =

{A,D} {A,D} {A,D} {B} {B}

{D}D AD

{D}D AD

{D}D AD

{S,C}S AB

C DB

{ }

{D} {D}{S,C}S AC

C DB

{B}B SB

{D} {S,C}{S,B,C}

SAB,CDB

B SB

{S,C}{S,B,C}

SAC,CDB

B SB

{S,B,C}SAB,S AC

CDB, BSBS V16 이므로 w L(G).

Page 82: 계산모델: 오토마타와 형식언어(부록-찾아보기)

82

CYK Algorithm

CYK Algorithm

//Initially all sets Vij are empty

// Input x = a1a2 . . . . an, G.

for ( i = 1; i <= n; i ++ )

Vii = { A | A ai };

for ( j = 2; j <= n; j++ )

for ( i = j-1; i =1; i-- )

for ( k = i; k <= j-1; k++)

vij = vij { A | B Vik , C V(k+1) j and A BC };

if ( S V1n ) output “yes”; else output “no”;

V11 V22 V33 V44 V55

a1 a3

V66

a2 a4 a5 a6

V12 V23 V34 V45 V56

V13 V24 V35 V46

V14 V25 V36

V15 V26

V16

w =

위의 algorithm에서 구해야 할 Vij의 수가 O(n2)이며, 각 vij를 구하는데

O(n) 번의 계산이 필요하므로 시간복잡도는 O(n3)이다.

Page 83: 계산모델: 오토마타와 형식언어(부록-찾아보기)

2-D tape TM (2 차원 테이프 TM) .............................................................182, 190

2-dimensional tape FA (2 차원 테이프 FA) ...............................................181, 190

2-head FA (2-머리 FA) .......................................................................................183

2-sided L-system (양면 L-시스템) ........................................................................68

2-way FA (2-방향 FA) ..........................................................................................181

2-way PDA (2-방향 PDA) ..................................................................................173

accept (인식) ..................................................................................................93, 99

accepting configuration (인식 구성) ....................................................................380

accepting state (인식 상태) ..................................................................98, 99, 107

accepting state transition profile (인식하는 상태천이 모양) ..................129, 130

algebraic law (대수 법칙) .............................................................................,.......80

ambiguous CFG (모호한 CFG) .................................................................,........306

amino acid (아미노산) ........................................................................................449

associative law (결합 법칙) .................................................................................80

associativity (결합 순위) ......................................................................................80

axiom (L-system의 시작문자열) ............................................................................69

Backus-Naur form (배커스-나우르 형식) ..................................................68, 462

base (기초) ...............................................................................................................23

찾아보기(영문)

Page 84: 계산모델: 오토마타와 형식언어(부록-찾아보기)

cell (방) ..........................................................................................................87, 125

cellular automata (셀 오토마타) ..........................................................................185

characterization (특성화) .....................................................................193, 194, 198

Chomsky hierarchy (Chomsky 체계) ...................................................................194

Chomsky normal from (Chomsky 표준형) .......................................................289

Church's hypothesis (Church의 가설) ..................................................................188

closure (닫힘) ...........................................................................................................7

closure property (닫힘 특성) ................................................................................250

coding-region (코딩 영역) ...................................................................................451

codon (코돈) ..........................................................................................................449

codon table (코돈 표) ..........................................................................................449

commutative law (가환 법칙) .................................................................................80

complement (보, 보 집합) .........................................................................6, 29, 250

complementary string (보 서열) ..............................................................................447

composite symbol (복합기호) ....................................................................................4

concatenation (연결) .................................................................................................80

configuration (구성) ..............................................................................................376

constructive proof (건설적 증명) .............................................................................25

context dependence (문맥 의존) ............................................................................433

Page 85: 계산모델: 오토마타와 형식언어(부록-찾아보기)

context-free grammar (문맥 자유 문법) ............................................................57, 59

context-sensitive grammar (문맥 민감 문법) ....................................................56, 58

countable (헤아림 가능) .........................................................................................469

CYK algorithm (CYK 알고리즘) ............................................................................366

declarative statement (선언문) ....................................................................................9

determinism (결정론) ..............................................................................................118

deterministic finite automata (DFA) (결정성 유한 오토마타) ..............................114

deterministic linear bounded automata (DLBA) (결정성 선형 제한 오토마타) ..102

deterministic L-system (결정성 L-시스템) ...............................................................68

deterministic pushdown automata (DPDA) (결정성 눌러 쌓는 오토마타) ..........104

deterministic transition graph (결정성 천이 그래프) ............................................228

deterministic Turing machine (DTM) (결정성 투어링 장치) ................................87

diagonalization (대각화) ................................................................................... 29, 468

diagonalization technique (대각화 기법) ........................................................29, 468

distributive law (분배법칙) .......................................................................................80

document type definition (DTD) .............................................................................437

dynamic programming (다이나믹 프로그래밍) .....................................................366

empty set (빈 집합) .....................................................................................................5

Page 86: 계산모델: 오토마타와 형식언어(부록-찾아보기)

empty stack (빈 통) .........................................................................................177, 180

encoding function (암호화 함수) ...............................................................................475

enumerable (나열 가능) ............................................................................................468

enumerable languages (나열가능 언어) ....................................................................481

enumeration (나열하기) ............................................................................................468

enumerator (나열자) ..................................................................................................468

equivalent (등가) .................................................................................................14, 81

equivalent regular expression (등가 정규 표현) ........................................................81

equivalent state (등가 상태) ............................................................................231, 233

exclusive OR (배타적 OR) ..........................................................................................6

existential quantification (내재적 계량) ......................................................................19

FA array (FA 배열) ......................................................................................................185

finite state control (유한 상태 제어 장치) .........................................................87, 104

formal language (형식언어) ...................................................................................41, 53

front nonterminal (전방 비 단말 기호) ......................................................................292

front recursion (전방 재귀) ........................................................................................292

Page 87: 계산모델: 오토마타와 형식언어(부록-찾아보기)

gene grammar (유전자 문법) .......................................................................................445

grammar (문법) ......................................................................................................53, 54

Greibach normal form (GNF) (Greibach 표준형) .......................................................289

hidden Markov model (HMM) (숨긴 Markov 모델) ..................................................181

homomorphism (준 동형) ............................................................................................475

hyper text markup language (HTML) .........................................................................434

hypothesis (가정) ............................................................................................23, 24, 33

induction (귀납) ......................................................................................................23, 34

induction hypothesis (귀납 가정) ...................................................................................23

inequivalent state table (비 등가 상태) ......................................................................240

inequivalent state table (비 등가 상태 표) ..................................................................240

inherently ambiguous CFL (선천적으로 모호한 CFL) ..............................................317

input alphabet (입력 알파벳) ...............................................................................98, 107

intersection (교 집합) ..............................................................................................6, 250

intron (인트론) ..............................................................................................................448

Kleene closure (크레네 닫힘 ) ................................................................................7, 250

kleene star (kleene 스타) .............................................................................................250

language class (언어 모음) ................................................................................195, 249

Page 88: 계산모델: 오토마타와 형식언어(부록-찾아보기)

left associativity (좌측 우선 결합) ..............................................................................314

left linear (좌 선형) .......................................................................................................62

leftmost derivation (최 좌측 유도) ..............................................................................367

lex (랙스) ....................................................................................................................457

lexical ambiguity (어휘적 모호성) .............................................................................301

lexical analyzer (어휘 분석기) ...................................................................................456

LL(k) grammar (LL(k) 문법) ............................................................................371, 382

look ahead LR (LALR) parser (내다보는 LR 파서) ...............................................460

look-ahead (내다보기) ................................................................................................374

LR(k) grammar (LR(k) 문법) ......................................................................................406

LR(k) parser (LR(k) 파서) ....................................................................................400, 407

Lyndenmayer system (L-system) (린든메이어 시스템, L-시스템) .....................68, 69

Mealy automata (Mealy 오토마타) ..............................................................................167

messenger RNA ( mRNA) (메신저 RNA) ..................................................................448

Moore automata (Moore 오토마타) ..............................................................................167

morphemes (형태소) .....................................................................................................54

multi-head FA ( 다중-머리 FA) .........................................................................181, 183

multi-stack PDA (다중-통 PDA) .................................................................................175

Page 89: 계산모델: 오토마타와 형식언어(부록-찾아보기)

multi-tape TM (다중-테이프 TM) ...............................................................................175

multi-track TM(다중-트랙 TM) .........................................................................168, 172

NFA (비결정성 유한 오토마타) ................................................................128, 129, 134

non-constructive proof (비 건설적 증명) ......................................................................25

non-contracting rule (비 수축 룰) .......................................................................496, 513

nondeterministic algorithm (비결정성 알고리즘) .......................................................146

nondeterministic automata (비결정성 오토마타) ........................................................118

nondeterministic choose (비결정성 선택) ..........................................................146, 147

nondeterministic computing (비결정성 계산) .............................................................145

nondeterministic finite automata (NFA) (비결정성 유한 오토마타) ..............128, 129

nondeterministic guess (비결정성 어림잡기) ............................................................146

nondeterministic linear bounded automata (NLBA) (비결정성 선형 제한 오토마타)

.................................143

nondeterministic pushdown automata (NPDA) (비결정성 눌러 쌓는 오토마타) ....137

nondeterministic turing machine (NTM) (비결정성 투어링 장치 ) ........................143

non-front terminal (비 전방 단말 기호) .....................................................................292

nonterminal alphabet (비 단말 알파벳) ........................................................................53

Page 90: 계산모델: 오토마타와 형식언어(부록-찾아보기)

normal form (표준형) ..................................................................................................289

null input (공 입력) .....................................................................................................151

null string (공 문자열) ....................................................................................................3

Ogden's lemma (Ogden의 lemma) ..............................................................................355

parallel rewriting rule (병렬 다시 쓰기 규칙) ............................................................61

parse table (파스 표) ..................................................................................................382

parse tree (파스 트리) ................................................................................................302

parsing (파싱) ..............................................................................................................366

phrase structured grammar (구문구조 문법) .............................................................54

pigeonhole principle (비둘기구멍 원리) ................................................................26, 33

power set (지수 집합) .....................................................................................................8

precedence (우선순위) ..............................................................................................314

product (곱 집합) .....................................................................................................6, 250

production rule (생성 룰) ..............................................................................................54

proof by cases (경우에 의한 증명) ..............................................................................16

proof by contradiction (반증에 의한 증명) .................................................................17

proof by counter example (반례에 의한 증명) ............................................................22

proof by counting (헤아려 증명하기) ..........................................................................28

Page 91: 계산모델: 오토마타와 형식언어(부록-찾아보기)

proof by example (예에 의한 증명) .............................................................................20

proof by generalization (일반화에 의한 증명) ..............................................................21

proof by induction (귀납에 의한 증명) ..................................................................22, 23

proof technique (증명 법) ...............................................................................................15

proper containment (정규포함) ....................................................................................323

property list (특성 목록) ...................................................................................................5

proposition (명제) ..............................................................................................................9

pumping lemma (펌핑 래마) .................................................................................329, 330

purine (퓨린) .................................................................................................................452

pyrimidine (피리미딘) ..................................................................................................452

read only (읽기 전용) ............................................................................................104, 114

recursive language ( 재귀 언어) ...........................................................................491, 493

recursive TM (재귀 TM) .....................................................................................492, 493

recursively enumerable (r.e.) (재귀적 열거가능) ..........................................................56

reduced DFA (축소된 FA) .............................................................................................238

reduction table (감소 표) ..............................................................................................405

regular expression (정규표현) ........................................................................................77

regular grammar (정규 문법) ..........................................................................................57

Page 92: 계산모델: 오토마타와 형식언어(부록-찾아보기)

reversal (역 전환) ........................................................................................................250

ribosome(리보솜) .........................................................................................................448

right linear (우 선형) ......................................................................................................62

rightmost derivation (최 우측 유도) ..........................................................................367

RNA transcription (RNA 복사) ...................................................................................447

rule (룰) .........................................................................................................41, 42, 43

rule set (룰 집합) ..........................................................................................................54

semantic ambiguity (어의적 모호성) .......................................................................301

sentential form (문장 형) ...........................................................................................55

set complement (보 집합) .............................................................................................6

set intersection (교 집합) ..............................................................................................6

set operation (집합 연산) . ..............................................................................................6

set product (곱 집합) .......................................................................................................6

set properties (집합 특성) ...............................................................................................5

set specification (집합 명시) ..........................................................................................5

set subtraction (집합 빼기) .....................................................................................6, 205

set union (공유 집합) .....................................................................................................6

shift-in (옮겨 넣기) ....................................................................................................408

Page 93: 계산모델: 오토마타와 형식언어(부록-찾아보기)

simulation (시뮬레이션) ....................................................................................408, 506

splicing (잘라 잇기) ..................................................................................................448

stack alphabet (통 알파벳) ........................................................................................107

stack head (통 머리) ..................................................................................................104

stack-top erasing set (stack-top 삭제 집합) ...............................................................524

start codon (시작 코돈) .............................................................................................449

start symbol (시작기호) ..............................................................................................54

state (상태) ..................................................................................... .....87, 88, 98, 101

state minimization (상태 최소화) .............................................................................236

state partitioning (상태 분할) ...................................................................................233

state transition function (상태천이 함수) ............................................................97, 98

state transition graph (상태천이 그래프) .............................................................94, 98

state transition path (상태 천이 경로) ......................................................................243

state transition profile (상태천이 모양) ...................................................................129

state transition table (상태천이 표) ............................................................................96

stop codon (정지 코돈) .............................................................................................449

string (문자열) ..............................................................................................................3

sum-of-subset problem (부분집합의 합 찾기 문제) ...............................................148

Page 94: 계산모델: 오토마타와 형식언어(부록-찾아보기)

syntactic ambiguity (문맥적 모호성) ...........................................................................301

syntactic category (syntax 카테고리) .............................................................................54

syntax diagram (문맥 그림) ...........................................................................................73

syntax flow graph (문맥 흐름도) ...................................................................................73

tape alphabet (테이프 알파벳) .......................................................................................98

tape head (테이프 머리) .................................................................................................87

terminal alphabet (단말 알파벳) ....................................................................................54

TM enumerator (TM 열거자) .......................................................................................476

token definition (토큰 정의) ........................................................................................457

token description (토큰 설명) ......................................................................................457

total alphabet (전 알파벳) ..............................................................................................54

transcribe (복사하다) ....................................................................................................447

transition profile (상태천이 모양) ...............................................................................129

translation (번역) ...........................................................................................................448

traversal (횡단) ..............................................................................................................369

truth table (진리 표) ........................................................................................................13

type 0 grammar (타입 0 문법) ........................................................................................54

type 1 grammar (타입 1 문법) ........................................................................................56

Page 95: 계산모델: 오토마타와 형식언어(부록-찾아보기)

type 2 grammar (타입 2 문법) .........................................................................................57

type 3 grammar (타입 3 문법) .........................................................................................57

unit production rule (단위 생성 룰) ..............................................................................274

universal quantification (보편적 계량) ...........................................................................19

universal set (범 집합) .......................................................................................................6

universal Turing machine (범용 turing 장치) ................................................................480

uvwxy theorem (uvwxy 정리) ........................................................................................347

variable (변수) ..................................................................................................................54

work tape (일 테이프) ....................................................................................................504

xml(엑스 엠 엘) ......................................................................................................433, 437

yacc (얔) ..........................................................................................................................456

yield (생성물) .................................................................................................................303

𝛆-move ( 앱실런-이동) ...................................................................................................113

𝛆-production rule (앱실런-생성 룰) ..............................................................................266

𝛆-transition (앱실런-천이) .............................................................................................151