계산모델: 오토마타와 형식언어(머리말-목차)

16

Upload: sam-myo-kim

Post on 27-Jul-2015

356 views

Category:

Documents


0 download

DESCRIPTION

이 파일은 컴퓨터 이론 분야 교제 '계산 모델: 오토마타와 형식언어'의 머리말과 목차 부분을 갖고 있습니다. 강의용으로 교제의 PowerPoint 형식을 원하시면 저자에게 email을 보내시기 바랍니다.

TRANSCRIPT

Page 2: 계산모델: 오토마타와 형식언어(머리말-목차)

계산 모델:

오토마타와 형식언어

김 삼 묘유 기 영 저

Page 3: 계산모델: 오토마타와 형식언어(머리말-목차)

iii

머리말

오토마타(automata)와 형식언어(formal language)는 컴퓨터공학(또는 전자계산학)의 학문적 바탕이 되는 이론을

제시하는 분야입니다. 이 과목을 통하여 컴퓨터와 컴퓨터 언어에 대한 체계화된 모델을 배우고, 이 두 모델 사이의

상관관계를 이해하여 이를 타 분야에 응용할 수 있는 능력을 기릅니다.

이 과목은 1980년도까지만 하더라도, 일반적으로 학부 4학년 학생들이 배우던 것이, 점차 하위 학급의 필수

과목으로 선택되어, 현재 선진국에서는 대부분 학부 2학년을 위하여 개설되고 있습니다. 이는 이 과목에서 배우는

내용이 3, 4학년에서 배우는 타 과목에도 널리 응용되고 있다는 증거입니다. 특히 인터넷과 멀티미디어 기술의

발달은 automata와 formal language의 중요성을 더욱 높이고 있습니다.

왜 배우나우리는 가끔 어느 누구는 사물을 이해할 수 있는 안목(perspective)을 갖추고 있다는 이야기를 듣습니다. 즉, 한눈에

봐서 그 사물의 됨됨이 어떠하다는 것을 알아볼 수 있다는 말이겠지요. 그렇다면, 이 사람이 알아본다는 사물의

됨됨이는 무엇일까요? 보는 대상이 사람이라면, 그 사람의 배경, 성격, 품위, 등 사람을 판단하는데 가장 중요한

요소들을 말하는 것이 아닐까요? 그 사람의 귀가 크거나 작다든가, 몸무게가 얼마라든가, 입은 옷의 종류, 등은

사람의 됨됨이를 이루는 기본 요인이 되지 않습니다. 사람의 됨됨이를 이루는 요소는 그 사람의 삶에 가장 중요한,

어떤 때는 결정적인, 역할을 하며 자주 바뀌지 않습니다. 이 때문에 우리는 바람직한 됨됨이를 갖추고 싶어하고, 또

그러한 사람을 찾아 사귀고 싶어 합니다.

Page 4: 계산모델: 오토마타와 형식언어(머리말-목차)

iv

우리가 공부할 컴퓨터 시스템을 이해하는 안목도 전자계산을 위한 기본 요소 (fundamentals of computing)가 무엇인지

알고, 이들이 가진 기능을 이해하고서야 길러지는 것입니다. 이 과목의 주목적이 바로 이러한 요소와 그 기능을

체계적으로 배워 응용할 수 있게 하는 것입니다. 컴퓨터 시스템은 자주 바뀌며 새로운 모델이 등장합니다. 그러나

이들이 이용하는 기본 요소는 자주 바뀌지 않습니다. 따라서 이들 기본 요소들을 알면, 쉽게 기존 시스템을 이해할 수

있으며, 새로운 시스템을 설계할 수도 있습니다. 이 과목을 배우며 우리는 여러 번 이러한 사실을 체험할 것입니다.

머리말

무엇을 배우나전자계산을 위한 기본요소 (fundamentals of computing)는 이 과목의 제목인 automata와 formal language를 공부함으로

이해할 수 있습니다. Formal language는 문법에 따라 만들어진 (즉 정의된) 언어를 말하며, automata는 formal language를

인식할 수 있는 개념적인 단순한 계산 장치입니다. (다음 쪽의 그림은 이 관계를 상징적으로 보여줍니다.) 컴퓨터를 가지고

