163
1 1. 준비 (Preliminaries) 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

계산모델: 오토마타와 형식언어(CH01-CH05)

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: 계산모델: 오토마타와 형식언어(CH01-CH05)

1

1. 준비 (Preliminaries)

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

Page 2: 계산모델: 오토마타와 형식언어(CH01-CH05)

2

1. 준비 (Preliminaries)

이 공학 분야에 연구하는 사람들이 하는 중요한 일은 어떤 사물이나 현상에 관한 중요한 요소들을 추려내어

추상적인 모델이나 이론을 만들어내는 작업이다. 이때 „무엇을 어떻게 쓸까?‟라는 가장 기본적이고 중요한

표현상의 문제를 해결하려고 적절한 기호를 도입한다. 이는 사람들이 의사소통을 목적으로 문자를 쓰는 것과 같다.

이 장의 앞부분은 이 분야에서 흔히 쓰는 전통적인 기호와 표기법을 간추려 소개한다.

이 과목을 성공적으로 배우려면 필수적으로 갖추어야 할 자질이 있는데, 그것은 바로 논리적 사고력이다. 이

교제는 가끔 정리(theorem) 또는 보조정리(lemma), 등의 제목으로 이론적인 결과를 증명 없이 제시하거나 증명의

윤곽만 제시한다. 이는 대부분 전통적인 증명법 (예를 들면, 귀납법에 의한 증명)을 이용하여 증명할 수 있거나

증명이 간단할 경우이다. 그러나 이는 증명이 중요하지 않다는 뜻은 결코 아니다. 많은 학생이 증명을 해본 경험이

없어서 소위 “증명 공포증(proof-phobia)”에 사로잡혀 증명해야 할 문제를 보면 아예 포기하는 경향이 있다. 이러한

학생들을 위하여 이 장은 널리 쓰이는 증명법을 모아 소개한다. 학생은 이 장의 내용을 배우고 나면 본론에서

이론을 전개하면서 생략하거나 간추린 증명을 완성할 수 있는 자신이 생길 것이다.

준비

Page 3: 계산모델: 오토마타와 형식언어(CH01-CH05)

3

이 교재는, 달리 밝히지 않으면, 다음과 같은 symbol (기호)을 쓰기로 한다.

• 영문 알파벳의 앞쪽에 나오는 문자들 a, b, c, …을 개체를 표기하는

symbol로 쓴다.

• 영문 알파벳의 뒤쪽에 나오는 문자들 ….., u, v, w, x, y, z를

string(문자열)을 표기하는 symbol로 쓴다.

• 두 개의 문자열 x, y를 차례로 연결한 (concatenated) 문자열을 xy로

표기한다.

• Epsilon ()은 null string (공 문자열) 을 표기하며, 임의의 문자열 x에

대하여 다음과 같은 특성이 있다; x = x = x

• String x에 대하여, |x|는 x의 길이, 즉 x에 있는 문자의 수를 뜻한다.

• String x에 대하여 xi는 문자열 x가 i 번 반복된 문자열, xR 는 x의 역순

문자열을 표기한다.

예: (ab)3 = ababab, (ab)0 = , (abcd)R = dcba.

1.1 표기 관례 (Notational Convention)

준비

Page 4: 계산모델: 오토마타와 형식언어(CH01-CH05)

4

준비표기법

• 영어의 대문자, 와 는 set (집합)을 표기한다.

• 복합기호 : 기호가 표기하는 내용을 쉽게 알아볼 수 있도록 여러 개의

기호를 묶어 하나의 기호처럼 쓴 것을 복합기호 (composite symbol)라

한다. 예를 들면, q', qab, A5, [a, b], [1, A, 5].

우리가 흔히 쓰는 위 첨자 또는 아래 첨자를 쓴 기호가 이에 속한다.

이러한 복합 기호는 원하면 새로운 기호를 도입하여 하나의 문자로

대체할 수 있다. 그러나 많은 경우 , 하나의 문자를 쓰는 것보다

복합문자를 하나의 문자처럼 쓰는 것이 이해하는데 도움이 된다.

본론에서 우리는 많은 예를 볼 것이다.

Page 5: 계산모델: 오토마타와 형식언어(CH01-CH05)

5

• 집합을 명시하기 (set specification) : 집합을 명시하는데 주로 아래의 두

방법을 쓴다. 방법 (a)는 집합의 크기가 유한한 경우, (b)는 크기가

무한한 경우에 쓴다.

(a) Explicit (집합의 내용을 드러내 쓰는) 방법

예: A = {2, 8}, = {a, b, c}

별도로 empty set(공집합)을 Φ로 표기한다. 즉, Φ = { }.

(b)Set properties ( 집합의 특성)을 밝히는 방법

전통적으로 이 방법은 다음과 같은 형식을 따른다.

{ x | x가 갖추어야 할 특성 (property list of x)}

예: A = {n | n은 짝수} = { 2, 4, 6, . . . }

B = {xxR | x는 2진수 } = {00, 11, 0110, 1001, 1111, . .}

C = {anbncn | n 0} = {, abc, aabbcc, aaabbbccc, . . . }

준비표기법

Page 6: 계산모델: 오토마타와 형식언어(CH01-CH05)

6

준비집합연산

두 문자열 집합 A = {aa, ab, abc), B = {aa, bc}에 대하여 자주 쓰는 set

operation (집합연산)을 예시하면 다음과 같다.

• 문자열 집합 연산 (operations on sets of strings): 예

(a) union() : A B = {aa, ab, bc, abc}

(b) intersection( ) : A B = { aa }

(c) subtraction() : A – B = { ab, abc}

(d) exclusive or () : A B = {ab, abc, bc}

(e) product : AB = { aaaa, aabc, abaa, abbc, abcaa, abcbc}

AΦ = ΦA = Φ

(f) complement : A를 어떤 집합 U의 한 부분집합(subset)이라 하자. A의

U에 대한 complement (보집합) A를 다음과 같이 정의한다. A = U – A.

이때, U를 A의 universal set (범 집합)이라 한다. U = {a, b, c}* 일 경우,

A = {a, b, c}* - {aa, ab, abc}.

Page 7: 계산모델: 오토마타와 형식언어(CH01-CH05)

7

준비집합연산

(g) Closure (star, 혹은 Kleene closure): Set A에 대하여 A0 = {}, A1 = A,

A2 = AA, . . ., Ai = AAi-1 라 하자. Set A의 closure를 다음과 같이

정의한다.

즉, 집합 A의 closure A*는 A 내에 있는 string을 임의 개 선택하고, (이때

같은 string을 여러 번 선택할 수 있다.) 연결(concatenate)하여 만들 수

있는 모든 string을 포함한다. 따라서 = {0, 1}라 할 때, * = {0, 1}*는 과

모든 2진수의 집합을, 가 영어의 alphabet일 경우, *는 을 포함하여

영어의 alphabet로 만든 모든 string을 나타낸다.

Closure에는 null string 가 포함되어 있는데, 를 뺀 경우는 star(*) 대신

+를 쓴다. 즉, A+ = A* - {}.

A* = (Ai) = A0 A1 A2 . . . .

i = 0

Page 8: 계산모델: 오토마타와 형식언어(CH01-CH05)

8

준비집합연산

(h) 어떤 set A가 있을 때 2A 를 A의 power set(지수 집합) 이라 하고 A의

모든 부분집합을 요소로 갖는 집합을 표기한다.

예: A = {a, b, c} 일 때, 2A = {Φ, {a}, {b}, {c}, {a, b}, {b, c}, {a, c}, {a, b, c}}.

(i) De Morgan‟s law (드모르간의 법칙):

A B = A B A B = A B

Applicant Bloopers

Interviewer: "Do you think you can handle a variety of tasks?"

Applicant: "I should say so. I've had nine totally different jobs in the past five months."

The stern faced Personnel Officer told an applicant that they needed an individual who is totally responsible. "I sure qualify then." replied the applicant. "Everywhere I've worked, whenever something went wrong, I was responsible."

- Jim -

쉬어 가기

Page 9: 계산모델: 오토마타와 형식언어(CH01-CH05)

9

1.2 명제(proposition)

Proposition (명제)은 true (참) 또는 false (거짓)일 수 있는 declarative

statement (선언문)을 말한다. 여러 개의 proposition을 logical connectives

(논리적 연결자) and (), or (), 또는 not ()로 결합하여 새로운

proposition을 만들 수 있다. 임의의 두 propositions p와 q에 대하여

propositions p q, p q, p는 각각 아래와 같은 truth value (진릿값)을

가진다.

p p

T F

F T

p q p q

T T

T F

F T

F F

T

F

F

F

p q p q

T T

T F

F T

F F

T

T

T

F

준비

Page 10: 계산모델: 오토마타와 형식언어(CH01-CH05)

10

준비명제

위에서 소개한 세 logical connectives 외에 흔히 쓰는 conditional

connective (조건 연결자) if-then ()이 있다. 두 propositions p, q에 대하여

proposition p q (“if p, then q”라 읽음)는 아래의 표와 같은 truth value를

갖는다. 표는 propositions p q 와 p q의 truth value가 같음을

보여준다. 따라서 p q는 p q를 간단하게 표현한 것이라 할 수 있다.

p q p → q

T T

T F

F T

F F

T

F

T

T

p q

T

F

T

T

Proposition p q (if p, then q, 즉 p이면, q이다.)가 conditional statement

(조건문)의 형식을 갖는다 해서 proposition이 true이면, p와 q 사이에

인과관계(antecedence-consequence relation)가 성립한다는 뜻이 아니다.

Page 11: 계산모델: 오토마타와 형식언어(CH01-CH05)

11

p q p → q

T T

T F

F T

F F

T

F

T

T

p q

T

F

T

T

준비명제

예를 들어 p를 “코끼리는 난다.”라고 하고, q를 “지구는 평편하다.”라

하자. 정의에 의하면, p가 false이므로 q의 truth value에 관계없이

conditional statement p q, 즉 “코끼리가 날면, 지구는 평편하다.”라는

말은 참이다. 정의에 의하여 이 말은 참이지만 우리에게 어떤 유익한

정보도 주지 않는 공허한(vacuous) 말장난에 지나지 않는다. Conditional

proposition p q가 의미 있는 말이 되려면 p가 true인 경우이다. 우리는

다음 절(1.3 증명법)에서 많은 예를 볼 것이다.

Page 12: 계산모델: 오토마타와 형식언어(CH01-CH05)

12

p q p → q

T T

T F

F T

F F

T

F

T

T

p q

T

F

T

T

준비명제

Conditional statement p q를 읽는 방법 중 흔히 쓰는 몇 가지를 소개한다.

(a) if p, then q (p이면, q이다). (b) p only if q (오직 q일 때 p이다).

(c) if p holds, q follows (p가 성립하면, q가 따른다).

(d) q if p (p이면 q).

두 propositions p, q를 biconditional connective (양방향 연결자: )로

결합한 형식 p q는 proposition (p q) (p q)의 약식 표현이다. 흔히

p q 대신 “p iff q”라 쓰고 “p if and only if q” 또는 “if p then q, and

conversely.”라 읽는다.

Page 13: 계산모델: 오토마타와 형식언어(CH01-CH05)

13

준비명제

우리는 종종 “p implies q (p는 q임을 뜻한다.).”라는 말이 옳은지 여부를

밝혀야 하는 문제에 접한다. 이 주장은 p가 true이면 항상 q도 true라는

뜻으로, 간략하게 p q라 표기하고, implication (함축문)이라 한다.

Implication p q은 p → q의 truth table 중 첫 행에 해당한다. 달리

말하면, p가 true이면 항상 p q 역시 true이며, “p implies q.”라 한다는

뜻이다. Implication p q는 두 propositions p와 q 사이에 특이한 관계(즉,

p가 true이면, q도 true)에 있음을 주장한다. (Implication p q는

proposition이 아니다. Proposition이 되려면, p와 q의 모든 값에 대하여

truth value가 주어져야 한다.)

p q p → q

T T

T F

F T

F F

T

F

T

T

p q

T

F

T

T

Page 14: 계산모델: 오토마타와 형식언어(CH01-CH05)

14

p q p → q

T T

T F

F T

F F

T

F

T

T

p q

T

F

T

T

q → p

T

F

T

T

준비명제

만일 p q이고 동시에 p q이면, p와 q는 equivalent relation (등가

관계)에 있다고 하고, 간단히 p q라 표기한다. 예를 들면, 아래의 truth

table이 보여주는 것과 같이, 세 propositions p → q, p q, q → p의

truth table은 같다. (어는 하나가 참이면 다른 것도 참이다.) 따라서

이들은 서로 equivalent 하다. 즉, (p → q) (p q) (q → p).

Page 15: 계산모델: 오토마타와 형식언어(CH01-CH05)

15

1.3 증명법 (Proof Techniques)

증명(proof)이란 주어진 말이 옳고 그름을 밝히는 작업이다. 따라서

증명해야 할 말은 truth value (즉, true 또는 false)를 갖는 proposition의

형식으로 줘야 하는데, 흔히 conditional proposition p q로 주어진다.

이 경우, p가 false이면 정의에 의하여 p q는 true지만, 의미 없는

공허한(vacuous) 말이다. 따라서 증명은 p가 true인 모든 경우에 p q가

true인지 밝힐 수 있으면 충분하다. 달리 말하면 증명은 implication p

q가 사실인지를 밣히는 작업이라 할 수 있다.

사실임이 밝혀진 proposition을 theorem(정리)라 하는데, 전통적으로

이 용어는 주제에 중요한 역할을 하는 proposition에 한하여 주어진다.

이제 implication 형식으로 준 주장이 옳고 그름을 증명하는 몇 가지

증명법을 소개한다.

준비

Page 16: 계산모델: 오토마타와 형식언어(CH01-CH05)

16

증명법준비

1. Contrapositive(환질 환위)에 의한 증명: p q 대신 q p의

진위를 밝힌다. 이 방법은 equivalence relation ( p q ) ( q p )을

이용한 것이다.

예: “비가 내렸으면, 잔디가 젖었을 것이다.”의 진위를 밝히는 것은

“잔디가 젖지 않았으면, 비가 오지 않았다.”의 진위를 밝히는 것과 같다.

예: p = p1 p2 p3 일 경우 다음과 같은 equivalence relation이 성립한다.

2. 경우에 따른 증명(proof by cases): p 또는 q가 여러 경우를 내포하고

있으면, 각 경우를 개별적으로 증명한다.

((p1 p2 p3) q) ((p1 q) (p2 q) (p3 q))

따라서 각 경우 별로 p1 q, p2 q, p3 q를 증명하고 어느 하나가

true이면, p q는 true이고, 모두 false이면, p q는 false 이다.

Page 17: 계산모델: 오토마타와 형식언어(CH01-CH05)

17

3. Proof by contradiction (모순에 의한 증명): 이 방법은 만일 implication

p q가 성립하지 않는다면 (즉, p q가 false이면), p를 포함하여, 이미

알려진 사실에 모순(contradiction)이 된다는 것을 보여줌으로써 주어진

implication이 옳다는 것을 밝히는 기법이다.

증명법 준비

예: “오토마타와 형식언어를 공부한 학생은 누구나 좋은 직장을

얻는다.”라는 말이 사실임이 밝혀졌다 하자. Proposition p를 “갑돌이는

좋은 직장을 얻지 못했다.”, proposition q를 “갑돌이는 오토마타와

형식언어를 공부하지 않았다.”라 했을 때 implication p q가 옳음을

증명한다. 이를 위하여 p q가 false라 가정하고, 이 가정이 위의 알려진

사실에 contradict 함을 보여준다.

Implication p q는 p가 true임을 전제로 한 것임을 기억하자. 따라서

proposition p q가 false라는 가정으로부터 p가 false임을 보여줄 수

있다면, 이 역시 모순이며 가정이 잘못임을 보여주는 것이다.

Page 18: 계산모델: 오토마타와 형식언어(CH01-CH05)

18

증명법준비

Equivalence (p → q) (p q)에 따라, 만일 p → q이 false면, p q도

false다. 따라서, (p q) = p q = p q = true이다.

즉, “갑돌이는 좋은 직장을 얻지 못했는데, 오토마타와 형식언어를

공부했다.”라는 증명된 사실에 contradict 한 결론에 도달한다. 따라서, p

→ q는 true이어야 한다. Implication p q는 p가 true임을 전제로 주어진

것이므로 p → q가 true이기 위하여 q 또한 true이어야 한다. 따라서

implication p q (“갑돌이가 좋은 직장을 얻지 못했다면, 오토마타와

형식언어를 공부하지 않았다.”)는 옳은 말이다.

Proof by contradiction 기법은 특히 computer 관련 분야에서 자주 쓰는

증명법으로 교과서의 본론에서 많은 예를 볼 것이다.

Page 19: 계산모델: 오토마타와 형식언어(CH01-CH05)

19

4. 증명에서 quantified (계량화된) 말을 다루는 법: 우리는 가끔

증명해야 할 말이 “모든 …. 에 대하여” (for all 또는 for every)라거나,

“….가 존재한다.” (there exists)라는 어절을 동반한 변수를 내포하는

경우를 본다. 구체적으로 이들은 다음과 같은 형식을 갖는다.

(1) “모든 (또는, 각) x, y…에 대하여…” (간단히 x,y…로 표시)

(2) “…. x, y 가 존재한다 (또는, 있다) …” (간단히 … x, y…로 표시)

양식 (1)을 universal(보편적) quantification, 양식 (2)를 existential(내재적)

quantification 라 한다.

예: 지난해에 이 과목을 수강한 모든 학생은 졸업 후 좋은 직장을

얻었으며, 그 가운데는 실격한 학생도 있더라.

증명법 준비

Page 20: 계산모델: 오토마타와 형식언어(CH01-CH05)

20

어떤 변수 x에 관련된 true 또는 false가 될 수 있는 문장을 p(x), q(x),

또는 r(x), 등으로 표기하기로 하자. 위의 예에서 학생을 x라 할 때,

“지난해에 이 과목을 수강한 학생은 졸업 후 좋은 직장을 얻었다.”를 p(x),

그리고 “실격한 학생”을 q(x)라 표기하기로 한다면, 위의 예는 다음과

같이 간단히 표현할 수 있다.

증명법준비

x [p(x)] and x [q(x)]

(a) 예에 의한 증명 (Proof by example): x [q(x)]의 형태의 말이 참임을

증명하려면, 이를 뒷받침 할 수 있는 하나의 예를 제시할 수 있으면

충분하다.

예: “이 과목을 수강한 학생 중에는 학기 성적이 A인 학생도 있다.”라는

말이 옳음을 증명하려면, 한 학생, 예를 들어 홍길동의 성적이 A라는

사실을 제시할 수 있으면 충분하다.

Page 21: 계산모델: 오토마타와 형식언어(CH01-CH05)

21

증명법 준비

(b) 일반화에 의한 증명 (Proof by generalization): x [P(x)] 형식의 말이

옳음을 밝힐 때 방법이다. 변수 x의 영역이 크지 않으면, 각 경우를 따져

증명할 수 있다. 변수 x의 영역이 커서 일일이 검토할 수 없다면, 이미

증명된 사실을 이용하든지 다른 방법으로, x의 모든 경우에 주어진 말이

옳다는 것을 보이는 일반화(generalize) 과정을 거친다.

예: “우리 대학에서 한국어 과목을 듣는 학생은 모두 유학생이다.”라는

말이 사실임을 증명하는 문제를 생각해 보자. 한국어 과목을 수강하는

학생 수가 소수이면, 학생과에 조회하여 간단히 확인할 수 있다. 그러나

학생 수가 많아 일일이 조회하기가 어려우면, 외국인에 한하여 이 과목을

수강할 수 있다는 대학의 학칙을 제시함으로 이 과목을 수강하는 학생은

모두 유학생임을 밝힐 수 있다.

Page 22: 계산모델: 오토마타와 형식언어(CH01-CH05)

22

증명법 준비

만일 x [P(x)] 형식의 말이 옳지 않음을 밝히는 것이 목적이라면, x

[q(x)] 형식의 말이 옳음을 증명할 때와 같은 방법으로 하나의 예를

제시하면 충분하다. 이 방법을 proof by counter example (반례에 의한

증명)이라 한다. 이와 대조적으로 x [q(x)] 형식의 말이 옳지 않음을

밝히려면, x [P(x)] 형식의 말이 옳음을 밝힐 때와 같이 proof by

generalization 기법을 쓰는 것이 효과적이다.

예에서 보게 되겠지만, 증명해야 할 말이 정수와 연관되어 일반화