계산하는(compute) 문제를 이 과목에서는 automata가 형식언어를 인식하는(recognize) 문제로 단순화하여 다루고 있습니다.

Automata는 언어 인식을 위한 가장 기본적인 요소를 갖추고 있습니다. 언어의 복잡도, 즉 인식의 난이도에 따라, 이를

인식하는 automata의 능력도 달라지는데, 이 과목에서는 전통적으로 널리 알려졌으며 자주 이용되는 네 종류의

automata와 이들이 인식하는 형식언어를 배웁니다.

우리는 문법이 정하는 (발생한다고도 함) 언어를 알아내고, 반대로 언어를 발생하는 문법을 만드는 기법도 배울 것이며,

제한적이지만, 언어를 인식하는 automaton을 설계하는 방법도 배울 것입니다. 이러한 지식을 바탕으로 우리는 형식언어와

이를 인식하는 automata 사이의 관계를 이해하게 될 것이며, 나아가 컴퓨터 시스템을 이해할 수 있는 안목(perspective)도

갖추게 됩니다. 이 책의 14장에서 이를 뒷받침하는 몇 가지 예를 볼 것입니다.

Page 5: 계산모델: 오토마타와 형식언어(머리말-목차)

무엇을 배우나?

머리말

Page 6: 계산모델: 오토마타와 형식언어(머리말-목차)

vi

컴퓨터이론 과목을 위한 교과서는 일반적으로 책의 끝 장에 판별불능성(undecidability), 해결불능성(unsolvability), 또는

계산불능성 (uncomputability), 등의 제목으로 계산하여 답을 얻을 수 없는 문제들을 소개하고 이를 증명해 보입니다. 이

교재는 2년 또는 3년 차 컴퓨터 전공학생이 한 학기 동안에 배울 수 있는 주제를 담느라, 위와 같은 내용은 본 교재에

포함하지 않기로 하였습니다.

머리말

어떻게 배우나오토마타와 형식언어를 위한 교과서 내용은 흔히 밑에서 위로 (bottom-up), 즉 automata와 formal language의 하위

모델로부터 시작하여 상위 모델로 진행하며 배우도록 구성되어 있습니다. 그러나 이 교재는 위에서 밑으로 (top-down),

즉 상위 모델로부터 시작하여 하위 모델로 진행하며 배울 수 있도록 내용을 구성하고 있습니다. 저자의 경험에 의하면,

이러한 접근 방법이 학생들로 하여금 단편적인 지식을 얻는데 그치지 않고, 이것을 담는 큰 틀을 볼 수 있는 안목을

갖도록 하는데 도움이 되기 때문입니다. 상위 모델부터 배운다고 하여, 결코 어려운 것부터 배우는 것이 아님을 알게 될

것입니다.

이 교재는 풍부한 예를 제시하고 있으며, 이미 제시된 이론에 오해의 소지가 있거나 되새겨볼 내용이 있으면, 이를

되새김(rumination)이란 제목하에 배운 내용을 음미할 기회를 마련하였습니다. 복잡한 기호를 이용한 설명은 가능한

피하고, 대신 이해를 도울 수 있는 그림을 많이 사용하였으며, 주제의 내용과 직결된 그림이나 식은 가능하면 한

페이지에 두거나, 그렇지 못하면, 반복 제시하여 교제를 읽고 이해하는데 도움이 되도록 하였습니다.

전문용어(professional terminology)를 국문으로 번역하여 쓰는 데서 오는 어색함을 줄이고 영문원서를 읽는데 도움이

되도록, 전문용어는 국영문을 함께 적어 도입한 후, 영문으로 쓰기로 하였습니다. 이 교재로 강의하는 교수의 편의를

위하여 교재의 전 내용에 대한 PowerPoint 형식의 강의자료를 제작하여 출판사에서 직접 교수에게 제공하고 있습니다.

이 과목을 배우는 학생은 각 장의 끝에 제시된 연습문제나 교수가 제시한 과제물을 직접 풀어 볼 수 있기를 바랍니다.

문제를 풀어 본 다음에야 배운 것이 나의 지식으로 남아 있을 수 있기 때문입니다.

Page 7: 계산모델: 오토마타와 형식언어(머리말-목차)

vii

머리말어디에 쓰나이 과목에서 배운 지식은 응용하지 않은 곳을 찾기가 어려울 정도로 널리 쓰이고 있습니다. 다음 쪽의 예는 컴퓨터를

전공하는 사람의 책장에서 흔히 볼 수 있는 몇 개의 교과서에 소개된 것들입니다. 이론(theory)은 지엽적인 것들을 버리고

우리에게 필요한 것들만 걸러내는 추상화 (abstraction) 작업을 거쳐 만들어집니다. Automata는 컴퓨터를 가지고

계산하는데 꼭 필요한 기본 요소만 추려 내어 만들어진 개념적인 모델입니다. 따라서 automata를 가지고 만들어진 이론은

오토마타 모델을 바탕으로 하는 모든 시스템에 적용할 수 있다는 것은 지극히 당연합니다. 형식언어에 관하여도 같은

이야기를 할 수 있습니다. 우리가 쓰는 자연어도 형식언어적 개념으로 접근할 수 있으며, 우리가 쓰는 프로그래밍

언어인 C++, HTML, XML, 등도 일종의 형식언어라는 것을 알게 될 것입니다. 이론은 흥미 없는 과목이라 오해하고

꺼리는 경향이 있습니다. 그러나 우리가 이 과목을 배우고 나서, 우리에게 당면한 문제를 해결할 수 있는 넓고 깊은

안목이 생긴다는 것을 알게 될 때, 이 과목의 진가를 새삼 느끼게 될 것입니다.

감사이 책을 종전과 다른 새로운 관점에서 써야겠다는 저자의 동기는 미국의 한 공과대학인 Rensselaer Polytechnic Institute

(RPI)에서 1992년 봄학기 강의 준비를 하던 때라 생각합니다. 이론을 좀 더 쉽게 가르칠 수 없을까? 학생들이 읽어 쉽게

이해할 수 있는 책을 쓰고 싶었습니다. 이로부터 10여 년 동안 출판하고 싶은 욕망과 좀 더 알찬 내용을 다듬어

쓰고 싶은 욕심 사이를 오가다, 2004년에 프린트 초판을 낸 후, 2007년 2판에 이어, 2010년에 전자출판으로 3판을 냈습니다.

저자에게 이 분야 지식을 심어주신 University of California (at Santa Barbara)의 Oscar Ibarra 교수와 덜 익은 지식을 좀 더

성숙하도록 도와주신 RPI의 Robert McNaughton 교수께 감사를 드립니다. 그리고 흥미 있는 연습문제자료를 제공하여 주신

RPI의 Krishnamoorthy 교수, 강의자료에 대한 불만을 솔직히 털어놓기를 주저하지 않았던 RPI 제자들, 오타로 점철된 이

교재의 초본을 가지고 공부하는 불편을 감수하고 종강시간 설문지에 완곡한 조언과 함께 용기를 준 경북대학교

컴퓨터공학과 제자들에게 감사를 드립니다. 이 귀중한 출판을 위하여 지원하여 주신 경북대학교, 프린트 1, 2판을

출판하게 도와주신 이한출판사, 그리고 비전공자의 예리한 안목으로 원고 교정 작업을 마칠 수 있게 도운 저자 김삼묘의

아내 현숙에게 감사를 드립니다.

Page 8: 계산모델: 오토마타와 형식언어(머리말-목차)

viii

어디에 쓰이나(응용 예)?

R

21

1/ 0

1/ 0

0/ 0

0/ 1

1/ 0

0/ -

(a) 회로이론(switching circuits): state diagram

Running

BlockedReady

block

wakeup

dispatch

timer run out

(b) 운영체제(operating systems): process state transition

(c) Web browsing: pattern matching for “cup”

stmt

stmt

ifexpr then

E1if

exprthen

stmtelse

stmt

E2S1

S2

(d) Compiler: constructing a parse tree

[c]

[cu]

[cup]

c

u

p

c

any

not (c or p)

not (c or u)

c

start

not(c)

머리말

Page 9: 계산모델: 오토마타와 형식언어(머리말-목차)

ix

머리말

이 책에서 개선하거나 바로잡아야 할 점은 모두 저자의 몫입니다. 문의 또는 조언은 아래의 Email 주소를 이용하여