되어 있음을 분명히 밝힐 때도 있지만, 그러한 정수가 암묵적으로

내포되어 있을 수도 있다. 이 경우, 묻혀 있는 정수를 들어내야 한다.

5. 귀납에 의한 증명 (Proof by Induction): 이 방법은 증명할 말이 특정한

범위의 정수에 관하여, 예를 들면, “모든 (또는 임의의) 자연수 n에

대하여…”와 같은 형식으로 generalize (일반화) 되어 있을 때, 이 말이

옳음을 증명하는 데 매우 효과적이다.

Page 23: 계산모델: 오토마타와 형식언어(CH01-CH05)

23

증명법준비

이 방법은 (1) base(기초), (2) induction hypothesis(가정), (3) induction

(귀납)의 3단계를 거쳐 증명한다. Base 단계는 정수의 lower limit (하한

값)에 대하여 주어진 말이 옳음을 증명하는 것이고, hypothesis 단계는

임의의 정수 m < n에 대하여 제시된 주장이 옳다고 가정하는 것이며,

마지막 induction 단계는 m에 대한 가정이 옳다면, 정수 m+1에 대하여도

옳다는 것을 증명하는 것이다.

Love

Never pretend to a love which you do not actually feel, for love is not ours to command. - Alan Watts –

We can only learn to love by loving. - Iris Murdoch –

Love is the triumph of imagination over intelligence. - H. L. Mencken –

There is no remedy for love but to love more. - H. D. Thoreau -

쉬어 가기

Page 24: 계산모델: 오토마타와 형식언어(CH01-CH05)

24

증명법 준비

등식의 좌측은 n

i=0 i = m+1

i=0 i = m

i=0 i + n이며, 가정에 의하여

m

i=0 i = m (m + 1) / 2이므로, 다음과 같이 등식의 우측과 같음을 알 수 있다.

증명: (1) Base (n = 0 일 때): 등식의 좌측: ( 0

i=0 i) = 0. 우측: n(n+1)/ 2 = 0.

따라서 등식이 성립한다.

(2) Hypothesis: m < n [ m

i=0 i = m(m + 1) / 2]라고 가정하자.

(3) Induction: n = m + 1에 대하여, n

i=0 i = n(n + 1) / 2임을 증명한다.

예: n 0 [ n

i=0 i = n(n+1) /2 ]임을 증명하라.

m

i=0 i + n = m (m + 1) / 2 + n = m (m + 1) / 2 + (m + 1)

= (m + 1) (m + 2) / 2 = n (n + 1) / 2

이 장의 끝에 있는 되새김(rumination) 난에서 예를 더 들고 이

증명법의 깊은 의미를 되새겨보기로 한다.

Page 25: 계산모델: 오토마타와 형식언어(CH01-CH05)

25

6. 문제의 답을 직접 제시하는 증명(constructive proof)과 답이 있음을

간접적으로 보이는 증명(non-constructive proof).

증명법준비

Constructive proof: 5는 소수이고 2보다 크다. 따라서 위의 주장은 옳다.

Non-constructive proof: 모든 정수를 소수의 곱으로 표현할 수 있다는

것은 잘 알려진 사실이다. 만일 2보다 큰 소수가 존재하지 않는다면,

모든 수는 유일한 소수인 2의 곱, 즉 2i로 표현할 수 있어야 한다.

그러나 자연수 중에는 5와 같이 2i로 표현될 수 없는 수가 있다. 이는

이미 알려진 사실, 즉 모든 자연수를 소수의 곱으로 표현할 수 있다는

사실에 모순(contradict)이다. 따라서 2보다 큰 소수가 있다.

예: Prime number (소수) 가운데는 2 보다 큰 수가 존재한다.

Page 26: 계산모델: 오토마타와 형식언어(CH01-CH05)

26

7. 비둘기 구멍 원리(pigeonhole principle)에 의한 증명.

이 증명법은 다음과 같은 원리를 이용한다: n 개의 비둘기 구멍과

이보다 많은 m( > n ) 개의 편지가 있다고 하자. 이 m 개의 편지를 n

개의 비둘기 구멍에 배분하여 넣는다면, 배분하는 방법에 관계없이 두

개 이상( 2)의 편지가 들어 있는 비둘기 구멍이 있기 마련이다.

증명법준비

1 2 n

. . . . .

1 2 . . . m

Pigeonhole principle은 직관적으로 당연한 것처럼 보인다. 그러나 직관

자체가 증명이 될 수 없다. 증명은 논리적으로 분명하게 제시되어야 한다.

Pigeonhole principle에 대한 증명은 이 장의 끝에 있는 proof by induction을

위한 되새김에서 자세히 제시한다.

Page 27: 계산모델: 오토마타와 형식언어(CH01-CH05)

27

증명: 그래프의 임의의 한 경로를 따라 방문한 node의 수는 경로의 길이,

즉 edge의 수보다 많다. (경로의 시작 node도 방문한 것임을 유의하자.)

그래프의 node를 pigeonhole라 하고, node를 방문할 때마다 그 node에

한 개의 편지를 넣는다 하자. 경로의 길이가 n과 같거나 n보다 크면,

방문한 node 수, 즉 편지의 수 m은 node의 수 n보다 크다. Pigeonhole

principle에 의하여 최소한 한 개의 pigeonhole(즉, node)이 두 개

이상( 2)의 편지(즉, 방문)를 받고 있다. 한 경로 상에 두 번 이상

방문한 node가 있다는 것은 cycle이 존재한다는 뜻이다.

증명법준비

응용 예: Pigeonhole principle을 이용하여 node의 수가 n인 directed graph

(방향성 그래프) 상에서 길이가 n과 같거나 큰 path(경로)는 항상

cycle(순환경로)을 내포하고 있음을 증명하라.

Page 28: 계산모델: 오토마타와 형식언어(CH01-CH05)

28

8. 헤아려 증명하기 (Proof by counting): 우리는 가끔 주어진 특성을

만족하는 수 또는 범위에 관한 주장이 진위를 밝히는 문제에 접한다.

이때 주로 쓰는 방법이 제시한 조건을 만족하는 요소의 수 또는 범위를

알아내는 기법이다. (이 방법은, 예에서 보게 되겠지만, 항상 헤아려(count)

증명한다는 뜻이 아니다. )

예: 임의의 정수 n > 0에 대하며 크기 n n인 bit (0/1) matrix의 row (행) 및

column (열) 상에 길이가 n인 모든 2진수를 나타낼 수 없다.

증명: 길이가 n인 2진 수는 모두 2n 개이며, 크기 n n인 bit matrix의 row와

column에 각각 n 개의 수, 즉 모두 2n 개의 2진 수를 넣을 수 있다. 정수 n >

2일 때, 2n > 2n이 성립하므로, 위의 주장은 옳다. 나머지 경우, 즉 n = 2

또는 n = 1일 때도 쉽게 증명할 수 있다. (이 부분은 독자의 연습문제로

남겨 둔다.)

증명법 준비

1 0 1

1 1 0

0 0 1

Page 29: 계산모델: 오토마타와 형식언어(CH01-CH05)

29

9. 대각화 기법 (diagonalization technique): 이 방법은 길이가 m인 n 개의

list(목록)가 주어졌을 때, 이 n 개의 list에 없는 새로운 list를 만들어 내는

방법이다. (이 기법은 15장에서 형식언어의 특성을 밝히는데 매우

효과적인 도구로 쓸 것이다. )

예: 크기 n n인 임의의 bit matrix M이 주어졌다 하자. (단, n > 0).

Matrix M의 어느 행(row)이나 열(column)에도 나타나지 않는 길이 n인

2진수를 만들 수 있다.

증명법준비

위의 문제를 일반화하여 크기 n m인 matrix (단, n m)일 때에도

답을 얻는 방법을 생각해 보자.

답: M의 i번째 column과 i번째 row에 위치한 bit를 mii, 이 bit의

complement(보수)를 m i i라 하자 . 2진수 v = m11m2 2…mn n는 M의

어느 column이나 row에도 없다. 왜냐하면 mii mii. 즉, matrix의 i (1 i n) 번째

row나 column에 있는 수의 i 번째 bit mii는 v의 i 번째 bit mii 과 다르기 때문이다.

Page 30: 계산모델: 오토마타와 형식언어(CH01-CH05)

30

Rumination(되새김) 1. Conditional connective (조건연결자)

준비

p q p → q

T T

T F

F T

F F

T

F

T

T

p q

T

F

T

T

본론에서 언급했다시피 조건연결자(, if-then)의 진리 표(truth table)는 논리적인 정의일 뿐, 인과관계 (antecedence-

consequence, 또는 course-effect)를 나타내는 것이 아니다. 하지만, 이 연결자는 두 propositions p와 q가 antecedence-

consequence (즉, implication) 관계에 있을 때 p로부터 q를 추론해내는데 매우 유용한 논리적인 틀을 제공한다.

두 propositions이 관련이 없을 때 conditional connective 논리를 적용하면, 무의미한 말에 이를 수 있다. 예를 들어 p를

“나는 TV를 본다.”, q를 “우리 축구팀이 승리한다.”라 하고 다음과 같은 간단한 equivalence relation을 적용해 보자. (이

relation의 증명은 독자에게 맡긴다.)

(p p) (q q) (p q) (q p)

위 식의 좌측 (p p) (q q) 이 true이므로 우측의 (p q)이 true이거나 (q p) 이 true이다. 즉,

(p q) 이 true이거나 (q p)이 true이다.

이 표현을 풀이하면 다음과 같다. “내가 TV를 보면, 우리 축구팀이 이기거나, 우리 축구팀이 이기면, 내가 TV를 본다.”

Page 31: 계산모델: 오토마타와 형식언어(CH01-CH05)

31

Proof by induction 기법은 정수 k 이상의 모든 수 n (즉 n k)에 관련한 어떤 주장이 옳음을 증명하는 방법이다. 이러한

주장에는 정수 k와 n이 분명히 밝혀질 경우도 있지만, 많은 경우, 다음에 들 예와 같이, 암묵적으로(implicitly) 내포되어

있을 수 있다. 이 경우 증명에 앞서 내포해 있는 정수를 드러내 밝혀야 한다.

Proof by induction은, 특히 본문의 예와 같이 문제가 수학적인 단순한 표현으로 제시됐을 때, 거의 기계적으로

적용되기 때문에 이 방법의 논리적인 배경을 확실히 이해하지 못하고 지나칠 수 있다. 우리가 계단을 걸어 올라가는

행동에 비유하여 이 증명법에 깔린 논리적 의미를 알아보기로 하자.

계단을 올라 목적지인 다음 층 (즉, n 번째 단)에 도달하려면, 우리는 다음과 같은 절차를 거친다. 우선 계단의 밑(0번째

단)으로 걸어간 다음, 한 (i번째) 단에서 다음 (i+1번째) 단으로 올라가는 행동을 반복 적용한다. 다시 말하면, 계단을

오르려면 (1) 계단의 최 하단 (i = 0)으로 가야 하고, (2) 임의의 i번 (0 i < n) 계단에 도달했다면, (3) i번 계단에서

다음 i+1번 계단으로 올라설 수 있어야 한다.

Rumination 2. Proof by Induction

Proof by induction 방법도 같은 논리로 진행된다. 계단을 오르려면 계단 밑으로 갈 수 있어야 하는 것처럼,

증명의 (1) 단계 (즉, base)는 제시된 주장이 lower limit (하한 값) k에 대하여 옳음을 밝히는 것이다. 다음 (2) 단계로 임의의

정수 n‟ (k n‟ < n)에 대하여 제시된 주장이 옳다면, 마지막 (3) 단계에서 정수 n‟+1인 경우도 옳음을 밝힘으로 증명은

끝난다. 왜냐하면, 하한 값 k일 때 주장이 옳다는 것이 밝혀졌으므로, (2)와 (3) 단계에 의하여 k+1인 경우도 참이 된다.

마찬가지로, k+1일 때 주장이 옳으므로 k+2일 때도 옳다 결국 모든 정수 n k일 때 주장이 옳다는 결론에 도달한다.

증명의 논리적인 흐름을 분명히 하려면 이처럼 증명을 세 단계로 분리하거나, (2) 번과 (3) 번 단계를 묶어 두 단계로

증명하기도 한다. 다음 그림은 계단을 오르는 논리와 proof by induction을 대응시켜 놓은 것이다.

준비

Page 32: 계산모델: 오토마타와 형식언어(CH01-CH05)

32

0

1

23

n‟

nProve that n 0 [ n

i=0 i = n(n+1) /2 ]

(1) Base: n = 0일 때, 0

i=0 i = 0, n(n+1)/ 2 = 0.

따라서 n = 0일 때 등식이 성립한다.

(2) Hypothesis: n' < n 에 대하여

n'

i=0 i = n'(n'+1) /2이 참이라 가정.

(3) Induction step: n = n'+1일 때,

n

i=0 i = n(n+1) /2임을 증명 (아래).

0 + 1 + 2 + . . . . . . . + n' + (n'+1)