저자에게 보내 주시면 감사하겠습니다.

김삼묘: [email protected]

유기영: [email protected]

2010년 11월 저자 드림.

Page 10: 계산모델: 오토마타와 형식언어(머리말-목차)

차례

제 1 장 준비(Preliminaries) 1

1.1 표기 관례 (Notational Convention) 3

기호 (symbols), 문자열(strings), 복합기호 (composite symbols),

집합(set), 집합연산(sets and set operations)

1.2 명제 (Proposition) 9

1.3 증명법(Proof techniques) 15

환질 환위에 의한 증명 (proof by contrapositive), 경우에 따른 증명(proof by cases),

모순에 의한 증명 (proof by contradiction), 예에 의한 증명 (proof by example),

일반화에 의한 증명 (proof by generalization), 귀납에 의한 증명 (Proof by Induction),

비둘기 구멍 원리에 의한 증명 (poof by pigeonhole principle),

헤아려 증명하기 (proof by counting), 대각화 기법에 의한 증명 (proof by diagonalization)

되새김(Rumination) 30

연습문제 35

x

제 2 장 형식 언어 (Formal Languages) 39

2.1 Rule에 의한 언어 생성 43

2.2 형식언어의 문법 (Grammar of Formal Languages) 53

Type 0 (phrase structured (구문 구조 )) grammar

Type 1 (context-sensitive grammar (문맥 민감)) grammar

Type 2 (context-free grammar (문맥 자유)) grammar

Type 3 (regular grammar (정규)) grammar

2.3 문법과 언어 예 58

되새김 (rumination) 60

연습문제 64

Page 11: 계산모델: 오토마타와 형식언어(머리말-목차)

차례

제 3 장 기타 언어 모델 66

3.1 L-systems 68

정의와 예응용 예

3.2 Syntax flow graph 73

Context-free grammar와 syntax flow graph

Pascal syntax flow graph

되새김(rumination) 76

3.3 Regular Expressions 77

정의Regular expression의 대수학적 법칙

되새김(rumination) 81

연습문제 82

제 4 장 언어 인식 모델: Automata 84

4.1 Deterministic Turing machines (DTM) 87

설계 예State transition graph, State transition table, State transition function

정의4.2 DLBA (Deterministic Linear Bounded Automata) 102

설계 예4.3 DPDA (Deterministic Pushdown Automata) 104

정의설계 예

4.4 DFA (Deterministic Finite Automata) 114

정의설계 예

되새김(rumination) 117

연습문제 121

xi

Page 12: 계산모델: 오토마타와 형식언어(머리말-목차)

제 5 장 비결정성 오토마타 (Nondeterministic Automata) 126

5.1 NFA (Nondeterministic Finite Automata) 129

정의와 설계되새김(rumination) 134

5.2 NPDA (Nondeterministic Pushdown Automata) 137

정의와 설계5.3 NTM (Nondeterministic Turing Machines)과 NLBA (Nondeterministic Linear Bounded Automata) 143

Nondeterministic transitions

되새김 (rumination) 144

5.4 Nondeterministic Algorithm 146

Nondeterministic computing

Algorithm 예5.5 NFA와 -transitions 151

5.6 NFA의 -transitions 제거하기 153

연습문제 161

제 6 장 여러 형태의Automata 164

6.1 Transducers: 출력 있는 automata 167

Mealy automata, Moore automata

6.2 여러 형태의 TM과 LBA 168

Multi-track TM, Multi-tape TM, 2D-tape TM

6.3 여러 형태의 PDA 173

2-way PDA, Multi-stack PDA

빈 stack으로 accept 하는 PDA

되새김(rumination) 180

6.4 여러 형태의 FA 181

2-way FA, 2D-tape FA, Multi-head FA,

FA array: cellular automata, Hidden Markov models (HMM)

6.5 Church의 가설 188

연습문제 189

xii

차례

Page 13: 계산모델: 오토마타와 형식언어(머리말-목차)

제 7 장 언어와Automata 체계 I: Chomsky Hierarchy 191

7.1 Chomsky Hierarchy (춈스키 체계) 194

7.2 Characterization (특성화 관계) 증명 198

Regular grammar G를 가지고 L(G)를 인식하는 FA 만들기FA M을 가지고 L(M)을 생성하는 regular grammar 만들기Regular expression R을 가지고 L(R)을 인식하는 FA 만들기FA M을 가지고 L(M)을 표현하는 regular expression 만들기

되새김(rumination) 220

연습문제 221

제 8 장 FA 다듬기 222

8.1 NFA를 DFA로 전환하기 226

8.2 DFA를 최소화 하기 230

되새김(rumination) 240

연습문제 245

제 9 장 형식 언어의 특성 247

9.1 Regular 언어의 특성 250

Union, Concatenation, Kleene star,

Reverse, Complement, Intersection, Set subtraction

9.2 Context-free 언어의 특성 255

Union, Concatenation, Kleene star,

Reverse, Complement

되새김(rumination) 259

연습문제 262

xiii

차례

Page 14: 계산모델: 오토마타와 형식언어(머리말-목차)

제 10 장 Context-free Grammar 다듬기 263

10.1 -production rules을 줄이기 266

Algorithm과 예10.2 Unit production rule을 제거하기 274

Algorithm과 예10.3 불필요한 기호를 제거하기 278

Algorithm과 예10.4 CFG의 Normal Form 289

Chomsky normal form (CNF)

Greibach normal form (GNF)

연습문제 297

제 11 장 Context-free Grammar의 Ambiguity(모호성) 299

11.1 Parse tree 302

11.2 Parse Tree와 CFG의 Ambiguity(모호성) 305

11.3 CFG의 Ambiguity를 제거하는 기법 307

괄호로 묶는 법, Rule 적용 순서를 고정하는 법동일한 내용을 생성하는 rule을 제거하는 법Precedence (우선운위)와 associativity (결합순위)를 정하는 법

되새김(rumination) 317

연습문제 318

xiv

차례

Page 15: 계산모델: 오토마타와 형식언어(머리말-목차)

제 12 장 Chomsky Hierarchy II: 정규 포함관계 320

12.1 언어 class들 사이의 포함관계 325

12.2 Regular 언어에 대한 pumping lemma 329

Lemma 증명12.3 Pumping lemma 응용 339

응용 예되새김(rumination) 344

12.4 CFL에 대한 pumping lemma 347

12.5 CFL에 대한 pumping lemma 응용 350

되새김(rumination) 354

12.6 Ogden’s lemma 355

Lemma 응용12.7 CFL에 대한 pumping lemma 증명 358

연습문제 363

제 13 장 Parsing 364

13.1 Derivation 367

Leftmost derivation, Rightmost-derivation

Derivation과 parse trees

13.2 LL(k) parsing 전략 371

13.3 LL(k) parser 만들기 384

만들기 예LL(k) grammar 정의

되새김(rumination) 398

13.4 LR(k) parsing 전략 400

13.5 LR(k) parser 만들기 407

만들기 예LR(k) grammar 정의

되새김(rumination) 426

연습문제 429

xv

차례

Page 16: 계산모델: 오토마타와 형식언어(머리말-목차)

제 14 장 Formal Language 응용 431

14.1 Hyper Text Markup Language (HTML) 434

14.2 Document Type Definition (DTD)과 XML 437

14.3 Gene Grammar 445

되새김(rumination) 455

14.4 Lex와 YACC 456

제 15 장 Chomsky Hierarchy III 464

15.1 TM이 인식할 수 없는 언어 468

Enumeration (헤아리기)

Enumerable (헤아릴 수 있는) 언어TM이 인식할 수 없은 언어

15.2 Universal TM 479

15.3 Enumerable Languages 481

15.4 Recursive Language 491

15.5 Chomsky Hierarchy의 characterization 증명 503

Type 0 grammar와 TM

CSG와 LBA

CFG와 PDA

되새김(rumination) 541

연습문제 542

xvi

부록A. Pascal Syntax Flow Graph

B. 2-way FA 언어를 인식하는 1-way FA 만들기C. FA 언어의 Regular Expression 구하기: Dynamic programming 기법D. Deterministic Context-free 언어의 특성E. Pumping Lemma를 만족하는 non-regular 언어F. CYK Algorithm

찾아보기

차례