n'(n'+1)/2 + (n'+1) = (n'+1)(n'+2)/2 = n(n+1)/2

준비Rumination 2: Proof by Induction

A

N

I

Page 33: 계산모델: 오토마타와 형식언어(CH01-CH05)

33

(1) Base: Pigeonhole이 한 개, 즉 n = 1이고, m > n개의 편지가 있을 때:

둘 이상의 편지가 모두 주어진 한 개의 pigeonhole에 있어야 하므로 PP는 참이다.

1 2n‟ n‟+1

. . . . .1 2 m

Proof by induction 기법을 이용하여 다음에 제시한 pigeonhole principle이 옳음을 증명하자.

증명: Pigeonhole의 수 n은 자연수일 때 의미가 있으므로, n 1일 때에 한하여 PP를 증명한다.

(2) Hypothesis: 모든 정수 n‟ < n에 대하여 PP가 옳다고 하자.

(3) Induction: Pigeonhole 수가 n‟+1이고 편지의 수가 m > n‟+1일 때 PP를 증명한다.

아래 그림이 예시하는 바와 같이 n‟+1 개의 pigeonhole에 편지를 배분할 수 있는 경우를 다음과 같이 두 가지로

나누어 분석하여 보기로 하자.

(a) n‟+1번째 pigeonhole에 편지가 없거나 하나만 있을 때: 나머지 n‟ 개의 pigeonhole에 적어도 n‟ ( m – 1) 개의

편지가 있다. 가정에 따라 이들 pigeonhole 가운데 어는 하나에 2개 이상의 편지가 들어 있어야 한다. 따라서 PP는 옳다.

(b) n‟+1번째 pigeonhole에 편지가 2개 이상 있을 때: 이 pigeonhole이 편지를 2개 이상 갖고 있으므로 PP은 참이다.

준비Rumination 2: Proof by Induction

Pigeonhole Principle (PP): n 개의 pigeonhole과 m > n 개의 편지가 있다고 하자. 이 m 개의 편지를 모두 n 개의

비둘기구멍에 배분하여 넣는다면, 배분하는 방법에 관계없이 두 개 이상( 2)의 편지가 들어있는 비둘기구멍이 있다.

Page 34: 계산모델: 오토마타와 형식언어(CH01-CH05)

34

0

1

23

n‟

n

n ( 1) 개의 pigeonhole 과 m (> n) 개의

편지가있을 때 PP 증명.

(1) Base: pigeonhole 수 n = 1, m n일 때: PP 증명.

(2) Hypothesis: 모든 정수 n‟ < n 개의Pigeonhole 과 m > n‟ 개의 편지가 있을 때PP가 옳다고 하자.

(3) Induction: n = n‟+1개의pigeonhole과 m > n개의편지 가 있을 경우 PP 증명.

1 2n‟ n‟+1

. . . . .1 2 m

(3) Induction:

m > n‟+1

준비되새김: Proof by Induction 에 대하여 A

N

I

Page 35: 계산모델: 오토마타와 형식언어(CH01-CH05)

35

1.1 다음 각 표현은 무엇을 나타내나? 답이 크기가 유한한 집합이면 그 요소들을 전부 밝히고, 크기가 무한한

집합이면 set property 표현법을 써서 가능한 간략하게 나타내라.

(a) a5 (b) |aba7b| (c) || (d) xR , 단 x = abab

(e) AB, 단 A = {a, b, c}, B = {aaaa, bbbb, cccc}.

(f) A*BA*, 단 A와 B는 (e) 번 문제의 것과 같음.

1.3 아래에 주어진 string의 집합에 대하여 다음 각 집합연산 결과를 되도록 간략한 set property 표기법으로 표현하라.

(a) L0 L4 (b) L0 L1 (c) L3 L5 (d) (L2 - L1) L4 (e) L0L5

L0 = {cibjak | i, j, k > 0, j = k } L1 = {cibjak | i, j, k 0, i = j }

L2 = {a, b, c}* L3 = {xxR | x {a, b, c}* }

L4 = { cibjak | i,j,k 0 } L5 = {cibjck | i,j,k 0 }

연습문제

1.2 아래 (1) – (7) 에 주어진 strings 가운데 다음 각 집합에 포함되어 있는 것을 모두 찾으라.

(a) {xyxR | x {a, b, c}*, y ccc } (b) {xx | x {a, b, c}* }

(c) {x | x {a, b, c}* and x에 있는 a의 수는 b의 수 보다 많다. } {aibj | i, j > 0 }

(d) ({a, b, c}* - ({aibj | i > j > 0 } {aibj | 0 < i < j })) {aibj | i, j > 0 }

(1) aaaabbbb (2) aaaa (3) aaaacccaaaa (4) bbbaaaa (5) abcccccba (6) aaaaab (7) abaaba

준비

Page 36: 계산모델: 오토마타와 형식언어(CH01-CH05)

36

1.4 임의의 두 정수 a와 b에 대하여 다음 주장을 증명하라.

a = b if and only if a ≥ b and a b.

1.5 임의의 양의 정수 n 3에 대하여 길이가 n인 모든 2진수를 n n bit matrix의 n 행(row)과 n 열(column)에 넣을

수 없음을 증명하라.

1.6 Node의 수가 n ≥ 2이며 각 node가 1 또는 2로 label 된 방향성 그래프(directed graph)가 주어졌다 하자. Label이

1인 node에서 출발하여 label이 2인 node에서 끝나는 임의의 경로 상에 서로 다른 label을 잇는 edge (즉, 1 2 또는

2 1)의 수는 그래프에 관계없이 항상 홀수임을 proof-by-induction 법으로 증명하라. 아래의 그림은 길이가

9인 경로 상에 조건에 맞는 edge가 7개 있음을 보여준다.

1

2

1

2

2

1

1

2

1

2

3

4

5

6

7

8

9

다른 label을 가진 node를 연결한 7 개의 edge.

경로 상의 node

1.7 위의 문제에서 edge의 조건을 “서로 다른 label을 가진 node를 잇는 edge” 대신 “같은 label을 가진 node를

잇는 edge”로 바꾸어도 같은 주장(즉 “그러한 조건을 가진 edge의 수가 홀수이다.”)을 할 수 있나? 답을 증명하라.

연습문제

1 2 2 1 2 1 2 2 1 2

준비

Page 37: 계산모델: 오토마타와 형식언어(CH01-CH05)

37

1.8 우리는 본문에서 pigeonhole principle을 이용하여 다음의 주장이 옳다는 것을 증명하였다.

[ Node의 수가 n인 directed graph의 길이가 n보다 크거나 같은 모든 path(경로)는 항상 cycle (순환회로)을 포함한다. ]

아래 그림은 9개의 node를 갖는 directed graph 상에 길이가 9인 path를 보여준다. 여기서 우리는 같은 문제를 proof-by-

induction 기법으로 증명하려고 한다. 다음 질문에 답하라. (이 문제를 풀기 전에 proof-by-induction 기법과 적용 예를

복습하기 바란다. )

(a) 이 문제의 base는 어떤 경우인가? 이 경우에 문제의 주장의 옳다는 것을 증명하라.

(b) Induction hypothesis를 제시하라.

(c) 다음 쪽에 제시한 정보를 가지고 증명의 induction 부분을 완성하라.

1

23,

4

5

6

7

8

9

준비연습문제

Page 38: 계산모델: 오토마타와 형식언어(CH01-CH05)

38

(d)(a) (b) (c)

아래 그림 (a) – (d)는 길이가 n보다 크거나 같은 path 상에 있을 수 있는 대표적인 4 경우를 모두 예시한 것이다.

그림 (a)-(c)는 path(적색)가 통과하지 않은 node(짙은 색)가 있는 경우이며, 그림 (d)는 path가 모든 node를

통과한 경우이다. 여기서 “node를 통과한다”라는 말은 다른 node를 거쳐 방문한 후 다음 node로 간다는 뜻이다.

(i) 그림 (a) – (c)의 경우 Induction hypothesis를 이용하여 path 내에 cycle이 존재함을 증명하라.

(ii) 그림 (d)의 경우 어떤 이유로 cycle이 존재한다고 할 수 있나?

준비연습문제

Page 39: 계산모델: 오토마타와 형식언어(CH01-CH05)

39

2. 형식언어(Formal Languages)

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 41: 계산모델: 오토마타와 형식언어(CH01-CH05)

41

2. 형식언어(Formal Languages)

위의 두 정의가 공통으로 제시하고 있는 것은 단어와 단어에 대한 발음, 또는 신호와 기호, 등과 같은 언어의

구성요소 (element)와 이들을 연계하여 사용하는 법칙(rule) (또는 방법)이다. 그러나 자연어일 경우 언어의

요소와 법칙, 즉 문법은 언어가 있기 전에 만들어진 것이 아니라, 정보를 전달하려고 쓰는 말 (즉, 문장)에

내포되어 생성 발전한 것이다. 따라서 자연언어의 법칙은 말을 분석하여 얻는다. 말에는 언어의 요소가

포함되어 있으므로, 특정 언어에 속한 모든 말, 즉 모든 문장의 집합에는 언어의 요소와 이들을 연계하는 법칙이

포함되어 있다. 따라서 언어란 간단히 그 언어에 속한 말, 즉 “문장의 집합”이라 정의할 수 있다. 이러한

관점에서 형식언어를 다음과 같이 간단히 정의한다.

Webster 사전에 보면 언어를 다음과 같이 두 가지로 정의하고 있다.

(1) The words, their pronunciation, and the methods of combining them used

and understood by a community. (단어와 단어의 발음 및 이러한 단어들을

연계하여 쓰는 방법으로 어떤 집단이 이해하고 쓰는 것이다.)

(2) A system of signs and symbols and rules for using them that is used to

carry information. (정보를 전달하려고 사용하는 신호와 기호 및 이들을 사

용하는 법칙에 관한 시스템을 말한다. )

Page 42: 계산모델: 오토마타와 형식언어(CH01-CH05)

42

형식언어

다음의 문자열 집합들은 위의 정의에 의하여 모두 언어라 할 수 있다. (집합 C는 C++ 언어, 집합 D는 한국어다.)

(3) 언어는 문자열의 집합(a set of strings)이다.

A = { xxR | x {0, 1}+ } = {00, 11, 0110, 1001, 1111, . .}

B = { anbncn | n 0} = {, abc, aabbcc, aaabbbccc, . . . }

C = { x | x is a C++ program }

D = { x | x is a Korean sentence }

우리는 1장 Preliminary(준비)에서 집합을 표현하는 방법으로 표현할 집합이 크지 않으면 그 내용을 모두

표기하거나, 그렇지 않을 때, 집합의 내용이 공통으로 가진 특성을 기술하는 방법 (defining set by set properties)을

배웠다. 그러나 이 방법은 언어가 복잡하면 그 특성(property)을 찾아 기술하고 이를 이용하기가 쉽지 않아

실용적이지 못하다. 따라서 컴퓨터 프로그래밍과 같은 응용 분야에서는 언어를 문자열의 집합으로 표현하는 대신, 그

언어의 문자열을 만드는 rule, 즉 문법으로 표현한다. 이 장에서 우리는 rule G가 주어졌을 때, G에 의하여 표현할 수

있는 언어를 구하고, 반대로 언어 L이 주어지면, L의 rule들 만드는 실습을 하여 언어와 rule 사이의 관계를 배우기로

한다. 우선 주어진 rule이 정하는 언어를 만들어보자.

Page 43: 계산모델: 오토마타와 형식언어(CH01-CH05)

43

다음과 같은 „봄-문법‟이라 이름한 간단한 rule을 가지고 이 rule이

정하는 자연어를 만들어보자.

봄-문법: <봄-문장> <봄-주어> <봄-술어>

<봄-주어> 새가 | 꽃이 | 싹이

<봄-술어> 노래한다. | 핀다. | 난다.

봄-문법으로 하나의 문장을 만들려면, <봄-문장>으로 시작하여 다음

예와 같이 rule을 반복 적용하여 어떤 rule도 적용할 수 없을 때까지

진행한다. 이 결과 얻어진 것이 봄-문법이 생성할 수 있는 문장이다.

R u l e의 우측에 있는 수직선 ( | )은 이 기호로 분리되어 있는

요소들 가운데 하나를 마음대로 선택할 수 있다는 뜻이다.

<봄 문장> <봄 주어> <봄 술어> 새가 <봄 술어>

새가 노래한다.

형식언어2.1 Rule에 의한 언어 생성

Page 44: 계산모델: 오토마타와 형식언어(CH01-CH05)

44

봄-문법: <봄-문장> <봄-주어> <봄-술어>

<봄-주어> 새가 | 꽃이 | 싹이

<봄-술어> 노래한다. | 핀다. | 난다.

<봄 문장> <봄 주어> <봄 술어> 새가 <봄 술어>

새가 노래한다.

위에서 <봄-주어> rule을 적용할 때 „새가‟ 대신 „꽃이‟를 선택했다면,

„꽃이 노래한다.‟를 얻는다. 이렇게 봄-문법 rule을 적용하여 만들 수

있는 문장의 집합, 즉 언어는 3개의 주어와 3개의 술어의 조합으로 만들

수 있는 9개의 문장을 갖고 있다. 이 언어를 L(봄-문법)이라는 이름으로

표기하면 다음과 같다.

L(봄-문법) = { 새가 노래한다., 새가 핀다., 새가 난다., 꽃이 노래한다.,

꽃이 핀다., 꽃이 난다., 싹이 노래한다., 싹이 핀다., 싹이 난다. }

형식언어Rule에 의한 언어 생성

Page 45: 계산모델: 오토마타와 형식언어(CH01-CH05)

45

형식언어는 문장의 뜻이 아니라 구조에 관련된 문제를 다루는

모델이므로 문법의 각 요소를 다음과 같이 간단한 기호로 표시하는

것이 편하다. (혼동을 피하기 위하여 공백 대신 #을 썼다.)

G S A # B

봄-문법: <봄-문장> <봄-주어> <봄-술어>

A a b c

<봄-주어> 새가 | 꽃이 | 싹이

B d e f

<봄-술어> 노래한다. | 핀다. | 난다.

G: S A#B

A a|b|c

B d|e|f

L(G) = { a#d, a#e, a#f, b#d,

b#e, b#f, c#d, c#e, c#f }

형식언어Rule에 의한 언어 생성

Page 46: 계산모델: 오토마타와 형식언어(CH01-CH05)

46

형식언어

예 1. S dingdongA A dengS | deng

Rule에 의한 언어생성

다음 예 1 과 같은 rule이 생성할 수 있는 문자열을 알아 보자. 이

ru l e의 좌측 문자열은 모두 한 개의 문자로 되어 있다 .

관례에 따라 rule은 항상 시작 문자 S로 시작하여 적용한다.

S

S dingdongA A dengS

dingdongdengS

S dingdongA

dingdongdengdingdongA

A deng

dingdongdengdingdongdeng

예에서 rule A deng을 적용하느냐 A dengS를 적용하느냐에

따라, dingdongdeng을 원하는 수 만큼 반복하는 문자열을 만들 수 있다.

dingdongAA

N

I

Page 47: 계산모델: 오토마타와 형식언어(CH01-CH05)

47

예 2. S aaS | aa

형식언어

위의 예에서 문자 S를 가지고 주어진 rule을 반복 적용하여 만들 수

있는 문자열은 수없이 많다. 이들 가운데 지정된 문자 (일반적으로

소문자) 만 포함하는 문자열을 rule의 생성물 (yield)이라 한다. 예 1의

rule을 따라 발생하는 문자열의 집합, 즉 언어 L은 다음과 같이

간단한 집합 특성(set property)으로 표시할 수 있다.

L = { (dingdongdeng)i | i 1 }

S aa

S aa S aaS

S aaS aaaa

S aa

S aaSS aaS

aaaaSS aaS

aaaaaaS aa

. . . . . . . . . .

L = {a2i | i > 0}

Rule에 의한 언어생성

A

N

I

Page 48: 계산모델: 오토마타와 형식언어(CH01-CH05)

48

예 3. S aSb | ab

S

S ab

ab

S aSb

aaSbb

S aSb

aSb

S ab

aabb

S ab

aaabbb

. . . . aaaabbbb

. . . . . . aaaaabbbbb

. . . . . . .

L = {aibi | i 1}

형식언어Rule에 의한 언어생성

A

N

I

Page 49: 계산모델: 오토마타와 형식언어(CH01-CH05)

49

S

Ca aaC

AaaCB

aD Da

AaDaB

aD Da

ADaaB

AD AC

ACaaB

Ca aaC

AaaCaB

형식언어Rule에 의한 언어생성

S ACaB | a AD AC Ca aaC aE Ea

CB DB | E AE aD Da

예 4.

S a

a

CB E

AaaE

aE Ea

AaEa

aE Ea

AEaa

AE

aa

S ACaB

ACaB

CB DB

AaaDB

Ca aaC

AaaaaCB

CB E

AaaaaE

aE Ea

. . . . AEaaaa

AE

aaaa

A

N

I

Page 50: 계산모델: 오토마타와 형식언어(CH01-CH05)

50

형식언어

예 4는 rule의 수가 많아 발생하는 string의 특성을 파악하는 것이 쉽지

않다. 그러나 앞 slide의 내용을 주의 깊이 관찰하면 주어진 rule이

발생하는 string을 추정하는 것은 어렵지 않다.

현재 주어진 문자열이 ACaa . . . aB라 하자. 여기서 적용할 수 있는

rule은 Ca aaC 밖에 없다. 이를 반복 적용하면, C는 우측 끝의 B를

만날 때까지 이동하며, a의 수를 2배 증가시킨다. C가 B를 만났을 때

CB DB를 적용한 후, aD Da를 반복 적용하면 D는 좌측으로 A를

만날 때까지 이동한다. 이때 AD AC에 의하여 D는 C로 바뀌고, C는

다시 rule Ca aaC에 의하여 우측으로 이동하며 a의 수를 2배

증가시킨다.

S ACaB | a AD AC Ca aaC aE Ea

CB DB | E AE aD Da

예 4.

Rule에 의한 언어생성

Page 51: 계산모델: 오토마타와 형식언어(CH01-CH05)

51

C가 우측 끝에 있는 B를 만났을 때 CB DB 대신 CB E를

적용하면, aE Ea에 의하여 E는 A를 만날 때까지 좌로 이동한 후 rule

AE 에 의하여 A와 함께 소멸하여 a만으로 된 string이 남게 된다.

따라서 예 4의 rule은 길이가 1, 2, 4, 8, 16, . . . . 인 a로 된 모든 string (즉

a의 수가 2i 개, i 0)을 생성할 수 있음을 알 수 있다. 다음 slide는 앞

slide에 더하여 길이가 8인 string을 생성하는 과정을 보여준다.

형식언어

S ACaB | a AD AC Ca aaC aE Ea

CB DB | E AE aD Da

예 4.

Rule에 의한 언어생성

Life

- Life is a long lesson in humility. - J. M. Barrie –

- Life is far too important a thing ever to talk seriously about. - Oscar Wilde –

- Life is like playing a violin in public and learning the instrument as one goes on. - Samuel Butler –

- Life is a foreign language; all men mispronounce it. - Christopher Morley –

쉬어 가기

Page 52: 계산모델: 오토마타와 형식언어(CH01-CH05)

52

CB DB

AaaaaDB

aD Da . . . AD AC,

Ca aaC . . . . . .

. . . . AaaaaaaaaCB

L = { am | m = 2n, n 0 }

형식언어Rule에 의한 언어생성

Ca aaC

AaaaaCB

CB E

AaaaaE

aE Ea . . .

. . . . AEaaaa

AE

aaaa

CB E

AaaaaaaaaE

aE Ea . . .

. . . . AEaaaaaaaa

AE

aaaaaaaa

CB DB AaaaaaaaaDB . . . . .

A

N

I

S ACaB | a AD AC Ca aaC aE Ea

CB DB | E AE aD Da

예 4.

Page 53: 계산모델: 오토마타와 형식언어(CH01-CH05)

53

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

Formal language의 grammar는 다음의 4요소를 밝혀 정의한다.

형식언어

Grammar에 있는 rule의 종류에 따라 발생하는 언어가 달라질 수

있는데, 주로 다음에 정의하는 4종류의 grammar와 이들이 발생하는

언어가 잘 알려졌다. 이들이 발생하는 언어의 특성은 무엇이며 어떻게

다른지를 밝히는 것이 우리가 앞으로 공부할 중요한 과제이다.

(1) 언어의 문자열에 쓰이는 문자 (관례 상 소문자)의 집합,

(2) 언어의 문자열에 쓰이는 문자 외에 rule을 만드는데 추가로

쓰는 문자 (관례 상 대문자)의 집합,

(3) rule 집합, 그리고

(4) 문자열을 생성할 때 쓰는 시작문자 (관례에 따라 S).

Page 54: 계산모델: 오토마타와 형식언어(CH01-CH05)

54

형식언어Definition

Type 0 (phrase structured (구문 구조 )) grammar: Type 0 grammar G는

다음과 같이 4 tuple (네 쌍)의 정보를 밝혀 정의한다.

• VT : Terminal alphabet (단말 알파벳). 언어학자들은 이를 morphemes

(형태소)라고 하는데, 관례에 따라 소문자를 쓴다.

• VN : Nonterminal alphabet (비단말 알파벳). Variables, 또는 syntactic

categories 라고도 부르며, 관례에 따라 대문자를 쓴다.

• V = VT VN : Total alphabet (전 알파벳)

• S VN : Start symbol (시작문자)

• P : 유한개의 production rule set. 각 rule은 라 표기한다. 여기서

와 는 각각 다음 조건을 만족해야 한다.

G = < VT , VN , P , S >

V*VNV*, V*

Page 55: 계산모델: 오토마타와 형식언어(CH01-CH05)

55

형식언어Definition

앞의 정의에서 rule 의 조건은 V*VNV* 와 V* 이다. 다시

말하면, rule의 좌측 는 V*내의 문자열, 즉 total alphabet으로 구성된

문자열로서 VN에 있는 문자(즉, nonterminal 기호, 관례에 따라

대문자)를 적어도 하나 포함하고 있어야 한다. Rule의 우측 는 V*에

있는 임의의 문자열이 될 수 있다는 뜻이다. (특히 rule을 적용하여 얻을

수 있는 terminal 또는 nonterminal 기호로 구성된 문자열 w V*를

sentential form (문장 형)이라 한다.)

두 문자열 w1에 어떤 rule 하나를 적용하여 문자열 w2를 얻을 수 있을 때

w1 w2와 같이 표기하기로 하고, 이를 일반화 하여 rule을 n ( 0)번 적용

하여 w2를 얻을 수 있을 때, 다음과 같이 표기하기로 하자.

w1 w2 *

Page 56: 계산모델: 오토마타와 형식언어(CH01-CH05)

56

다음 3개의 grammar type 1, 2, 3은 위에서 정의한 type 0 grammar의

rule 형식에 제한조건을 두어 정의한 것이다. 따라서 나머지 3종류의

grammar는 모두 type 0에 속한다.

Type 1 (context-sensitive (문맥-민감)) grammar: 이 grammar는 type 0

grammar의 모든 rule 에 조건 || ||, 즉 rule의 좌측의 길이가 우측

보다 길 수 없다는 조건을 둔 경우이다. (단, S 경우는 예외로

한다.)

형식언어Definition

Grammar G의 언어 L(G)는 S로 시작하여 발생할 수 있는 terminal 기호로

된 모든 문자열 x (VT )* 의 집합이다. 즉,

앞에서 든 grammar 예 1 - 4는 모두 type 0 grammar다. Type 0 언어를

recursively enumerable (R.E.) 언어라고도 한다.

L(G) = { x | x (VT )* and S x }*

Page 57: 계산모델: 오토마타와 형식언어(CH01-CH05)

57

Type 3 (regular (정규)) grammar: Type 2 grammar에 다음과 같은 추가

조건을 둔 경우이다: 모든 rule의 우측에 많아야 한 개의 nonterminal

기호를 둘 수 있고, 그것도 우측 의 끝에 있어야 한다. 즉, = xA 또는

= x. 단, A VN , x (VT )*.

형식언어Definition

Type 2 (context-free (문맥-자유)) grammar: Type 0 grammar에 || = 1,

즉 모든 rule의 좌측에 한 개의 문자만 둘 수 있다는 조건을 단 경우다.

Rule의 좌측 V*VNV*인 조건도 만족해야 하므로, 조건 || = 1은

rule의 좌측에 한 개의 nonterminal 기호(대문자) 만 둘 수 있다는 뜻이다.

예를 들면, A abB, B aa | D, D 은 모두 type 3 grammar에

있을 수 있는 rule이다. 반면, A aBa, B aaAD는 nonterminal 기호가

우측 문자열의 끝에 있어야 하는 조건을 만족하지 않거나, 하나 이상

있기 때문에 type 3 grammar에 둘 수 없다.

Page 58: 계산모델: 오토마타와 형식언어(CH01-CH05)

58

2.3 문법과 언어 예:

Type 0 (phrase structured): G = < {a}, {S,A,B,C,D,E}, P, S >

P = { S ACaB | a AD AC

Ca aaC aE Ea

CB DB | E AE

aD Da }

L(G) = { am | m = 2n, n 0 } (이 grammar는 앞에서 든 예 4와 같다.)

Type 1 (context-sensitive): G = < {a,b,c}, {S,B,C}, P, S >

P = { S aSBC | aBC

CB BC bB bb

aB ab bC bc

cC cc }

L(G) = {aibici | i 1 }

형식언어

Page 59: 계산모델: 오토마타와 형식언어(CH01-CH05)

59

Type 2 (context-free): G = < {0,1}, {S,A,B}, P, S >

P = { S ASB | A 0 B 1 }

L(G) = {0i1i | i 0 }

Type 3 (regular): G = < {0,1}, {S,A}, P, S >

P = { S 0S | A A 1A | }

L(G) = { 0i1j | i, j 0 }

문법과언어 예형식언어

Page 60: 계산모델: 오토마타와 형식언어(CH01-CH05)

60

Rumination: Grammars and Languages

앞서 정의한 여러 종류의 grammar와 이들이 발생하는 언어에 관하여 많은 학생이 오해할 수 있는 부분이 있기에

이를 분명히 밝히고자 한다. 어떤 문법 G = < VT , VN , P , S >가 있다 하자.

(a) P에 있는 rule을 적용하여 문자열을 생성할 때, 시작 문자 S로 시작해야 한다는 조건 외에는 rule을 적용하는

순서에 관한 조건이 없다. 어떤 순서로 적용하든, terminal 문자열을 생성할 수 있으면 된다. 경우에 따라서는 중도에

rule을 적용할 수 없어 terminal 문자열 생성에 실패할 수도 있다. 아래의 type 1 문법을 고려해 보자. (문법의 rule만

주어지면, 문법의 다른 요소들은 알 수 있기 때문에, 편의상 특별한 경우를 제외하고는 문법을 제시할 때, 그

문법의 rule만 쓰기로 한다.)

(1) S ABC (2) AB ab (3) BC bc (4) bC bc

위의 문법에서 rule (1), (2), (4)를 순서대로 적용하면 이 문법이 생성할 수 있는 유일한 terminal 문자열 abc를 얻을

수 있다. 그러나 다음과 같이 rule (1)을 적용한 다음 rule (3)을 적용하면, Abc를 얻고, 적용할 rule이 없다. 이 문자열은

nonterminal 기호 A가 있기 때문에 문법이 생성한 언어에 둘 수 없다. (정의에 의하여 terminal 기호 (소문자)로 된 문자

열만이 grammar가 생성한 언어에 속한다는 것을 기억하자.)

형식언어

S ABC Abc ??

S ABC BC bc

Page 61: 계산모델: 오토마타와 형식언어(CH01-CH05)

61

(b) 앞의 grammar 예에서 rule (3)은 언어를 생성하는데 필요한 것이 아니므로 이를 삭제하더라도 문법이

발생하는 언어에는 아무런 영향을 미치지 않는다. 일반적으로 임의의 문법이 주어졌을 때, 이 문법의 어떤

rule이 필요한 rule인지를 결정하는 것은 해법이 없는 문제 중의 하나이다. 그러나 대상이 context-free 문법

(type 2)이면 효율적인 해결방법(알고리즘)이 있다. 이 책의 9장에서 context-free grammar와 regular grammar에서

불필요한 rule을 가려내는 방법(알고리즘)을 배울 것이다.

(c) 우리가 정의한 문법은 문자열을 생성할 때 동시에 여러 개의 rule을 적용할 수 없다. 단계마다 하나의 rule을

적용해야 한다. 위의 grammar 예에서 rule (1)을 적용하여 얻은 ABC에 AB ab 와 BC bc를 동시에 적용하면,

terminal string abbc를 생성할 수 있지만, 이를 허용하지 않으므로, 문법이 생성한 언어에 둘 수 없다. 하나

이상의 rule을 동시에 적용할 수 있도록 정의한 문법도 있는데, 일반적으로 이러한 문법을 분석하고 이해하는 게

쉽지 않다. 이런 종류의 rule을 parallel rewriting rule이라 하는데, 3장에서 배울 L-sysem 이라는 문법이 그 한

예이다.

(d) Context-free grammar의 경우 rule을 하나씩 적용하든 여러 개를 (병렬로) 동시에 적용하든 결과적으로 같은

언어를 생성한다. 왜 그럴까? 이 질문에 대한 답은 독자의 몫으로 남겨 둔다.

형식언어

(e) 관례에 따라 terminal alphabet을 소문자, nonterminal alphabet을 대문자, 그리고 시작문자로 S를 이용하여 rule을

만든다. 이렇게 하면 rule에 나타난 기호들을 보고 terminal alphabet, nonterminal alphabet 및 시작기호를 가려낼

수 있다. 앞으로 필요한 경우 외에는 편의상 grammar는 rule만 나타내고 다른 정보는 약하기로 한다.

Rumination: Grammars and Languages

Page 62: 계산모델: 오토마타와 형식언어(CH01-CH05)

62

(f) Type 2 (context-free) grammar는 type 0 grammar 중에 조건 || = 1을 만족하는 grammar 이다. 따라서 context-free

grammar는 A 과 같이 rule의 좌측보다 우측이 짧은 경우가 있다. (Type 1은 S 의 경우만 이를 허용함을

기억하자.) 후에 임의의 context-free grammar로부터 A 와 같은 소위 을 발생하는 rule들을 모두 제거하고

필요하면 S 만 남기는 방법을 배울 것이다.

(g) Regular grammar는 정의에 의하여 다음과 같은 rule을 가질 수 없다. 첫 번째 rule은 우측에 두 개의 nonterminal

기호가 있고, 둘째와 셋째 rule은 nonterminal이 우측 끝에 있지 않기 때문에 정의에 맞지 않다.

A bBC A abBa A Ba

(h) Regular grammar의 조건을 „A xB 또는 A x‟ (단, A VN , x (VT )*) 대신에 „A Bx 또는 A x‟를 쓸 수

있다. 전자를 right linear(우선형), 후자의 경우를 left linear (좌선형) grammar라 부른다. 어느 조건을 쓰든 언어의

특성에는 변함이 없다. 그렇지만, 아래의 예와 같이 한 문법에서 left linear rule과 right linear rule을 혼용하며 쓰면

언어의 특성은 한 단계 높은 type 2에 속하게 된다. 언어의 특성은 9장에서 배운다.

S aB, B Sb | b

형식언어Rumination: Grammars and Languages

Page 63: 계산모델: 오토마타와 형식언어(CH01-CH05)

63

형식언어

(1) S = < 시스템을 정의하는데 필요하고 충분한 정보 I1, I2, . . ., Ik를 나열한다 >

(2) I1, I2, . . ., Ik가 구체적으로 무엇인지 밝힌다.

(i) Grammar는 4-tuple G = < VT , VN , P , S >를 밝혀(specify) 정의한다. 이는 grammar를 표현하는데 필요하고

충분한 정보는 terminal alphabet, nonterminal alphabet, production rules 및 시작기호라는 뜻이다. 이들 가운데 어느 하나가

빠졌다면, 정상적인 grammar라 할 수 없다. 이렇게 어떤 model 또는 system을 정의하는 방법은 매우 보편적인

것으로, 컴퓨터 분야뿐 아니라 다른 분야에서도 널리 이용하는 방법이다. 일반적으로 어떤 시스템 (또는 model) S는

아래의 예와 같이 필요하고 충분한 정보가 무엇인지 나열한 다음, 이 정보를 구체적으로 밝히는 형식을 따라 정의한다.

다음에 공부할 주제인 오토마타도 같은 형식을 따른다.

Rumination: Grammars and Languages

When one door of happiness closes, another opens. But often we look so long at the closed door that we don‟t see

the one which has been open for us.

It‟s true that we don‟t know what we got until we lose it, but it‟s also true that we don‟t know what we‟ve been

missing until it arrives.

- Anonymous -

쉬어 가기

Page 64: 계산모델: 오토마타와 형식언어(CH01-CH05)

64

2.2 다음 각 grammar에 의하여 발생하는 언어를 가능한 간략하게 표현하라. 관례대로 S는 시작기호, 대문자는

nonterminal 기호, 소문자는 terminal 기호이다.

2.1 아래의 각 grammar에 대하여 다음 물음에 답하시오.

(a) Grammar의 type은 phrase structures, context-sensitive, context-free, 또는 regular 중에 어느 것인가?

한 grammar가 여러 종류의 type에 속할 수 있다는 것을 명심하자.

(b) Grammar가 발생하는 언어는?

G1: S aS | abcB B bbB |

G2: S ABC | AB ab bC bc BC cd Ac bc

G3: S AAA A a |

G4: S ABC AB a aC c BC b

(a) S aS | bS | (b) S aS | Saa |

(c) S aSa | bSb | aa | bb (d) S aA | bB A Sa |a B Sb | b

(e) S aA | A Sb (f) S aSb | A A aA | a

(g) S DG G bAGc | bEc bA Ab bE Eb DA aaD DE aa

(h) S DG G bbAGcc | bbEcc bA Ab bE Eb DA aaD DE aa

연습문제형식언어

Page 65: 계산모델: 오토마타와 형식언어(CH01-CH05)

65

2.5 다음 각 언어를 발생하는 grammar를 만들어 보이고, grammar가 어떻게 주어진 언어를 생성하는지 간략하게

설명하라. Grammar의 종류에는 제한이 없다. (Hint: 교과서에 있는 예를 이해하면 아이디어를 얻을 수 있다.)

(a) L1 = {a2nbnc2ndm | n,m 1 } (b) L2 = {anbncndn | n 1 }

2.4 다음 각 언어를 발생하는 context-free (type 2) grammar를 만들어 보이고, grammar가 어떻게 주어진

언어를 생성하는지 간단히 설명하라.

(a) L1 = {aibj | i > j > 0} (b) L2 = {aibj | i j > 0} (c) L3 = {aibj | i j 0}

(d) L4 = {aibj | j > i > 0} (e) L5 = {aibj | i, j > 0 and i j } (f) L6 = {xxR | x {a, b}*}

2.3 다음 각 언어를 발생하는 regular (즉, type 3) grammar를 만드시오.

(a) L1 = {a}* (b) L2 = {ab, abb, abbb} (c) L3 = { axb | x {0, 1}*}

(d) L4 = L2 L3 (e) L4 = L2L3 (f) L4 = { xy | x {0, 1}+, y {a, b}+}

(g) L3 = { x | x는 정수. 0025와 같이 0이 앞에 올 수 있다. }

(h) L5 = { x | x {a, b}*, string x는 적어도 하나의 a를 갖고 있어야 한다. }

형식언어

Page 66: 계산모델: 오토마타와 형식언어(CH01-CH05)

66

3. 기타 Language Models

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

Page 68: 계산모델: 오토마타와 형식언어(CH01-CH05)

68

3. 기타 Language Models

앞 장에서 우리는 language를 표현하는 한 model로 grammar를 정의하고 어떻게 grammar가 rule을 가지고

언어를 생성하는지, 그리고 그러한 grammar 4가지를 배웠다. 이 외에 많은 다른 model들이 알려져 있는데, 그

대표적인 예로 graph grammar, picture language grammar, Lyndenmayer system (L-system), syntax flow graph,

Backus-Naur Form (BNF), 등이 있다. BNF는 programming language의 grammar를 표현하려고 도입된 것으로

우리가 배운 grammar와 매우 유사하다. (예를 들면, rule을 표기할 때, 대신 := 를 쓴다). 이들 중에 우리가

공부한 grammar와 같이 문자열의 집합인 언어를 정의하는 L-system과 syntax flow graph를 간단히 소개한다.

3.1 L-systems

L-system은 식물이나 세포의 성장과 같은 생물학적인 현상을 모방할 목적으로 도입된 grammar이다. 지금까지

배운 formal language의 grammar와 다른 점은, L-system은 terminal 기호와 nonterminal 기호를 구별하지 않는다.

시작문자 S 대신 시작문자 열을 쓰고, 가능한 모든 rule을 동시에 적용하여 얻을 수 있는 모든 문자열이 L-system의

언어에 속한다. 따라서 L-system은 일종의 parallel rewriting system이다.

L-system도 적용하는 rule의 종류에 따라 여러 가지로 분류되는데, rule의 좌측에 한 개의 문자만 허용하는

zero-sided L-system, 좌측에 하나 이상의 문자를 허용하는 2-sided L-system, rule의 우측에 하나의

문자열만 허용하는 deterministic L-system, 등이 있다. L-system은 적용할 수 있는 모든 rule을 동시 적용하기

때문에 L-system이 생성하는 언어를 알아내기는 그리 쉽지 않다. 그렇지만, L-system이 생성하는 문자열이

생물학적 시스템의 성장과정(development)을 모방할 수 있는 독특한 특성 때문에, 특히 computer graphics

분야에서 잘 알려진 모델이다.

Page 69: 계산모델: 오토마타와 형식언어(CH01-CH05)

69

L-system은 terminal 문자와 nonterminal 문자를 구별하지 않으므로,

아래와 같이 사용하는 문자의 집합(즉, alphabet), rule과 시작 문자열

(이를 axiom이라 한다.)의 3 가지 정보를 밝혀 정의한다.

정의: L-system G는 3 쌍 (triple) G = ( , h, )로 정의한다. 여기서

는 alphabet, h는 rule 집합, 그리고 는 axiom (시작 문자열)이다.

L-systems

L(G) = { hi( ) | i 0}

기타 언어 모델

전통적으로 rule h는 함수로, 예를 들면 h() = 또는 h() = {, }와

같이 표시한다 (단, , , *). 이는 formal grammar에서 rule

또는 | 와 같은 뜻이다. Axiom 에 rule h를 i 번 적용한 결과를

hi()라 하자. 즉, h0( ) = , h1( ) = h( ), h2() = h(h1( )), . . . ., hi() =

h(hi-1()). L-system G가 생성하는 언어 L(G)는 다음과 같이 정의한다.

Page 70: 계산모델: 오토마타와 형식언어(CH01-CH05)

70

예 1. G1 = ( {a}, h, a2 ), h(a) = {a, a2 }.

L(G1) = {an | n 2}.

예 2. G2 = ({a, b}, h, ab ), h(a) = aa, h(b) = ab.

L(G2) = {amb | m = 2n-1, n 1}.

앞서 배운 formal grammar와 L-system 사이에 두 개의 중요한 다른 점이

있다: 첫째 L-system에서는 string을 생성할 때 적용할 수 있는 모든 rule을

병렬로 적용한다. 이는 formal grammar에서 한 번에 한 개의 rule 만 적용할

수 있다는 조건과 다르다.

둘째, L-system에서는 axiom을 포함하여 생성할 수 있는 모든 string이

system의 언어에 속한다. 다음 예는 간단한 두 L-system과 이들이 발생하는

언어를 보여 준다. 예의 system이 어떻게 제시된 언어를 발생할 수 있는지

검토하여 보자.

L-systems기타 언어 모델

Page 71: 계산모델: 오토마타와 형식언어(CH01-CH05)

71

L-system은 발생하는 언어 자체를 분석하고 이해하기는 어렵지만, 언어가 내포하고 있는 특성 때문에 식물 또는

세포와 같은 생체의 모양이나, 소위, fractal geometry 특성이 있는 그림을 그리는데 효과적인 모델로 알려졌다. 다음

논문은 L-system 응용에 관한 풍부한 자료를 제공한다.

H. Ehrig, M. Nagl, G. Rozenberg, and A. Rosenbeld (Edition), “Graph Grammars and Their Application to Computer

Science,” Lecture Notes in Computer Science #291, Springe-Verlag, 1986)

다음 쪽에 있는 그림은 간단한 L-sysem에 의하여 생성된 문자열을 아래 그림이 보여주는 방법으로 2차원 상에

풀이하여 나무와 같은 그림을 그릴 수 있음을 보여준다. (이 아이디어를 좀 더 확장하여 가지에 잎이나 꽃 또는 열매를

달아 실물처럼 보이는 나무를 예와 같이 그릴 수 있다.) L-system이 발생한 string의 문자를 좌측에서 우측으로 읽어 가며,

문자 (십진 자리 수) 하나마다 일정한 길이의 선분을 수직으로 그리다가 여는 대괄호가 나오면, 현재의 진행방향에서

일정한 각도로 (그림에서는 약 30) 방향을 바꾸어 그린다. 이때 닫는 대괄호가 나오면 맞은편 여는 대괄호가 나오기

직전으로 돌아가 그리기를 계속하며, 여는 대괄호가 나올 때 마다 만드는 가지는 진행방향에서 좌우로 번갈아 가지가

생기도록 그린 것이다. 이러한 조작은 자료구조에서 배운 stack을 이용하면 간단히 구현할 수 있다.

L-system기타 언어 모델

(a)

[ [] ]

(b)

[ [ ] [ ]] [ ]

(c)

Page 72: 계산모델: 오토마타와 형식언어(CH01-CH05)

72

L-System 응용: 나무 그리기

123224..

2229[229[24]9[3]8765]9[229[3]8

765]9[228765]9[228765]9[2265]

9[225]9[24]9[3]8765

2

2

9

9

9

9

9

9

9

9

8

7

6

5

1 23 2 2 3 24

4 25 5 65 6 7

7 8 8 9[3] 9 9

Rule ( 1은 axiom)

L-systems 응용

2

기타 언어 모델

A

N

I

Page 73: 계산모델: 오토마타와 형식언어(CH01-CH05)

73

3.2 Syntax Flow Graph

Syntax flow graph (syntax diagram이라고도 함)은 문법의 구조를 graph

형식으로 표시하여 시각적으로 문법을 쉽게 이해할 수 있도록 한 model이다.

아래에 든 예를 보면 Syntax flow graph를 이해하는데 충분하리라 생각한다.

S aS | A

a S

A

S

b A c

BA

A bAc | B

d

f

B

B d | f |

Graph의 제목 (예에서 S, A, B)은 rule의 좌측 nonterminal 문자에 해당하고,

왼쪽 입구에서 시작하여 오른쪽 출구로 가는 모든 경로 상에 있는 문자를

차례로 모아 만든 문자열이 rule의 우측에 있는 문자열에 해당한다. 사각형

노드에는 nonterninal 기호를, 원형 노드에는 terminal 기호를 둔다. 이 model은

rule의 구성을 간결히 표현하기에 적합하나, 문법이 생성하는 string을 얻을

목적으로는 적합하지 않다. 이 model은 context-free (type 2) 문법에 한하여

적용할 수 있다.

기타 언어 모델

Page 74: 계산모델: 오토마타와 형식언어(CH01-CH05)

74

예 1. C 언어 의 변수 (identifier)

<letter> a | b | … | z

<digit> 0 | 1 | 2 . . . | 9

<identifier> <letter> |

<identifier><letter> |

<identifier><digit>

Syntax Flow Graph

a

b

.

.z

<letter>

0

1

.

.9

<digit>

기타 언어 모델

<identifier>

letterdigit

letter

Flow Graph Rule

Page 75: 계산모델: 오토마타와 형식언어(CH01-CH05)

75

<unsigned integer>

<unsigned integer> <digit> |

<unsigned integer><digit>

unsigned integer unsigned integer. E

+

-

<unsigned double>

unsigned integer

예 2. C 언어의 정수 와 실수

Syntax Flow Graph

<unsigned double> <unsigned integer> . <unsigned integer> |

<unsigned integer> . <unsigned integer><exponent> |

<unsigned integer><exponent> | <unsigned integer>

<exponent> E<sign><unsigned integer>

<sign> + | - |

기타 언어 모델

digit

Page 76: 계산모델: 오토마타와 형식언어(CH01-CH05)

76

되새김(rumination): syntax flow graph

우리는 프로그래밍 언어가 context-free 언어에 속한다는 말은 듣지만, 배우고 쓰는 프로그래밍 언어, 예를 들면 C++을

CFG나 syntax flow graph, 등으로 완벽하게 표현해 둔 것을 본 적이 없다. 이 분야의 교과서는 단편적으로 각 명령은

어떻게 표현해야 하는지, 전체의 프로그램은 어떤 형식으로 구성되어야 하는지를 예로 들어 설명할 뿐이다.

프로그래밍 언어를 사용할 목적으로 배우는 학생들에게는 언어의 grammar 전체, 즉 모든 rule을 형식적으로 제시할

필요가 없기 때문이다. 그러나 grammar에 bug의 유무를 검사하거나 compiler와 같이 언어의 고차원적인 특성이 필요

할 때 grammar의 모든 rule을 형식적으로 제시할 필요가 있다. 그 한 예로 C 언어의 전신이라 할 수 있는 Pascal

프로그래밍 언어의 grammar는 우리가 쓰는 rule 형태의 일종인 BNF (Bakus-Naur Form)와 syntax flow graph를

이용하여 간결하게 정의해 두고 있다. Pascal programming 언어의 문법을 정의한 syntax flow graph는 부록 A에 있다.

기타 언어 모델

Interesting Warning Labels

On a knife: Warning. Keep out of children.

On a string of Christmas lights: For indoor or outdoor only.

On a food processor: Not to be used for the other use.

On a chainsaw: Do not attempt to stop chain with your hands.

On a child‟s superman costume: Wearing of this garment does not enable you fly.

- Anonymous -

쉬어 가기

Page 77: 계산모델: 오토마타와 형식언어(CH01-CH05)

77

3.3 Regular Expression

우리는 database를 검색하거나 Web browsing을 할 때, 찾고 싶은 pattern

(즉, 언어)을 간결히 표현할 필요가 있다. 우리는 언어를 {aibi | i > 0}와

같이 set property(집합 특성)로 표현하거나, grammar로 정의하는

방법을 배웠다. 그러나 Set property로 표현하는 방법은 언어의 구조가

단순할 때 가능하며, 프로그래밍 언어와 같이 복잡하면, 실용적이지

못하다. Grammar는 언어를 생성하는 model이므로 언어의 구조적인

특성을 표현할 목적으로 쓰기에 부적절하다.

이러한 이유로 regular language를 표현할 때, regular expression

(정규표현)이라 부르는 대수학적(algebraic) 방식을 쓴다. Regular

expression은 web browser, word processor, compiler, 등의 입력 양식으로

널리 쓰이고 있다. Regular language보다 복잡한 context-free, context-

sensitive, Type 0 언어를 표현할 수 있는 실용적인 방법은 아직 없다.

기타 언어 모델

Page 78: 계산모델: 오토마타와 형식언어(CH01-CH05)

78

Regular Expression

정의: Regular expression

문자의 집합 (즉 alphabet) 가 주어졌다 하자 . 에 대한 regular

expression을 다음과 같이 정의한다.

(1) Ø 는 empty set 을 나타내는 regular expression이다.

(2) 은 set {}을 나타내는 regular expression이다.

(3) Symbol a 에 대하여, a는 set {a}를 나타내는 regular

expression 이다.

(4) 만일 r 과 s 가 각각 set R 과 set S를 나타내는 regular expression이라면,

(r + s), ( rs ), 그리고 ( r* )는 각각 set R S, RS, R*을 나타내는

regular expression이다.

기타 언어 모델

Page 79: 계산모델: 오토마타와 형식언어(CH01-CH05)

79

정의에서 연산자 +는 set union(공집합), concatenation은 set product, *는

set closure와 대응함을 알 수 있다. Regular expression 상의 operator들의

우선순위는 *, concatenation, +의 순으로 적용하며, 표현상에 문제가

없을 때는 괄호를 쓰지 않아도 된다. Regular expression r이 표현하는

언어를 L(r)로 표기 하기로 한다.

정의에 의하여 다음 좌측의 언어들은 우측의 regular expression로

표현할 수 있음을 쉽게 알 수 있다.

Regular Expression 기타 언어 모델

Language (set expression) Regular expression

{a, b}* (a + b)*

{ai | i 0} a*

{aibj | i, j 0} a*b*

{xaaybbz | x, y, z {a, b}* } (a+b)*aa(a+b)*bb(a+b)*

Page 80: 계산모델: 오토마타와 형식언어(CH01-CH05)

80

Regular expression의 operator +와 concatenation을 각각 산술의 덧셈(+)

과 곱셈() operator에 대응시키면, 산술표현에 적용되는 다음과 같은

법칙이 regular expression에도 적용됨을 쉽게 증명할 수 있다.

Regular Expression 기타 언어 모델

Regular expression의 대수학적 법칙(algebraic law)

• C o m m u t a t i v e l a w ( 가환법칙 ) : r + s = s + r . 그러나 ,

concatenation은 산술의 곱셈과 다르다. 즉, rs sr.

• Associative law (결합법칙): r + (s + t) = (r + s) + t, (rs)t = r(st).

• Distributive law (분배법칙): r(s + t) = rs + rt.

• Regular expression에서 Ø 과 은 각각 산술의 0, 1과 같은 역할을 한다.

Ø + r = r + Ø = r, Ø r = rØ = Ø , r = r = r

Page 81: 계산모델: 오토마타와 형식언어(CH01-CH05)

81

(a) Regular expression은 database query language, word processing, 등 여러 분야에서 변형된 형태로 이용하고 있는데, 몇

가지 예를 들면 다음과 같다. (아래 등식의 왼편은 변형된 regular expression 이고, 오른편은 전통적인 regular

expression이다.)

(a | b)* = (a+b)* , (a | b)+ = (a+b)(a+b)* [ab] = (a+b), [a-z] = a + b + c + . . . . + z ,

abc? = (ab + abc), (abc)? = abc + // 의문부호(?)는 바로 앞 요소를 선택하거나 안 할 수도 있음을 뜻한다.

예를 들어 C 언어의 integer는 다음과 같이 regular expression으로 정의할 수 있다.

digits [0-9]

int {digits}+

real {int}”.”{int}([Ee][+-]?{int})?

(b) 한 언어를 표현하는 regular expression은 무한히 많을 수 있다. 이들을 equivalent (등가) regular expression이라 한다.

예를 들면, r, r + r, r + r + r, … , 등은 모두 equivalent regular expression이다. 기호 를 써서 equivalence 관계를

나타내기로 하자. 아래의 예와 같이 비교적 간단한 경우에는 두 regular expression이 equivalent한지 여부를 밝히는 것은

가능하나, expression이 복잡한 경우에는 매우 어려운 문제이다. Regular expression의 equivalence 문제는 7장에서

regular expression을 설계하는 문제와 함께 다루기로 한다.

(a) (r*)* (r)* (b) r*(r + s)* ( r + s)* (c) (r + s)* ( r*s*)*

Rumination: Regular Expression

기타 언어 모델

Page 82: 계산모델: 오토마타와 형식언어(CH01-CH05)

82

3.1 다음과 같은 rule을 가진 L-system G = ({a, b, c}, h, acb )의 언어를 set property 표현 방법을 나타내라.

h (a) = aa h (b) = cb h (c) = a

3.2 다음 context-free grammar가 발생하는 언어를 정의하는 syntax flow graph을 그려 보이라.

S aSbB | A A bSa | ba | ab B bB |

<expression>

term

term

-+

<term>

factor

factor

/*

<letter>

a

b

<digit>

0

1

variable

expression )(

<factor>

letter

digit

letter

<variable>

3.3 아래의 syntax flow graph은 Pascal programming 언어의 expression 부분을 간략하게 만든 것이다.

(a) 이 syntax flow graph 이 정의한 언어를 발생하는 context-free grammar rule을 만들어 보이라.

(b) 만든 grammar를 가지고 expression a1+ (a + b)*a – a/b를 어떻게 생성할 수 있는지 보이라.

연습문제

Page 83: 계산모델: 오토마타와 형식언어(CH01-CH05)

83

3.4 다음의 각 regular expression이 표현하는 언어를 간결히 우리 말로 표현하라.

(a) (0 + 1)*00 (b) (1 + 0 )*111( 0 + 1)* (c) (1 + 0)*(111 + 000)(0 + 1)*

연습문제

Page 84: 계산모델: 오토마타와 형식언어(CH01-CH05)

84

4. 언어 인식 모델: Automata

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

Page 86: 계산모델: 오토마타와 형식언어(CH01-CH05)

86

우리는 지금까지 문자열의 집합, 즉 언어를 위한 model로 formal grammar, L-system, syntax flow graph, 그리고 regular

expression에 대하여 배웠다. 우리가 쓰는 programming 언어, 예를 들면, C, C++, HTML, XML 등이 모두 형식언어의

일종인 context-free 언어에 속한다.

언어는 communication(통신)을 위한 매체이다. Natural language(자연어)는 이를 듣는 사람이 인식(recognize)할 수

있어야 하는 것과 같이, 우리가 문법에 따라 정의한 formal language는 컴퓨터가 인식할 수 있어야 한다. 우리가 한

문장의 한국어를 듣고 그것이 한국어임을 인식할 수 있는 것과 같이, 주어진 형식언어 L을 인식할 수 있는 컴퓨터는

임의의 string, 즉 문장을 입력으로 주었을 때, x가 L에 속하는지 판단할 수 있어야 한다.

이렇게 언어를 인식하려면 컴퓨터는 어떤 기능을 갖추어야 할까? 이 질문에 답하려면 우리는 실재하는 복잡한

컴퓨터를 대상으로 하는 것보다, 언어를 인식하는데 꼭 필요한 기능만 갖춘 개념적인 계산 모델(computational

model)을 도입하여 연구하는 게 바람직하다. 그래야, 핵심적인 문제만 다룰 수 있어 효율적인 연구를 할 수 있기

때문이다. 이러한 관점에서 많은 컴퓨터 학자들이 1930년대부터 여러 가지 model을 제시하고 연구했다.

이 결과 앞 장에서 정의한 4종류의 언어와 이들 각 언어를 인식하는 4종류의 computational model을 도입하게

되었으며, 이들로 구성된 계층적 체계인 소위 Chomsky hierarchy(촘스키 체계)를 설정할 수 있게 되었다. 컴퓨터

분야가 하나의 학문으로 홀로 설 수 있게 한 대표적인 업적 중의 하나가 바로 이 언어와 언어 인식모델 사이에 있는

계층적 상관관계를 보여 준 것이라 하겠다. 이 장에서 우리는 언어 인식 모델인 automata를 우선 공부한 다음 언어

model과 언어 인식 model을 묶어 체계화해 놓은 Chomsky hierarchy가 무엇인지 배울 것이다.

4. Automata

Page 87: 계산모델: 오토마타와 형식언어(CH01-CH05)

87

4.1 Deterministic Turing Machines (결정성 투어링 장치)

Computing model로 1936년에 Alan M.Turing이 처음 도입한

deterministic Turing machine (DTM)은 type 0 (phrase structured) 언어를

인식할 수 있는 model이다. 아래 그림과 같이 TM은 양방향으로

움직이며 읽고 쓸 수 있는 tape head, 유한 개의 상태에 있을 수 있는

제어장치(finite state control), 읽고 쓸 수 있는 길이가 무한한 tape로

구성되어 있다. Tape는 cell 단위로 구분되어 있으며, 한 cell에 한 개의

문자를 쓰고 읽을 수 있다.

read/write tape

two-way read/write head

a b a bb

Finite State

control

Automata

Page 88: 계산모델: 오토마타와 형식언어(CH01-CH05)

88

언어를 인식할 때 DTM은 다음 동작 (step 또는 move라 함)을 반복한다;

(1) Head가 있는 위치의 cell에 있는 문자를 읽고,

(2) 읽은 문자와 현재의 상태 (state)에 따라 cell에 하나의 문자를 쓰고

(종전의 문자는 지워짐),

(3) state를 바꾸거나 같은 state에서 head를 좌 또는 우측 cell로

이동하거나 현 위치에 머무른다.

AutomataDTM

p

a b a . .

q

c b a . .

p

c b a . .

A

N

I

Page 89: 계산모델: 오토마타와 형식언어(CH01-CH05)

89

p

a b a . .

q

c b a . .

p

c b a . .

AutomataDTM

DTM의 하는 일을 나타낼 때, 매 step마다 위와 같이 번거롭게 그림을

그리는 대신, 다음 그림 (a)와 같이 그래프로 표시하거나 (b)와 같이 함수

(현재 상태, 읽은 문자) = (다음 상태, 바뀐 문자, 이동방향)로 나타낸다.

현재상태

다음상태

( 읽은 문자, 바뀐 문자, 이동 방향 )

(a)

(a, c, R)

(b, b, L)

p

q

(p, a) = (q, c, R)

(q, b) = (p, b, L)

(b)

Page 90: 계산모델: 오토마타와 형식언어(CH01-CH05)

90

DTM 설계: 예

우선 한 예로 우리가 잘 아는 언어 L = {0n1n | n 1}을 인식하는 DTM을

설계하여 보자. 임의의 문자열 x가 tape 상에 두었을 때 (그림 참조),

어떻게 x가 L에 속한다는 것을 알 수 있을까?

이 언어에 속한 모든 문자열의 특성은 0의 수와 1의 수가 같아야 하며,

0이 먼저 있고 다음에 1이 있어야 한다. DTM은 tape에 입력으로 준

string이 이런 특성이 있는지 확인해야 한다. 한 방법은 좌우로 번갈아

이동하면서 0을 X로 지우고 1을 Y로 지우면서, 0을 X로 지울 때마다,

Y로 지울 수 있는 1이 있는지 확인하는 것이다.

Automata

0 0 0 1 1 1

Page 91: 계산모델: 오토마타와 형식언어(CH01-CH05)

91

AutomataDTM 설계: 예

DTM의 초기 상태를 그림과 같이 q0라 하고, 다음과 같이

각 step의 목적에 따라 상태를 표시하기로 하자.

0 0 0 1 1 1

q0

• q1: 0을 X로 지우고 우측으로 1을 찾아 가는 상태

• q2 : 1을 Y로 지은 후, 좌측으로 X를 찾아 가는 상태

• q3 : 좌 측으로 가다가 X를 만난 후, 우측으로 0을 찾는 상태

상태 q2와 q3는 왼편에 있는 0부터 차례로 지워나갈 때 필요하다.

이들 상태 외에 설계 과정에서 다른 상태가 필요하면 추가하기로

하자.

Page 92: 계산모델: 오토마타와 형식언어(CH01-CH05)

92

AutomataDTM 설계: 예

X Y 1 1X 0

q1

(d)

X Y Y 1X 0

q2

(b)

A

N

I

q2

X Y 1 10 0(b)

초기 상태 q0에서 0을 읽고

X로 바꾼 후 상태 q1에서 우로

이동. 1을 읽고 Y로 바꾼 후

상태 q2로 x를 찾아 좌로 이동.

q1q0

X 1 1 10 0(a)

X를 읽고 상태 q3로 바꿔 한 step

뒤로 물러선다. 이곳에 0이 있으면, 0을 X로 바꾼 후, 상태 q1로

우측으로 1을 찾아 이동한다.

1이 나오면, 1을 Y로 바꾸고 (b), (c), (d) 절차를 반복한다.

(c) X Y 1 10 0

q3q2

Page 93: 계산모델: 오토마타와 형식언어(CH01-CH05)

93

Automata

X Y Y 1X 0

q2

(b)

X Y Y 1X 0

q3q2

(c)

X Y Y 1X X

q1

(d)

X Y Y YX X

q2

(e)

(f)는 마무리 단계이다. 상태 q3

에서 Y를 읽으면, 0이 없다는

뜻이므로, q4 상태로 우측으로

가며 1이 없는지 확인한다.

이 과정에서 1이 없으면 인식

(accept)상태 q5에서 끝나다.

X Y Y YX X

q4q5q3

q2

(f)

DTM 설계: 예 A

N

I

Page 94: 계산모델: 오토마타와 형식언어(CH01-CH05)

94

앞의 두 slide에 제시한 방법으로 언어 L = {0n1n | n 1}을 인식하는

DTM은 아래 그림과 같이 graph로 표시할 수 있다. 이 graph를 state

transition graph이라 한다.

AutomataDTM 설계: 예

q4 q5

(Y,Y,R) (Y,Y,R)

q1

q3

q2

start

(0,0,R)

(Y,Y,R)

(0,0,L)

(Y,Y,L)

(X,X,R)

(1,Y,L)

(0,X,R) (0,X,R)

(B,B,N)

q0

Page 95: 계산모델: 오토마타와 형식언어(CH01-CH05)

95

Automata

q4 q5

(Y,Y,R) (Y,Y,R)

q0

q1

q3

q2

start

(0,0,R)

(Y,Y,R)

(0,0,L)

(Y,Y,L)

(X,X,R)

(1,Y,L)

(0,X,R) (0,X,R)

(B,B,N)

우리가 설계한 DTM은 위의 state transition graph가 보여주는 것처럼

상태 q1, q2, q3 로 구성된 cycle을 따라가며 반복하여 0과 1을 번갈아 X와

Y로 지워 나간다. 이 작업은 0과 1의 수가 같고 좌우로 분리되어 있으면,

그들의 수에 관계없이, 모두 지워질 때까지 계속 된다.

DTM 설계: 예

Page 96: 계산모델: 오토마타와 형식언어(CH01-CH05)

96

State Transition Table

0 1 X Y B

q0

q1

q2

q3

q4

q5

(q1, X, R)

(q1, 0, R)

(q2, 0, L)

(q1, X, R)

(q2, Y, L)

(q3, X, R)

(q1, Y, R)

(q2, Y, L)

(q4, Y, R)

(q4, Y, R) (q5, B, N)

DTM은 필요에 따라 (예를 들면, 프로그램을 작성할 때) state transition

graph 대신 다음과 같이 state transition table 양식으로 표현하기도 한다.

표에서 세로축에는 상태, 가로축에는 읽은 tape 기호를 두며, 표의 내용

(entry)은 세 쌍(다음 상태, 바뀐 문자, 이동 방향)을 나타낸다.

AutomataDTM 설계: 예

Page 97: 계산모델: 오토마타와 형식언어(CH01-CH05)

97

(q0, 0) = (q1, X, R) (q1, 0) = (q1, 0, R) (q1, 1) = (q2, Y, L)

(q2, 0) = (q2, 0, L) (q2, X) = (q3, X, R) (q3, 0) = (q1, X, R)

(q1, Y) = (q1, Y, R) (q2, Y) = (q2, Y, L) (q3, Y) = (q4, Y, R)

(q4, Y) = (q4, Y, R) (q4, B) = (q5, B, N)

설계한 DTM을 상태천이 함수 (state transition function) 로

표현하면 아래와 같다 . 이 표현 방법은 DTM의 하는 일을

추적하는데 매우 불편하다. 이 책에서는 편의상 필요한 경우

외에는 state transition graph을 주로 쓰기로 한다.

Automata

State Transition Function

DTM 설계: 예

Page 98: 계산모델: 오토마타와 형식언어(CH01-CH05)

98

정의: DTM M은 다음과 같이 6-tuple (6 쌍)을 가지고 정의한다.

M = ( Q, , , , q0, F ).

Q: State의 집합. q0 Q: 초기 상태.

: Input alphabet (입력 기호 집합). 인식하는 언어의 alphabet와 같다.

: Tape alphabet. 입력 기호 및 공백 기호 B를 포함하여 tape 상에서

M이 읽고 쓰는 모든 기호.

F: Accepting state들의 집합 (F Q ).

: State transition function ( : Q Q {L, R, N} ).

M이 한 step 거치며 무엇을 하는지 알려준다. L, R, N은 각각

head가 움직이는 방향 (좌, 우, 또는 정지)을 나타낸다. 함수

대신 state transition graph, 또는 state transition table로도 표현한다.

Automata

Page 99: 계산모델: 오토마타와 형식언어(CH01-CH05)

99

Automata

정의: DTM

입력 문자열 x가 tape에 주어졌을 때, DTM M이 유한한 시간 내에

accepting state에 들어가면 M은 x를 accept 한다고 한다. M이

인식(recognize)하는 언어 L(M)은 M이 accept 하는 모든 문자열의

집합이다. 즉,

L(M) = { x | M accepts x}

Actual Signs

Outside a muffler ship: “No appointment necessary. We‟ll hear you coming.”

In a veterinarian’s waiting room: “Be back in 5 minutes. Sit! Stay!”

At the electric company: “We would be delighted if you send in you bill. However, if you don‟t, you will be (de-

lighted).”

In a beauty shop: “Dye now!”

In a cafeteria: “Shoes are required to eat in the cafeteria. Socks can eat any place else they want.”

- Anonymous -

쉬어 가기

Page 100: 계산모델: 오토마타와 형식언어(CH01-CH05)

100

예: 예로 든 언어 L = {0n1n | n 1}을 인식하는 DTM의 이름을 M이라

하면, 형식적으로 다음과 같이 정의할 수 있다. M = ( Q, , , , q0 , F ).

여기서 Q = {q0, q1, q2, q3, q4, q5}, = {0, 1}, = {0, 1, X, Y, B}, F = {q5}.

그리고 는 아래의 state transition graph와 같다.

Automata

q4 q5

(Y,Y,R) (Y,Y,R)

q0

q1

q3

q2

start

(0,0,R)

(Y,Y,R)

(0,0,L)

(Y,Y,L)

(X,X,R)

(1,Y,L)

(0,X,R)

(0,X,R)

(B,B,N)

Definition: DTM

굵은 원은 accepting

state를 표시.

Page 101: 계산모델: 오토마타와 형식언어(CH01-CH05)

101

Automata

(a) 예로 든 DTM은 5개의 state에 있을 수 있는데, 이들 상태가 갖는 의미를 되새길 필요가 있다. 설계한 DTM의 상태

수와 이들 사이의 상태천이 (즉, edge) 수가 설계한 model을 실물로 구현하는데 직접적인 영향을 미친다. 우리는 기호

0을 X로 지운 후 우측으로 1을 찾아가는 상태를 q1이라 하고, 1을 Y로 지운 후, 좌측으로 X를 찾아가는 상태를 q2라

하였다. 이는 마치 우리가 아침에 일어났을 때의 상태와 아침을 먹고 학교로 올 때의 상태가 다른 것과 같은 개념이다.

어떤 시스템 (그것이 컴퓨터이든 사람이든)의 상태가 다름은 시스템 내에 저장된 정보가 다름을 뜻한다. 이 정보에

따라 시스템의 움직임이 달라진다.

예를 들면, 우리가 설계한 DTM은 여섯 개의 상태를 갖고 있으므로 DTM의 finite state control 내에 3 bits register를

두고 register의 값 000, 001, 010, 011, 100, 101을 각각 상태 q0, q1, q2, q3, q4, 및 q5에 대응시켜 이 값에 따라 DTM 이

움직이게 할 수 있다. 우리가 쓰는 PC도 메모리와 register, 등 CPU의 기억장치에 현재 저장된 정보가 PC의

현 상태에 대응한다고 할 수 있다. 상태 수를 줄이는 것은 구현할 hardware의 크기를 줄이는데 결정적인 역할을 한다.

그러나 DTM의 상태 수를 최소화하는 문제는 해결 불가능한 문제로 알려졌다. 우리는 후에 상태 수를 최소화하는

것이 가능한 automata에 대하여 공부할 것이다.

(b) 편의상 DTM을 기술할 때 다음과 같은 관례를 따른다.

(i) State transition은 에 있는 모든 tape 기호에 대하여 정의되어야 하지만, 정상적인 경우만 표현한다. 예를 들어

우리가 설계한 DTM의 transition graph를 보면, start state q0에서 읽은 기호가 0이 아닐 때는 표현하지 않았다. 이런

경우는 input string이 주어진 언어에 속하지 않아 reject 됨을 뜻한다.

(ii) DTM은 항상 start state에서 입력 문자열의 왼쪽 끝에 있는 문자를 읽으며 작동하기 시작한다고 본다.

(iii) 필요한 경우를 제외하고, DTM을 제시할 때, 6-tuple은 생략하고, state transition graph만 나타낸다.

위에 기술한 여러 관례와 가정은 앞으로 배울 모든 automata에도 적용한다.

Rumination: DTM

Page 102: 계산모델: 오토마타와 형식언어(CH01-CH05)

102

DLBA는 읽고 쓸 수 있는 tape의 영역을 입력 string의 길이로 한정한

automata이다. 이를 위하여 입력 string의 양단에 아래 그림과 같이

boundary marker (경계표시; 관례로 „[„ 와 „]‟ )를 둔다. DLBA는 이

boundary marker를 만나면 오던 방향으로 돌아가거나 정지해야 한다.

다른 모든 기능은 DTM과 같다. 형식적으로 DLBA는 다음과 같이

DTM 정의에 두 경계표시를 추가한 8-tuple로 정의한다.

Grammar를 정의할 때 type 0 grammar에 제한 조건을 더하여 type

1, 2, 3을 도입한 것과 같이, DTM의 기능에 제한 조건을 더하여 여러

가지 automata를 정의할 수 있다.

Automata

4.2 Deterministic linear bounded automata (DLBA)

[ a a ba b ]

q0

M = (Q, , , , q0, [, ], F)

Page 103: 계산모델: 오토마타와 형식언어(CH01-CH05)

103

언어 {0n1n | n 1}를 인식하는 DLBA는 우리가 설계한 DTM의

transition graph을 아래 그림과 같이 간단히 수정하여 만들 수 있다.

State q4에서 q5로 가는 accept 단계에서 공백 문자 B 대신 boundary

marker „]‟를 읽는 것이 다르고 나머지 부분은 DTM의 것과 같다.

AutomataDLBA

( ], ], N )

q4 q5

(Y,Y,R) (Y,Y,R)

q1

q3

q2

start

(0,0,R)

(Y,Y,R)

(0,0,L)

(Y,Y,L)

(X,X,R)

(1,Y,L)

(0,X,R)

(0,X,R)

q0

A

N

I

Page 104: 계산모델: 오토마타와 형식언어(CH01-CH05)

104

DTM의 input tape를 read only (읽기 전용)로 제한하고 그림과 같이

push down stack을 추가한 것이 DPDA이다. DPDA은 한 step 이행 중에

input head는 읽지 않고 정지해 있을 수도 있으며, 읽으면 반드시 우측

cell로 이동한다. Stack head는 항상 stack의 상단에 있는 문자를 읽고

이를 pop하거나, 다른 문자로 바꾸거나, 문자를 push할 수 있다.

Stack의 바닥에는 바닥 표시 문자 (관례로 Z0 )를 둔다.

a a a bb b

one-way read only

push down stack

Z0

finite state

control

Automata

4.3 Deterministic pushdown automata (DPDA)

Page 105: 계산모델: 오토마타와 형식언어(CH01-CH05)

105

AutomataDPDA

DPDA의 한 step을 아래 그림 (a)와 같이 graph 또는 함수로 표기한다.

그림 (b)의 예에서 stack의 상단에 있는 기호 X가 YX로 바뀌었다 함은

상단의 X 위에 Y를 push 했다는 뜻이다. YX 대신 이 있으면, X를

pop하여 버린 것이고, 읽은 문자의 위치에 이 있으면, input의 문자를

읽지 않는다는 뜻이다. 이때 input head는 움직이지 않는다.

p

q(a, X/YX)

(p, a, X) = (q, YX)

(b)

(현재상태, 읽은 문자, stack 상단 문자) =

(다음 상태, 바뀐 stack 상단 내용)

(a)

현재상태

다음상태

( 읽은 문자, stack 상단 문자 / 바뀐 stack 상단 내용)

Page 106: 계산모델: 오토마타와 형식언어(CH01-CH05)

106

아래의 그림은 DPDA의 연속되는 세 step을 예로 들고 이를 함수와

state transition graph로 표현한 것이다.

AutomataDPDA

… X

a b c

r

V… X Y

a b c

q

… Z

p

a b c

… X

a b c

q

( p , a, Z ) = ( q,YX ) ( q, , Y ) = ( r, V ) ( r, b, V ) = ( q, )

(a, Z /YX)p q r

(, Y/V)

(b, V/)

A

N

I

Page 107: 계산모델: 오토마타와 형식언어(CH01-CH05)

107

형식적으로 DPDA M은 다음과 같이 7-tuple로 정의한다.

M = ( Q, , , , q0 , Z0, F )

Q는 state의 집합, 는 input alphabet, 는 stack alphabet, 는 state

transition function, q0는 초기 state, Z0는 stack 바닥 기호, 그리고 F는

accepting state의 집합이다.

예를 들어 ( q , a, Z ) = ( p, )라 하자. 여기서 a , Z , p, q Q,

*. 이는 DPDA의 stack 상단의 문자가 Z일 경우, input head는 현재의

위치에 있는 문자를 읽고 그것이 a이면, Z 대신 를 push 하라는 뜻이다.

AutomataDPDA

Transition function 는 현재의 state, input symbol, 그리고 stack

상단에서 읽은 symbol이 주어지면, 다음 state와 stack에 쓸 내용 (즉,

stack 문자열)을 준다. 즉,

: Q ( { } ) Q *.

Page 108: 계산모델: 오토마타와 형식언어(CH01-CH05)

108

그러나 ( q , , Z ) = ( p, )와 같이 input 기호 a 대신 을 두면,

input head는 읽지 않고 정지한 상태에서 stack에 를 쓴다는 뜻이다.

Stack에 쓴 문자열의 길이( || )가 0 (즉, = )이면 stack 상단의

문자가 pop되어 없어지고 || = 1이면, stack 상단의 내용이 바뀌거나

변하지 않고 , | | 2이면 , Z 대신 를 p u s h함을 뜻한다 .

우리는 편의상 한 번에 한 개의 문자를 push 하도록 (즉, || = 2 ) 를

제한하여 쓰기로 한다. 이러한 제한은 automata가 인식하는 언어에

영향을 주지 않는다. 예를 들어 아래 그림 (a)와 같이 한 번에 3개의

문자를 push하는 PDA가 있다 하자. 이를 그림 (b)와 같이 state를

추가하여 한 번에 1개의 문자를 push하는 PDA로 수정할 수 있다.

AutomataDPDA

s t

(A, Z0/AaBZ0)

(a)

s t(A, Z0/BZ0)

(, B/aB)

(, a/Aa)

(b)

Page 109: 계산모델: 오토마타와 형식언어(CH01-CH05)

109

DPDA M이 인식하는 언어 L(M)은 다음과 같이 정의한다.

L(M) = { x | M accepts x }

문자열 x가 입력으로 주어졌을 때, x를 accept 하기 위하여 DPDA는

다음의 두 조건을 만족해야 한다.

(1) Input head는 input x의 마지막 문자까지 다 읽고,

(2) finite state control은 accepting 상태(그림의 f )에 있어야 한다.

a a ab b

Z0

q0

Z0 X

f

a a ab b

A

N

I

AutomataDPDA

Page 110: 계산모델: 오토마타와 형식언어(CH01-CH05)

110

Automata

예 1. 아래 그림은 언어 L = {aibi | i > 0 }를 인식하는 DPDA를

보여준다. 이 DPDA는 문자 a를 읽으며 stack에 push 하다가, b가

읽히면, stack 상단에 있는 a를 pop하기 시작한다. 이때부터 stack

상단에 a가 있으면 input를 읽고, 읽은 것이 b이면 stack 상단의 a를

pop하는 작업을 반복하기를 stack 바닥기호 Z0가 나타날 때까지

진행한다. Z0가 나오면, input 읽기를 중지하고 accepting 상태에

들어간다. Input string aaabbb는 어떻게 accept하고, string aabbb와

aba는 어떻게 accept 하지 않게 되는지 graph를 따라 추적하여 보자.

DPDA

a b b ba a

Z0

q0

start(a, Z0/aZ0)

(a, a/aa)(b, a/)

(b, a/)

(, Z0/Z0)

Page 111: 계산모델: 오토마타와 형식언어(CH01-CH05)

111

예 2. 언어 {aibj | j > i > 0 }을 인식하는 DPDA.

이 언어는 예 1과 달리, b의 수가 a의 수보다 많다. 아래 그림 (b)의

DPDA M2가 어떻게 이 언어를 인식하는지 그림 (a)에 있는 M1 (예1의

DPDA)과 비교해보자. 각 DPDA에 input aabb와 aabbb를 넣었을 때

어떻게 처리되는지 알아보자.

AutomataDPDA

start(a, Z0/aZ0)

(a, a/aa)(b, a/)

(b, a/)

(, Z0/Z0)

(a) M1: L(M1) = {aibi | i > 0 } (b) M2: L(M2) = {aibj | j > i > 0 }

start

(a, Z0/aZ0)

(a, a/aa)

(b, a/)

(b, a/)

(b, Z0/Z0)

(b, Z0/Z0)

Page 112: 계산모델: 오토마타와 형식언어(CH01-CH05)

112

start(a, Z0/Z0)

(b, a/)

(b, a/)

(a, a/aa)

(a, Z0/aZ0)

(c) M3: L(M3) = {aibj | i > j > 0 }

Automata

예 3. 그림 (c)의 DPDA M3는 언어 {aibj | i > j > 0 }를 인식한다. 그림

(b)는 예 2에서 본 언어 {aibj | j > i > 0 }를 인식하는 DPDA이다. String

aaabb와 aabbb를 input로 주었을 때 각 DPDA가 어덯게 작동하는지 비교

분석하여 보면, M3가 어떻게 주어진 언어를 인식하는지 알 수 있을

것이다.

DPDA

(b) M2: L(M2) = {aibj | j > i > 0 }

start

(a, Z0/aZ0)

(a, a/aa)

(b, a/)

(b, a/)

(b, Z0/Z0)

(b, Z0/Z0)

Page 113: 계산모델: 오토마타와 형식언어(CH01-CH05)

113

예 4. 언어 {aibkci | k, i > 0 } {aibkdk | k, i > 0 }를 인식하는 DPDA.

이 예는 input tape를 읽지 않는, 소위 -move를 쓰는 경우를 보여 준다.

start(a, Z0/aZ0)

(a, a/aa)(b, a/ba)

(b, b/bb)

(c, b/)

(, b/)

(, a/)(c, a/)

(d, b/)

(d, b/)

(, a/a)

(, Z0/ Z0)

*

AutomataDPDA

(d) M4: L(M4) = {aibkci | k, i > 0 } {aibkdk | k, i > 0 }

Page 114: 계산모델: 오토마타와 형식언어(CH01-CH05)

114

DFA는 automata 중에 가장 단순한 model로 아래 그림 (a)와 같이

DPDA로 부터 stack을 제거한 경우이다. 따라서 DFA M은 DPDA의

stack에 관계된 정보를 뺀 5-tuple M = ( Q, , , q0 , F )로 정의한다.

여기서 Q, , q0, 및 F는 DPDA의 경우와 같고, transition function 는

현재의 state 와 input symbol를 주면 다음 state를 정한다. 즉,

: Q Q.

예를 들면, (p, a) = q는 state p에서 input tape를 읽어, 읽은 것이

a이면, state가 q로 바뀐다는 뜻이다 (그림 (b) ). DFA는 DPDA와 달리

매 step input symbol을 읽는다는 것을 기억하자.

a b

q0

a b

One-way read only

(a)

Automata

4.4 Deterministic finite automata (DFA)

p

qa

(b)

(p, a)= q

Page 115: 계산모델: 오토마타와 형식언어(CH01-CH05)

115

DFA M에 input string x를 주었을 때, DPDA처럼 다음 두 조건을

만족하면, M은 x를 accept한다고 한다.

AutomataDFA

예 1. 아래 그림은 다음의 언어 L, 즉 1의 수가 홀수 인 binary

string을 accept 하는 DFA를 보여준다.

L = { x | x {0, 1}+, x 내의 1의 수가 홀수}

01

0

start

1

(1) Input x의 마지막 문자까지 읽고,

(2) Accepting 상태에 있다.

따라서 DFA M이 인식하는 언어는 다음과 같이 쓸 수 있다.

L(M) = {x | M은 input x를 accept 한다.}

Page 116: 계산모델: 오토마타와 형식언어(CH01-CH05)

116

예 2. 아래 그림은 다음의 언어 L을 인식하는 DFA를 보여준다.

L = {x | x 는 binary 수이며 ( 즉, x {0, 1}+), x mod 3 = 0}

이 DFA는 input에 주어진 string을 한 bit 씩 우측으로 차례로 읽으며,

지금까지 읽은 수를 3으로 나눈 나머지(그림의 state 이름)를 계산해

기억해두는 방법을 쓴다. 지금까지 읽은 수를 3으로 나눈 나머지를 i라

하자. 다음 읽은 bit가 j {0, 1}이면, 나머지는 (2i + j) mod 3이다. 따라서

현 상태 i 상에서 j {0, 1}를 읽으면, 상태 (2i + j) mod 3으로 가면 된다.

0

1

20

1

1

1

0

0

10

start

AutomataDFA

Page 117: 계산모델: 오토마타와 형식언어(CH01-CH05)

117

이 장을 마치기 전에 DPDA에 대한 정의, 특히 input를 처리할 때 DTM과 다른 제약 때문에 혼란스런 부분이 있어 이를

바로 이해할 필요가 있다. DPDA M = (Q, , , , q0, Z0, F )이 주어졌다 하자. 정의에 의하면 M은 input string을

처리할 때, 다음의 두 제약을 받는다.

(1) 어떤 상태 p Q, stack 문자 A 및 입력 문자 a 에 대하여, (p, a, A)가 정의되어 있으면 (즉, input a를 읽으면),

같은 상태 p와 스택문자 A에 대하여 (p, , A)는 정의되어 있지 않아야 한다. (즉, input를 읽지 않는 동작은 정의하지

않아야 한다.) 반대로 (p, , A)가 정의되어 있으면, (p, a, A)은 정의하지 않아야 한다.

(2) M의 input head는 input symbol, 즉 에 있는 기호만 읽을 수 있고, 다른 문자를 읽으면 입력문자열은 즉시 reject 된다.

따라서 input가 다 읽혔는지 알아보려고 input string의 마지막 기호 다음에 있는 공백기호 B를 읽을 수 없다. (이 제약은

DFA에도 적용된다.)

제약 (1)에 대하여:

어떤 DPDA M의 상태 p, q, r Q 와 기호 A,B,C 에 대하여 transition (p, a, A) = (q, BA)와 ( p, , A) = (r, CA)가

동시에 정의되어 있다 하자 (아래 그림 참조).

Transition (p, a, A) = (q, BA)은 M이 다음과 같이 동작함을 뜻한다:

(a) 상태 p 상에서 stack 상단의 기호를 읽고 그것이 A이면,

(b) 입력테이프를읽고, 읽은 기호가 a이면,

(c) stack에 B를 push하고 상태 q로 들어간다.

반면, transition (p, , A) = (r, CA)은 다음과 같이 동작한다는 뜻이다:

(a) 상태 p 상에서 stack 상단의 기호를 읽고 그것이 A이면

(b) 입력테이프를읽지 않고,

(c) stack에 C를 push하고 상태 r로 들어간다.

Rumination: DPDA 정의Automata

q

(a, A/ BA)p

r(, A/ CA)

Page 118: 계산모델: 오토마타와 형식언어(CH01-CH05)

118

특히 DPDA의 각 transition은 다음의 세부 절차 (micro procedure)를 따라 진행된다는 것을 명심해야겠다.

(a) Stack 상단에 있는 기호를 읽는다. (이 부분은 transition 마다 이행한다.)

(b) Stack 상단의 기호에 따라 input string을 읽거나 (예, (p, a, A) 가 정의됨), 읽지 않고 ( ( p, , A)가 정의됨),

(c) Stack에 push 또는 pop 하거나 stack 상단의 기호를 바꾼 후, 다음 상태로 들어간다.

만일 (p, a, A)과 ( p, , A)이 동시에 정의되어 있으면, 두 개의 상반된 동작(즉, 읽고, 읽지 않음)이 동시에 발생한다는

뜻이다. 다시 말하면, 원인, 즉 같은 상태 p와 stack 문자 A에 대하여 두 개의 상반된 반응을 하게 된다. 이것은 우리의

직관, 즉 “원인을 주면, 결과는 유일하게 정해진다.”라는 소위 determinism (결정성)에 반하는 동작이다. 이처럼 같은

원인(상태와 입력 문자)에 대하여 서로 상반된 동작을 허용하는 automata를 nondeterministic (비결정성) automata라

한다. 이러한 automata model은 다음 장에서 자세히 배우기로 한다.

제한조건 (2)에 대하여:

정의에 의하여 DPDA에 주어진 입력을 accept 하려면, 다음의 두 조건을 만족해야 한다. (이 조건은 DFA 경우에도

적용된다.)

(a) Input string이 모두 읽히고 (즉, input head가 입력의 마지막 문자까지 읽음),

(b) accept 상태에 있다.

DPDA가 accept 상태에 있는 것 (즉, 조건 (b)) 만으로 input string이 accept 된다는 뜻이 아니다. 이것이 DTM이나

DLBA와 다른 점이다. DPDA의 input string이 accept 되는지 알려면, 조건 (a)를 추가로 만족하는지 따져 봐야 한다.

이 조건을 만족하는지 여부는 DPDA가 할 일이 아니라, DPDA를 이용하는 사용자가 할 일이다. 왜 주어진 입력

문자열이 accept 되는지를 결정하는 일을 사용자가 떠맡아야 할까? DPDA가 입력 문자열을 다 처리했을 때에만

accept 상태에 들어가도록 할 수 없을까?

AutomataRumination: DPDA 정의

Page 119: 계산모델: 오토마타와 형식언어(CH01-CH05)

119

위에서 제기한 문제를 해결하려고 우리는 가끔 DPDA로 하여금 input string의 마지막 문자의 우측에 있는 공백

문자 B를 읽도록 하려는 유혹에 빠지기 쉽다. 그러나 이 공백 문자 B는 DPDA의 input alphabet 에 없는 것이므로

읽는 즉시 동작이 끝나 input를 더 처리할 길이 없다. 아래 그림 (a)는 언어 L = {ai | i > 0 }을 인식하는 DPDA이다.

Input tape에 aaaaa가 주어졌다 하자. 이 DPDA는 우측 끝에 있는 a를 읽고 accept 상태에 있게 된다. 따라서 input

string을 accept 한다고 할 수 있다. (DPDA는 방금 읽은 a가 input의 마지막 문자라는 것을 알 수 없다. DPDA를

사용하는 우리가 판단해야 한다 점에 유의하자.)

이렇게 DPDA의 상태와 input string을 다 처리했는지를 따지며 사용하는 것이 불편하다면 input string의 끝에

특별한 문자를 두면 어떨까? 다시 말하면, 위의 언어를 L‟ = {ai ; | i > 0 }와 같이 바꾸자는 것이다. 이 언어의 모든

문자열은 end-of-string marker „;‟으로 끝나며, 이 문자도 input alphabet 에 속하므로 읽을 수 있다. 아래 그림 (b)가 이

언어를 인식하는 DPDA이다. 이 DPDA는 끝 기호를 읽은 후에만 accept 상태에 들어가므로 accept 상태에 있는

것만으로 input string이 accept 되는지 알 수 있다. (그림 (b)는 그림 (a) 보다 user-friendly 한 automata이다.) 사용자가

input string을 input tape에 둘 때 이 특별한 기호 ‘;’을 제 위치에 쓰면 된다.

(a, Z0/Z0)(a, Z0/Z0)

(a)

(a, Z0/Z0)

(a, Z0/Z0)

( ; , Z0/Z0)(b)

AutomataRumination: DPDA 정의

a a aa a

Z0

q0

Page 120: 계산모델: 오토마타와 형식언어(CH01-CH05)

120

(a, Z0/Z0)(a, Z0/Z0)

(a)

(a, Z0/Z0)

(a, Z0/Z0)

( ; , Z0/Z0)

(b)

Automata되새김: DPDA 정의

DPDA 는 위의 그림 (a)가 보여주는 것과 같이 accept 상태에서 계산을 진행할 수 있다. 만일 accept 상태에서 input를 읽어

처리할 수 없고 input를 다 읽은 후에야 accept 상태로 가도록 제한하면, 문제가 생긴다. 예를 들면, 언어 {ai | i > 0}를

인식하려면 input string에 있는 마지막 a를 알아야 하는데, 이를 알 방법이 없기 때문이다.

끝으로, accept 하는 조건에 관하여 다음과 같은 질문을 할 수 있다: “왜 DTM과 DLBA에 대하여는 input string을 accept

하는 데 필요한 조건이 „accept 상태에 있어야 한다‟는 것 하나만 있는가?” DTM과 DLBA에서는 공백 기호 B가 tape

alphabet에 속하므로 input string의 양쪽에 있는 공백 기호 B를 읽을 수 있기 때문에 input string의 끝을 알 수 있다. 따라서

DTM과 DLBA는 input string을 다 읽어 처리한 후에 accept 하거나 reject 할 수 있다. 더욱이 이들의 input head는 양방향으로

움직일 수 있기 때문에 input tape의 어느 위치에서도 accepting state에 있을 수 있다.

이렇게 하면, DPDA를 사용하는 번거로움은 덜었지만, 그 짐이 input string을 작성하는 사람에게 넘어간 셈이 된다.

그렇다면, input string을 작성하는, 소위 프로그래머에게는 불평이 없을까? End-of-string marker를 잘못 쓴다면 어떤

문제가 생길까? Pascal, C 언어, 등이 marker („;‟)를 쓰는 경우이며, FORTRAN은 marker 없이 쓰는 프로그래밍 언어이다.

이 과목에서는 end-of-string marker가 없는 언어를 주로 다루기로 한다.

Page 121: 계산모델: 오토마타와 형식언어(CH01-CH05)

121

4.2 다음 DTM은 무엇을 하는지 각 state 상에서 하는 일을 언급하며 자세히 설명하시오. Input tape에는 { 0, 1 }+

내에 있는 임의의 string이 주어졌다고 가정한다. (간단한 input string을 놓고 TM이 하는 일을 추적하여 보면

답을 쉽게 얻을 수 있다.)

(1,1,R)

(0,0,R)

(B,B,L)

(1,B,L)

(0,B,L)

(0,1,L) (1,0,L)

(0,0,L)

(1,1,L)

(B,0,N)

(B,1,N)

(0,0,R)

(1,1,R)

(B,B,L)

(1,0,L)

(0, 1, R)

start 0

12 3

4

5

6

(B,1,R)

4.1 Binary number x를 ( x {0, 1}+) input로 주었을 때, 그 값을 1 증가시킨 후 accepting 상태에서 정지하는 DTM의

state transition graph를 만들어 보이라. (DTM의 tape head는 왼쪽 끝에 있는 bit를 읽기 시작한다는 것을 기억하자.)

연습문제Automata

Page 122: 계산모델: 오토마타와 형식언어(CH01-CH05)

122

4.3 String x {a, b}*를 input로 주면, 다음과 같은 일을 하는 DTM의 state transition graph을 그려 보이라. 일이 끝난

후 DTM은 accepting state에서 정지해 있어야 한다.

(a) String x를 한 cell 우측으로 이동. (b) String x를 두 cell 우측으로 이동.

4.4 String x {a, b}+를 input로 주면, x 상의 모든 a를 좌측에, 모든 b를 우측에 오도록 문자들을 재배열하는

DTM을 설계하고, 어떻게 작동하는지 간결하게 설명하시오. 일이 끝난 후 DTM은 accepting state에 있어야 한다.

예를 들어, input string baabbab를 주면, 이를 aaabbbb와 같이 바꾸고 accepting state에 들어간다.

4.5 아래의 각 언어를 인식하는 DPDA의 state transition graph을 설계하여 보이라. DPDA를 설계할 때 다음에 제시한

조건을 기억하자.

• Accept 하기 위한 두 조건(즉, input string을 다 읽고, accepting state에 있어야 한다.)을 만족해야 한다.

• Blank symbol B는 input 기호가 아니므로 이 기호를 읽어 input를 다 읽었는지 검사할 수 없다.

(a) L1 = {aibj; | i > j > 0 } (b) L2 = {aibj; | i j > 0 } (c) L3 = {aibj; | i j 0 }

(d) L4 = {aibj | i > j > 0 } (e) L5 = {aibj | i j > 0 } (f) L6 = {aibj | i j 0 }

(g) L7 = { aibkci | i, k > 0 } (h) L8 = { aibkci | i, k 0 }

위의 문제 (a) – (c)의 언어는 모두 semicolon(;)으로 끝난다. Transition graph을 만든 후 간단한 input string을 적용하여 옳게

작동하는지 확인하자.

Automata연습문제

Page 123: 계산모델: 오토마타와 형식언어(CH01-CH05)

123

4.6 다음 각 CFG가 생성하는 언어를 인식하는 DPDA의 state transition graph을 설계하여 보이라.

(a) G1: S aSbb | abb (b) G2: S aSbb | (c ) G3: S aSbb | ccc

4.7 다음 각 언어를 인식하는 DPDA를 만들어 보이라. .

L1 = { x | x {a, b, c}+, string x 내의 a의 수와 b의 수가 같다. }

L2 = { x | x {a, b, c}+, string x 내의 a의 수가 c의 수 보다 많다. }

Automata연습문제

4.8 다음 각 언어를 인식하는 DFA의 state transition graph을 만들어 보이라.

(a) L1 = { babo } (b) L2 = { xbaboyobba | x, y {a, b, o}*}

(c) L3 = {x | x {a, b, c}+ , string x의 첫 기호와 마지막 기호가 같다.}

Page 124: 계산모델: 오토마타와 형식언어(CH01-CH05)

124

A B

C D

x2

x1

다음 두 문제는 DFA model을 응용하는 문제로 Hopcropt와 Ullman의 저서 “Introduction to Automata Theory,

Languages, and Automata”에 있는 문제를 일부 수정한 것이다.

4.9 다음 그림과 같이 두 개의 입구 A, B와 두 개의 출구 C, D가 서로 교차하는 관으로 연결된 장치가 있다고 하자. 관의

교차점(x1, x2)에는 굴러 내려오는 구슬을 좌 또는 우측으로 전환하는 지렛대(lever)가 있다. 그림의 지렛대 위치는 구슬을

우측으로 가게 한다. 구슬이 지렛대를 치고 지나가면 지렛대의 방향은 직각으로 변하여 다음 내려오는 구슬은

반대방향으로 가도록 한다. 이 장치를 DFA model로 설계하라. 입구 A로 넣은 구슬을 0, 입구 B로 넣은 구슬을 1이라

하고 (따라서, DFA의 input는 binary string이다.), 마지막 구술이 D로 나오면 DFA는 input을 accept 하는 state에 들어가도록

한다.

Automata연습문제

Page 125: 계산모델: 오토마타와 형식언어(CH01-CH05)

125

neuron net

output

2

1

1

input

y1

y2

y3

1

4.10 DFA는 생체의 neuron net (신경망)을 modeling 하는데 처음 응용한 모델이다. Neuron net은 아래 그림에서

삼각형으로 표시한 neuron (신경세포, 즉 nerve cell)을 node로 하는 일종의 network이다. 각 neuron은 synapse라 부르는

일종의 input port를 여러 개 갖고 있다. Synapse는 두 종류가 있는데, 하나는 그림에서 백색 원으로 표시한 excitatory

(자극적) synapse 이고, 다른 하나는 그림의 흑색 원에 해당하는 inhibitory (억제적) synapse이다. Neuron은 입력 값이 1인

excitatory synapse의 수가 입력 값이 1인 inhibitory synapse 수보다 임계 값 (threshold. 그림의 삼각형 내에 있는 값 )과

같거나 크면, 출력 값이 1이 되고, 그렇지 않으면, 출력 값이 0이 된다.

아래 그림과 같은 neuron net를 DFA로 modeling하라. 단, input은 binary string이며, 각 bit의 값은 neuron net가 안정된

상태에 있을 때(즉, 모든 neuron의 output이 일정한 값으로 고정됨)까지 충분한 시간 유지한다고 가정한다. 초기에

3 neuron의 출력, 즉 y1, y2, 및 y3의 값이 모두 0이라 가정하라.

Automata연습문제

Page 126: 계산모델: 오토마타와 형식언어(CH01-CH05)

126

5. Nodeterministic Automata

(비결정성 오토마타)

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

Page 128: 계산모델: 오토마타와 형식언어(CH01-CH05)

128

지금까지 우리가 배운 automata는 현재의 state와 외부로부터의 입력 (즉 원인)에 대하여 다음의 state, output, 이동방향,

등 그 결과가 유일하게 결정된다. 다시 말하면 state transition function 의 값이 하나만 허용된다. (편의상 reject 하는

transition의 값을 나타내지 않기로 했음을 기억하자.) DFA는 현재의 state와 input symbol이 주면, 다음 state가 유일하게

주어진다. (예를 들면, (p, a) = q. ). DPDA는 현재의 state와 stack 상단에서 읽은 기호를 주면, input tape를 읽을 것인지가

결정되며, 읽으면, 읽은 symbol에 따라 다음의 state와 stack 상단에 쓸 내용이 유일하게 결정된다 (예: (p, a, A) = (q, BA)).

DTM과 DLBA는 현 state와 읽은 tape symbol에 의하여 tape에 쓸 기호, 다음 state, 움직일 방향이 유일하게 결정된다 (예:

(p, a) = (q, b, R)). 이러한 automata의 특성은 우리가 직관 (intuition)으로 갖는 인과관계에 대한 결정론 (determinism), 즉

“원인이 주어지면 결과가 유일하게 결정된다.”라는 생각과 일치한다.

이제 우리가 배우려는 비결정성(nondeterministic) automata는 원인 (즉, input)에 대하여 서로 다른 결과(즉, 의 값이

하나 이상)를 허용한다. 예를 들면, nondeterministic finite automata (NFA)는 (p, a) = {q, r}, nondeterministic pushdown

automata(NPDA)는 (p, a, A) = {(q, BA), (r, )}, 그리고 nondeterministic linear bounded automata (NLBA)와

nondeterministic Turing machine (NTM)은 (p, a) = {(q, b, R), (q, b, L)}. 이 때문에 nondeterministic automata는 우리의

직관으론 선뜻 이해가 되지 않는 model이다. 그러나 이들 새로운 model의 바탕이 되는 개념을 이해하고 나면 난해한

model은 아니며, 우리가 추구하는 computational model에 관한 지식을 한 차원 높여 줄 뿐 아니라, deterministic model을

설계하고 이해하는 데 편리한 도구임을 알 수 있다.

이 장에서 우리는 가장 간단한 model인 NFA의 한 예를 들어 비결정성 계산에 관한 개념을 이해한 다음, 이를 확장하여

NPDA, NLBA, 그리고 NTM를 공부하기로 한다.

5. Nondeterministic Automata

Page 129: 계산모델: 오토마타와 형식언어(CH01-CH05)

129

q0

q1

q2

a

a

a

a,bb

(a) NFA M

q0

q1

q2

a

b

q0

q0

q1

q1

X

b

b

b b

a

(b) Accepting transition profile.

아래 그림 (a)의 NFA M은 state가 q0 또는 q2에 있을 때, input symbol이

각각 b와 a면, nondeterministic transition이 발생함을 보여준다. 이를

transition function으로 표현하면 다음과 같다.

(q0, b) = {q0 , q1}, (q2, a) = {q0 , q1}

String bba를 input로 주면, 이 NFA가 갖는 state transition profile

(상태 천이 모양)은 그림 (b)와 같다.

Nondeterministic Automata

5.1 Nondeterministic Finite Automata (NFA)

X는 dead state

Page 130: 계산모델: 오토마타와 형식언어(CH01-CH05)

130

NFANondeterministic Automata

q0

q1

q2

a

a

a

a,b

b

(a) NFA M

q0

q1

q2

a

b

q0

q0

q1

q1

X

b

b

b b

a

(b) Accepting Transition Profile.

NFA는 아래 그림 (b)와 같이 한 input string에 대하여 여러 갈래로 state

transition이 발생할 수 있다. 정의에 의하여 이들 중에 accepting state로

끝나는 것이 하나라도 있으면 (그림에서 leaf node가 accepting state),

rejecting state로 끝나는 경우는 무시하고, NFA는 주어진 input string을

accept 한다고 한다. 이 정의에 따라 그림 (a)의 NFA는 string bba를

accept 한다.

Page 131: 계산모델: 오토마타와 형식언어(CH01-CH05)

131

NFANondeterministic Automata

q0

q1

q2

a

a

a

a,b

b

(a) NFA M

q0

q1

b

b

q0

q0

q0

q1

q1 X

X

b

b

bb

b b

(b) Rejecting transition profile.

아래 그림 (b)는 input string bbb에 대하여 M이 갖는 state transition

profile을 보여 준다. 그림에서 leaf node가 accepting state인 경우가

없으므로, 정의에 의하여 M은 string bbb를 reject 한다고 한다.

Page 132: 계산모델: 오토마타와 형식언어(CH01-CH05)

132

NFANondeterministic Automata

형식적으로 N FA M은 D FA와 같이 5 - t u p l e로 정의한다 .

M = (Q, , , q0, F )

NFA의 state transition function 는, DFA와 달리, 한 상태에서 읽은

input에 따라 여러 상태로 천이가 일어날 수 있으므로 다음과 같이

정의한다.

: Q 2Q

즉, Q 에 있는 한 state와 에 있는 한 input symbol이 주어지면, 하나

이상의 state(즉, Q의 부분집합)로 transition이 발생할 수 있다는

뜻이다.

Page 133: 계산모델: 오토마타와 형식언어(CH01-CH05)

133

NFA M이 어떤 state p 상에서 input string x를 읽은 후에 들어갈 수

있는 state는 여러 개 있을 수 있다. 이를 S ( Q )라하고, 를 string에

확장 적용하여 (p, x) = S라 쓰기로 하자. NFA M이 인식하는 언어

L(M)은 정의에 의하여 다음과 같이 표현할 수 있다.

NFA Nondeterministic Automata

L(M) = {x| x *, (q0, x) = S, and S F }

여기서 S F 는 string x를 읽고 도달할 수 있는 상태 중에

accepting state가 있다는 뜻이다.

Page 134: 계산모델: 오토마타와 형식언어(CH01-CH05)

134

Rumination: NFA

Nondeterministic Automata

일반적으로 한 DFA M을 주고 M이 인식하는 언어 L(M)을 밝히는 문제는 간단하지 않다. 하물며 NFA인 경우

더욱 복잡한 문제이다. 앞서 보여준 state transition profile은 NFA의 천이 특성과 accept 또는 reject 하는 조건을

알리려는 것이지, 임의의 input string에 대하여 accept 여부를 판단할 목적으로 쓸 수 있는 실용적인 방법은

되지 못한다. 이는 NFA 상에 nondeterministic transition의 수가 많고, input string이 길 경우 transition profile (즉,

tree)의 크기가 폭발적으로 증가하기 때문이다. 우리는 곧 state transition graph를 가지고 DFA와 NFA 가

인식하는 언어를 구하는 체계적인 방법을 배울 것이다.

언어의 구조가 복잡하지 않을 때, 이를 인식하는 NFA를 설계하는 것이 어렵지 않기 때문에 word processor와

Internet 검색에 NFA model을 많이 이용한다. 곧 제시할 두 예는 주어진 언어를 인식하는 NFA를 설계하는 것이

DFA를 설계하는 것보다 간편함을 보여 준다.

NFA와 DFA의 언어 인식 능력에 대하여 다음과 같은 질문을 할 수 있다. NFA와 DFA의 언어인식능력에

차이가 있나? 이 질문에 대한 답은 부정적이다. 우리는 8장에서 임의의 NFA가 있을 때 이를 같은 언어를

인식하는 DFA로 전환하는 기법을 배울 것이다. (DFA는 NFA의 특별한 경우이므로, 당연히 DFA가 NFA 보다

언어인식 능력이 클 수 없다.)

언어 인식 능력에 관하여 PDA와 LBA, 그리고 TM에 대하여도 같은 질문을 할 수 있다. 그 답은 model에

따라 다르다. NPDA는 DPDA가 인식할 수 없는 언어를 인식할 수 있지만 (부록 D 참조), NTM 과 DTM이

인식할 수 있는 언어는 같다 (단지 인식 속도에서 차이가 있을 뿐이다). 흥미롭게도 NLBA와 DLBA가 인식할

수 있는 언어에 차이가 있는지 여부는 아직도 미해결 문제로 남아 있다.

Page 135: 계산모델: 오토마타와 형식언어(CH01-CH05)

135

a

12

3

aa, b

NFA 설계 예 1. 언어 L = {xaa | x {a, b}*}을 인식하는 NFA를 만들어

보자. 언어 L은 aa로 끝나는 a와 b로 된 모든 string을 포함한다. 아래의

NFA는 state 1에 있는 loop transition을 이용하여 input string xaa의 prefix

부분 x를 읽는 동시에 a를 읽을 때마다 state 2로 천이하고 연이어 a가

읽히면, accepting state 3으로 갈 수 있게 만든 것이다.

Nondeterministic Automata

State 2로 너무 일찍 천이가 일어나거나, 너무 늦게 일어나는 경우는

마지막 문자를 읽을 때 state 3에 도달할 수 없어 reject 됨을 알 수 있다.

만일 input string w가 aa로 끝난다면, 끝에서 두 번째 a에 의하여 state 2로

천이가 항상 발생하기 때문에 이 NFA는 w를 accept 한다.

NFA

L = {xaa | x {a, b}*}

Page 136: 계산모델: 오토마타와 형식언어(CH01-CH05)

136

NFA 설계: 예 Nondeterministic Automata

aa

a, b b

b

a, b a, b

L = {xaaybbz | x, y, z {a, b}*}

NFA 설계 예 2. 아래의 언어 L은 substring aa 우측에 어디엔가 bb가

있는 모든 string x {a, b}*를 포함한다. 예 1을 이해하면, 같은

원리로 아래의 NFA가 언어 L을 인식함을 알 수 있다.

Page 137: 계산모델: 오토마타와 형식언어(CH01-CH05)

137

Nondeterministic Automata

5.2 Nondeterministic Pushdown Automata (NPDA)

NPDA는 NFA와 같이 동시에 서로 다른 state로 transition 일어날 뿐

아니라 stack head도 다양한 일을 할 수 있다. 예를 들면, NPDA의 state

transition function은 (p, a, Z) = {(q, aZ), (r, aZ)}와 같이 stack에서 하는

일이 같지만, NFA와 같이 서로 다른 state로 천이하거나, 다음과 같이

천이하는 state와 stack에서 하는 일이 모두 다를 수 있다.

(s, b, Z) = {(t, ), (p, bZ), (t, cZ)}

LOVE

Love is when you take away the feeling, the passion, the romance and you find out you still love the person.

Love comes to those who still hope even though they‟ve been disappointed, to those who still believe, even though

they‟ve been betrayed, to those who still love even though they‟ve been deeply wounded before.

- Anonymous -

쉬어 가기

Page 138: 계산모델: 오토마타와 형식언어(CH01-CH05)

138

Nondeterministic Automata

NPDA 설계

예 1. 아래 두 graph M1, M2는 각각 다음 두 언어를 인식하는 DPDA이다.

L1 = {aibjck| i, j, k > 0, i = j } L2 = {aibjck| i, j, k > 0, j = k }

start

(a, Z0/aZ0)

(b, a/) (b, a/)

(c, Z0/ Z0)

(a, a/ aa)

(c, Z0/ Z0)

(a) M1

(a, Z0/Z0)

(a, Z0/Z0)

(b, Z0/bZ0)

(b, b/bb)

(c, b/ )(c, b/ )

(, Z0/ Z0)

start

(b) M2

Page 139: 계산모델: 오토마타와 형식언어(CH01-CH05)

139

Nondeterministic AutomataNPDA 설계

L = L1 L2 = {aibjck| i, j, k > 0, and i = j or j = k }를 인식하는 NPDA는

다음과 같이 L1과 L2 를 각각 인식하는 두 DPDA의 start state를 결합시켜

만들 수 있다. 이 NPDA는 State 1에서 두 state 2, 3으로 nondeterministic

transition을 하여 동시에 L1과 L2를 인식하는 DPDA를 따라 작동한다.

L은 DPDA로 인식할 수 없는 context-free 언어다.

(a, Z0/Z0)

(a, Z0/Z0)

(b, Z0/bZ0)

(b, b/bb)

(c, b/ )(c, b/ )

(, Z0/ Z0)

1start

(a, Z0/aZ0)

(b, a/) (b, a/)

(c, Z0/ Z0)

(a, a/ aa)

(c, Z0/ Z0)2

3

Page 140: 계산모델: 오토마타와 형식언어(CH01-CH05)

140

어떤 automata가 결정성인지 비결정성인지는, PDA의 특수한 경우를

제외하고, transition function 가 parameter에 대하여 여러 개의

값을 주는지를 보고 쉽게 판별할 수 있다.

PDA의 경우는 가 주는 값이 여러 개인 경우뿐 아니라, 4.2절의

rumination에서 이미 언급한 것처럼, 아래 예처럼 같은 state와 스택

상단의 기호에 대하여 input를 읽고 읽지 않는 transition이 있다면,

이 또한 NPDA이다.

(p, a, B) = (q, AB), (p, , B ) = (q, AB)

다음 예는 이와 같은 nondeterministic transition을 이용하는 NPDA를

보여준다.

Nondeterministic AutomataNPDA 설계

Page 141: 계산모델: 오토마타와 형식언어(CH01-CH05)

141

q0

q1

q2

q3(X, Z0/X Z0 )

(Y, X/YX )

(, X/X )

(X, X/ )

( , Z0/Z0 )

start

예 2. L = {xxR | x {a, b}+ }을 인식하는 NPDA를 만들어 보자.

Input string의 전반 x 부분을 stack으로 읽어드린 다음, 후반부를 읽으며

stack에 있는 것과 비교하면 되겠다. 문제는 전 후반 분기점을 아는

것이다. Deterministic 하게 이를 아는 것은 불가능하나, nondeterministic

transition은 이를 가능하게 한다. 아래의 NPDA는 state q1에서 두

transition, 즉 전반 부를 읽어 pushing하는 loop transition과 후반부와

비교하려고 읽지 않고 q2로 가는 nondeterministic transition을 이용한다.

그림에서 X, Y {a, b}.

따라서, Label (Y, X/YX ) 는

(a, a/aa), (a, b/ab),

( b, a/ba), (b, b/bb) 를,

label (X, X/)는

(a, a /) 또는 (b, b /) 를

간결하게 표현한 것이다.

Nondeterministic AutomataNPDA 설계

Page 142: 계산모델: 오토마타와 형식언어(CH01-CH05)

142

위의 언어 L = {xxR | x {a, b}+ }은 소위 palindrome 언어의 일종인데

DPDA로 인식할 수 없는 context-free 언어 중의 하나이다. 이 언어가

4장에서 배운 DPDA로 인식할 수 없음을 증명하는 것은 매우 도전적인

문제이다. 부록 D에, DPDA가 인식할 수 있는 언어들의 특성과 함께 이

증명을 자세히 풀이하여 두었다.

Nondeterministic AutomataNPDA 설계

Today‟s Quote

I pay very little regard to what any young person says on the subject of marriage. If they profess a disinclination for

it, I only set it down that they have not seen the right person.

- Jane Austen –

Love is the difficult realization that something other than oneself is real.

- Iris Murdoch -

쉬어 가기

Page 143: 계산모델: 오토마타와 형식언어(CH01-CH05)

143

Nondeterministic Automata

5.3 Nondeterministic Turing Machines (NTM)과Nondeterministic Linear Bounded Automata (NLBA)

NTM과 NLBAA도 다른 nondeterministic model과 같이 한 state에서

tape에 있는 문자를 읽고 여러 개의 transition을 동시에 취할 수 있다.

예를 들면, 아래의 state transition graph은 states 1, 2, 4에서

nondeterministic transition이 있음을 보여준다.

(a, b, R)

(a, b, R)

(a, c, R)

(a, b, R)

(a, b, R),

(a, b, L)1

2

3

4

5

Page 144: 계산모델: 오토마타와 형식언어(CH01-CH05)

144

Nondeterministic automata는 개념적인 model이며 hardware로 직접 구현할 수 있는 것이 아니다. Nondeterministic

transition이 일어날 때마다 동시에 여러 방향으로 계산이 진행하게 된다. 아래 그림이 예시하는 것과 같이, 이러한

nondeterministic transition이 있을 때마다, automaton이 여러 개의 automata로 분화되어 독립적으로 작동한다고

생각하면 이해하는데 도움이 될 수 있다.

Rumination: Nondeterninistic Computing

Nondeterministic Automata

(p, a) = {q, r)

p

a b

r

a b

q

a b

M

M1 M2

Page 145: 계산모델: 오토마타와 형식언어(CH01-CH05)

145

이렇게 nondeterministic automata는 병렬 컴퓨터와 같이 동시에 여러 경로를 통하여 답을 찾는다. 그러나 병렬

컴퓨터에서는 컴퓨터 자신이 병렬계산 결과를 최종적으로 종합 분석하여 하나의 결과를 주는 반면, nondeterministic

automata 경우는 이 automata를 쓰는 우리가 transition function 에 의한 가능한 모든 계산 경로를 검토한 후 결론을

내려야 한다. 다시 말하면, automata 자신이 input string를 accept 할 것인지를 우리에게 알려주지 않는다.

일반적으로 임의의 deterministic automaton M이 주어졌을 때, M이 인식하는 언어 L(M)을 알아 내는 것은 쉬운 일이

아니다. Nondeterministic automata일 경우는 더욱 어려운 문제이다. 우리는 후에 가장 간단한 automata인 FA의 경우,

인식하는 언어를 체계적으로 찾는 방법을 배울 것이다.

NPDA, NLBA 및 NTM은 주로 차원 높은 이론 분야 (특히 computational complexity)에서 다루어지는 모델이므로,

이 교재에서는 더 이상 다루지 않기로 한다. 대신 우리가 공부한 비결정성이 알고리즘에 어떻게 적용되는지를

알아보고 이 장을 끝내기로 한다.

Nondeterministic AutomataRumination: Nondeterministic Computing

Actual Signs

In a non-smoking area: “If we see you smoking, we will assume you are on fire and take appropriate action.”

In the front yard of a funeral home: “Drive carefully. We‟ll wait.”

On a maternity room door: “Push, Push, Push.”

On an optometrist’s office: “If you don‟t see what you‟re looking for, you‟ve come to the right place.”

On a butcher’s window: “Let me meat your needs.”

- Anonymous -

쉬어 가기

Page 146: 계산모델: 오토마타와 형식언어(CH01-CH05)

146

4.4 Nondeterministic Algorithms

.

. x = nondet_choose (q, r) ;

.

.

Nondeterministic automata는 확률적으로 state transition이 일어나는

probabilistic machine과 다르다. Transition (p, a) = {q, r}는 state p

상에서 input symbol a를 읽으면, 반드시 state q와 r로 state transition이

일어난다.

Automata에 적용하는 이러한 nondeterministic 개념을 algorithm에

적용하여 nondeterministic transition 대신 “nondeterministic quess” 또는

“nondeterministic choose”라는 용어를 쓴다. 유한한 크기의 집합 S에

대하여, nondet_choose(S)라고 하면, S에 있는 요소를 nondeterministic

하게 선택한다는 뜻이다. 한 알고리즘에 아래와 같은 assignment

statement (할당문)가 있다 하자.

Nondeterministic Automata

Page 147: 계산모델: 오토마타와 형식언어(CH01-CH05)

147

.

.x = nondet_choose (q, r) ;

.

...

x = nondet_choose (q, r) ;{ compute with x = q )

.

.

.x = nondet_choose (q, r) ;

( compute with x = r ).

Nondeterministic Algorithms

이와 같은 기능으로 nondeterministic algorithm은 문제의 답

공간(solution space)을 동시에 여러 방향으로 탐색할 수 있다.

Nondeterministic automata와 같이 원하는 답을 주는 실행경로가

하나라도 있으면, 알고리즘은 답을 찾는 데 성공한 것이며, 그렇지

못하면, 실패했다고 한다.

이 명령이 실행되면, 알고리즘은 아래 그림과 같이 x 에 q의 값이

할당된 경우와 r의 값이 할당된 경우로 복제되어 독립적으로 진행된

다고 볼 수 있다.

Nondeterministic Automata

Page 148: 계산모델: 오토마타와 형식언어(CH01-CH05)

148

답을 얻는 데 걸리는 시간이 문제의 크기에 대하여

지수함수적으로 증가하는(exponential-time) 소위, 추적불능

( i n t r a c t a b l e ) 알고리즘만 알려진 문제들이 많다 . 만일

nondet_choose(..)를 실행하는데 상수 시간이 걸린다고 가정하면,

이러한 어려운 문제들을 단시간에 풀 수 있는 nondeterministic

algorithm을 쉽게 만들 수 있다. 예를 들어 다음과 같이 정의된

sum-of-subset 문제를 고려해 보자.

N 개의 정수를 가진 집합 S와 정수 M이 주어졌을 때, S의

부분집합중에 합이 M인 것이 있나?

예를 들어 S = {8, 21, 13, 20, 7, 11, 5}, M = 34라 한다면, 8 + 21 + 5 =

34이므로 답은 “예”이다. 이 문제의 답을 구하려면, 실제로 모든

부분집합을 다 조사해 보는 exponential-time 알고리즘 보다 빠른

알고리즘은 알려진 바 없다.

Nondeterministic Algorithms Nondeterministic Automata

Page 149: 계산모델: 오토마타와 형식언어(CH01-CH05)

149

// S is an integer array of size n.

Nondet-Sum-of-Subset (int S[ ], int n, int M) {

int i, sum = 0;

boolean selected;

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

selected = nondet_choose(true, false);

if (selected) sum = sum + S[i];

}

if (sum = = M) return “yes”;

else return “no”;

}

이 알고리즘에서 selected = nondet_choose(true, false)는 S 내의 각 요소

S[i]에 대하여 이를 선택할 때(true)와 선택하지 않을 때(false)를

nondeterministic 하게 고려하고 있다.

Nondeterministic Algorithms Nondeterministic Automata

이 문제는 nondet_choose(..) 명령을 이용하면 다음과 같이

linear-time (선형시간)에 풀 수 있는 알고리즘을 만들 수 있다.

Page 150: 계산모델: 오토마타와 형식언어(CH01-CH05)

150

0 1

0

0

0

00 0

1

1

1

11

000 001 010 011 100 101 110 111

11: true

0: false

따라서 이 알고리즘은 selected = nondet_choose(true, false)에 의하여

변수 selected에 true를 넣은 경우와 false를 넣는 두 경우를 동시에

실행한 후 독립적으로 진행한다. False를 선택한 경우를 0, true를

선택한 경우를 1이라 하자. 아래 그림은 n = 3일 때, algorithm의 for-

문에 의하여 8개의 모든 부분집합을 선택할 수 있음을 보여준다. 예를

들면, leaf node 101은 집합 S의 첫째와 셋째 요소를 선택한 경우이다.

Nondeterministic Algorithms Nondeterministic Automata

(a) nondet_choose를 3번 이행한 결과

Page 151: 계산모델: 오토마타와 형식언어(CH01-CH05)

151

5.5 NFA 와 -transitions

a

bq1 q2

(a) (b)

a

bq1 q2

Nondeterministic Automata

우리가 공부한 FA는, DFA이든 NFA이든, 매 step 입력 tape를 읽는다.

이 절에서는 앞서 공부한 NPDA와 같이 input tape를 읽지 않는

transition을 할 수 있는 FA를 공부한다.

아래 그림 (a)와 같은 FA 상의 transition를 고려해 보자. 현재의 state가

q1일 때, 입력이 a 이면 q1으로, 입력이 b이면 q2로 transition이 일어나며,

입력이 없을 때, 즉 읽지 않았을 때는 현재의 state q1에 머물러 있다는

뜻이다. 기호 을 입력이 없음 (즉, null input)을 뜻한다 하자. 이 null

input를 드러내 보이면, 그림(a)는 그림 (b)와 같다.

Page 152: 계산모델: 오토마타와 형식언어(CH01-CH05)

152

만일 그림 (c )와 같이 두 state q1과 q2 사이에 -transition (즉, 에 의한

transition)이 있다고 하자. (입력이 없는데 transition이 „자발적으로‟

발생했다는 뜻이다.) State q1에서 에 의하여 두 개의 서로 다른 state로

가는 transition이 있으므로 (즉 (q1, ) = {q1, q2}) 이 FA는 NFA라 할 수

있다. 이렇게 다른 state 사에 -transition을 하는 NFA는 이미 공부한

NFA와 같이 우리의 직관을 벗어난 model이지만, DFA를 설계하거나

Internet 검색과 같은 응용 프로그램을 개발하는데 매우 유용한

tool이다.

a

bq1 q2

(a) (b)

a

bq1 q2

(c)

a

q1 q2

NFA 와 -transitionsNondeterministic Automata

Page 153: 계산모델: 오토마타와 형식언어(CH01-CH05)

153

FA 상의 -transition은 다른 nondeterministic transition과 같이 DFA를

설계하는 과정에서 도입된 것으로 -transition을 가진 FA의 언어나 그

특성을 밝히는데 장애가 된다. 우리는 이 절에서, 아래 그림이 예시하는

것과 같이, NFA 상의 -transition을 (인식하는 언어에 영향을 주지 않고)

모두 제거하는 방법을 배운다.

5.6 FA의 -transitions 제거하기

Nondeterministic Automata

(a) -transitions 이 있는 FA (b) -transitions 을 제거한 FA

a

q2q0

b

start

a

starta, b

q2q0

b

Page 154: 계산모델: 오토마타와 형식언어(CH01-CH05)

154

FA 상에 있는 - t rans i t ion 들을 제거하는 방법을 이해하기

위하여 state transition function 의 정의를 다음과 같이 확장하여 쓰기로

하자. 아래 그림이 예시한 것과 같이, state 집합 A와, 문자열 x가

주어졌을 때, (A, x)를 A에 있는 각 state에서 시작하여 입력 x를 읽고

최종적으로 도달할 수 있는 state의 집합이라 하자.

FA의 -transitions 제거하기Nondeterministic Automata

2 3

a, b

a b a

b

41

starta

({1, 3}, ab) = {1, 2, 3}.

Page 155: 계산모델: 오토마타와 형식언어(CH01-CH05)

155

Null 문자열 에 대하여 = 이므로, *= 이고, 임의의 기호 a에

대하여, a = a이므로, a = *a*와 같이 쓸 수 있음을 기억해 두자.

FA의 -transitions 제거하기Nondeterministic Automata

a

q1q0

b

start

예 1. NFA 상의 -transition을 제거하는 방법은 간단한 예로 쉽게 이해할

수 있다. 아래 그림과 같이 -transition을 가진 NFA M이 주어졌다 하자.

이로부터 -transition 없이 같은 언어를 인식하는NFA M을 만든다.

우선 각 state qi에서 input symbol t {a, b}가 입력으로 주어졌을 때

transition 하여 갈 수 있는 state의 집합을 구한다. 이 집합이 구하려는

NFA M‟의 '(qi, t)의 값이 된다. 이 값은 M 상에서 (qi, *t* )를 구하여

얻는다.

Page 156: 계산모델: 오토마타와 형식언어(CH01-CH05)

156

FA의 -transitions 제거하기 Nondeterministic Automata

'(q0, a) = (q0, *a* ) = (( q0,

* ), a* ) =

({q0, q1}, a* ) = ( ( {q0, q1}, a), * ) =

( {q0}, * ) = { q0, q1 }

a

q1q0

b

start

(a) M

'(q0, b) = (q0, *b* ) = (( q0,

* ), b* ) =

({q0, q1}, b* ) = ( ( {q0, q1}, b), * ) =

( {q1}, * ) = { q1 }

q0start

a

a

(b) M'

, b

A

N

I

q1

Page 157: 계산모델: 오토마타와 형식언어(CH01-CH05)

157

FA의 -transitions 제거하기 Nondeterministic Automata

a

q1q0

b

start

(a) M

'(q1, a) = (q1, *a* ) = (( q1,

* ), a* ) =

({q1}, a* ) = ( ({q1}, a), * ) = ( {}, * ) = {} =

'(q1, b) = (q1, *b* ) = (( q1,

* ), b* ) =

({q1}, b* ) = ( ( {q1}, b), * ) = ( {q1}, * ) = { q1 }

이제 마지막 절차로 예와 같이 -transition 만으로 start state q0에서

accepting state에 도달할 수 있으면, q0를 accepting state로 정한다.

(c) M'

q1start

a

a , b

b

q0

A

N

I

q0start

a

a, b

(b)

q1

b

Page 158: 계산모델: 오토마타와 형식언어(CH01-CH05)

158

'(q0, a) = (q0, *a* ) = (( q0,

* ), a* ) =

({ q0, q1, q2 }, a* ) = ( ( q0, q1, q2}, a), * ) =

( q0, * ) = { q0, q1, q2 }.

a

q1q2

b

q0

c

start

FA의 -transitions 제거하기 Nondeterministic Automata

a

q1q2q0start

a

a

(a) M

(b) M

예 2.

Page 159: 계산모델: 오토마타와 형식언어(CH01-CH05)

159

FA의 -transitions 제거하기 Nondeterministic Automata

같은 방법으로 state q0 상에서 b, c에 대한 transition을 구하면,

다음과 같은 결과를 얻는다.

a

q1q2q0start

a, b

a, b, c(b) M

a

q1q2

b

q0

c

start

(a) M

'(q0, b) = (q0, *b* ) = {q1, q2 }

'(q0, c) = (q0, *c* ) ={ q2 }

이를 transition graph로 옮기면 다음과 같다.

Page 160: 계산모델: 오토마타와 형식언어(CH01-CH05)

160

a

q1q2

b

q0

c

start

FA의 -transitions 제거하기Nondeterministic Automata

State q1과 q2에 대하여도 같은 방법으로 '을 구하면 다음과 같다.

'(q1, a) = Ø , '(q1, b) = { q1, q2 }, '(q1, c) = { q2 },

'(q2, a) = Ø , '(q2, b) = Ø , '(q2, c) = { q2 }.

a

q1 q2

b

a,bq0

b,c

c

a,b,c

start

(b) M(a) M

이를 transition graph에 옮기고, q0에서 -transition 만으로 accepting

state에 도달할 수 있으므로, q0을 accepting state로 만들면, 아래 그림

(b)와 같이 -transition이 제거된 FA M을 얻는다 .

Page 161: 계산모델: 오토마타와 형식언어(CH01-CH05)

161

5.1 아래의 NFA (a)에 다음 각 string을 입력으로 주었을 때, (i) state transition sequence tree 를 그려 보이고, (ii) 이

tree를 근거로 NFA가 주어진 input string을 accept 하는지를 판단하라.

(a) aaabaa (b) aabaa

5.2 위에 있는 NFA (b)가 인식하는 언어는?

5.3 (a) 언어 {aaxaa | x {a, b, c}+ }를 인식하는 NFA의 state transition graph을 설계하여 보이라. Graph의 edge 수는

6보다 크지 않아야 한다. (단, 관례에 따라 나타내지 않는 dead state로 가는 transition edge는 고려하지 않는다.)

(b) 문제 (a)에 주어진 언어를 인식하는 DFA의 state transition graph를 설계하여 보이라.

5.4 다음 각 언어를 인식하는 PDA (NPDA와 DPDA 중에 가능한 모델)의 state transition graph을 그려 보이고, 그것이

어떻게 작동하는지 간단히 설명하라.

(a) L1 = {xyz | x, y, z {a, b}+, and y = zR } (b) L2 = {xyz | x, y, z {a, b}+, and x = yR }

연습문제 Nondeterministic Automata

a

b

a

a a

a, b

b

b

start

a

aa

a a

a

startb

(b)(a)

Page 162: 계산모델: 오토마타와 형식언어(CH01-CH05)

162

5.5 교과서의 5.6절에서 제시한 방법을 이용하여 다음 NFA 상의 -transition을 모두 제거하라. ( -transition을

제거한 결과 state의 수와 인식하는 언어는 변하지 않아야 한다. ) 답을 얻기까지의 절차도 밝히라.

5

4

1

3

start

a,bb

a

b

a

b

a,b

2

연습문제 Nondeterministic Automata

Page 163: 계산모델: 오토마타와 형식언어(CH01-CH05)

163

st

4

83

5

10

69

71

2

5.6 Directed graph G 상에서 모든 node를 정확히 한 번씩만 방문하며 주어진 한 node s에서 시작하여 다른 node t에

이르는 경로를 Hamiltonian path라 한다. 예를 들면, 아래의 directed graph에서 node 4에서 node 7에 이르는 Hamiltonian

path는 4 2 1 8 9 10 6 5 3 7 이다. 임의의 graph G와 두 node s, t가 주어졌을 때, s에서

시작하여 t에 이르는 Hamiltonian path를 구하는 nondeterministic algorithm을 만들어 보이라. Algorithm의 시간복잡도는

polynomial time (즉 O(nk), k는 상수)을 넘지 않아야 한다. (이 문제를 풀기 전에 5.4절의 sum-of-subset를 구하는

algorithm을 복습하자. 이 문제에 대한 polynomial time algorithm은 알려진 바 없다.)

연습문제 Nondeterministic Automata