Professional Documents
Culture Documents
계산모델: 오토마타와 형식언어 (CH01-CH05)
계산모델: 오토마타와 형식언어 (CH01-CH05)
계산모델: 오토마타와 형식언어 (CH01-CH05)
준비 (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
1
준비
1. 준비 (Preliminaries)
이 공학 분야에 연구하는 사람들이 하는 중요한 일은 어떤 사물이나 현상에 관한 중요한 요소들을 추려내어
추상적인 모델이나 이론을 만들어내는 작업이다. 이때 „무엇을 어떻게 쓸까?‟라는 가장 기본적이고 중요한
표현상의 문제를 해결하려고 적절한 기호를 도입한다. 이는 사람들이 의사소통을 목적으로 문자를 쓰는 것과 같다.
이 장의 앞부분은 이 분야에서 흔히 쓰는 전통적인 기호와 표기법을 간추려 소개한다.
이 과목을 성공적으로 배우려면 필수적으로 갖추어야 할 자질이 있는데, 그것은 바로 논리적 사고력이다. 이
교제는 가끔 정리(theorem) 또는 보조정리(lemma), 등의 제목으로 이론적인 결과를 증명 없이 제시하거나 증명의
윤곽만 제시한다. 이는 대부분 전통적인 증명법 (예를 들면, 귀납법에 의한 증명)을 이용하여 증명할 수 있거나
증명이 간단할 경우이다. 그러나 이는 증명이 중요하지 않다는 뜻은 결코 아니다. 많은 학생이 증명을 해본 경험이
없어서 소위 “증명 공포증(proof-phobia)”에 사로잡혀 증명해야 할 문제를 보면 아예 포기하는 경향이 있다. 이러한
학생들을 위하여 이 장은 널리 쓰이는 증명법을 모아 소개한다. 학생은 이 장의 내용을 배우고 나면 본론에서
이론을 전개하면서 생략하거나 간추린 증명을 완성할 수 있는 자신이 생길 것이다.
2
준비
1.1 표기 관례 (Notational Convention)
이 교재는, 달리 밝히지 않으면, 다음과 같은 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.
3
표기법 준비
4
표기법 준비
5
집합연산 준비
7
집합연산 준비
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 -
8
준비
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 q pq p q pq
T T T T T T p p
T F F T F T T F
F T F F T T F T
F F F F F F
9
명제 준비
p q p → q p q
T T T T
T F F F
F T T T
F F T T
11
명제 준비
p q p → q p q
T T T T
T F F F
F T T T
F F T T
12
명제 준비
p q p → q p q q → p
T T T T T
T F F F F
F T T T T
F F T T T
14
준비
15
준비
증명법
16
증명법 준비
17
준비
증명법
18
증명법 준비
19
준비
증명법
21
증명법 준비
Love 쉬어 가기
Never pretend to a love which you do not actually feel, for love is not ours to command. - Alan Watts –
23
증명법 준비
n
예: n 0 [ i=0 i = n(n+1) /2 ]임을 증명하라.
0
증명: (1) Base (n = 0 일 때): 등식의 좌측: ( i=0 i) = 0. 우측: n(n+1)/ 2 = 0.
따라서 등식이 성립한다.
m
(2) Hypothesis: m < n [ i=0 i = m(m + 1) / 2]라고 가정하자.
n
(3) Induction: n = m + 1에 대하여, i=0 i = n(n + 1) / 2임을 증명한다.
n m+1 m
등식의 좌측은 i=0 i = i=0 i = i=0 i + n이며, 가정에 의하여
m
i=0 i = m (m + 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) 난에서 예를 더 들고 이
증명법의 깊은 의미를 되새겨보기로 한다.
24
준비
증명법
25
준비
증명법
27
증명법 준비
본론에서 언급했다시피 조건연결자(, 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)
이 표현을 풀이하면 다음과 같다. “내가 TV를 보면, 우리 축구팀이 이기거나, 우리 축구팀이 이기면, 내가 TV를 본다.”
p q p → q p q
T T T T
T F F F
F T T T
F F T T
30
준비
Rumination 2. Proof by Induction
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번 계단으로 올라설 수 있어야 한다.
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을 대응시켜 놓은 것이다.
31
준비
Rumination 2: Proof by Induction
n A
Prove that n 0 [ i=0 i = n(n+1) /2 ]
n
N
I
0 + 1 + 2 + . . . .. . . + n' + (n'+1)
Proof by induction 기법을 이용하여 다음에 제시한 pigeonhole principle이 옳음을 증명하자.
1 n‟ n‟+1
2
.....
1 2 m
33
A 준비
되새김: Proof by Induction 에 대하여
n N
I
n ( 1) 개의 pigeonhole 과 m (> n) 개의
편지가 있을 때 PP 증명. (3) Induction: n = n‟+1개의
pigeonhole과 m > n개의
편지 가 있을 경우 PP 증명.
n‟
(2) Hypothesis: 모든 정수 n‟ < n 개의
Pigeonhole 과 m > n‟ 개의 편지가 있을 때
3 PP가 옳다고 하자.
2
1
(1) Base: pigeonhole 수 n = 1, m n일 때: PP 증명.
0
1 n‟ n‟+1
2
(3) Induction:
.....
1 2 m
m > n‟+1
34
준비
연습문제
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) aaaabbbb (2) aaaa (3) aaaacccaaaa (4) bbbaaaa (5) abcccccba (6) aaaaab (7) abaaba
1.3 아래에 주어진 string의 집합에 대하여 다음 각 집합연산 결과를 되도록 간략한 set property 표기법으로 표현하라.
35
연습문제 준비
1.4 임의의 두 정수 a와 b에 대하여 다음 주장을 증명하라.
a = b if and only if a ≥ b and a b.
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개 있음을 보여준다.
6
1
2 7
경로 상의 node 8
5 2
1 2 2 1 2 1 2 2 1 2 1 1 4 1
2 9 3
다른 label을 가진 node를 연결한 7 개의 edge.
2
2
1
1.7 위의 문제에서 edge의 조건을 “서로 다른 label을 가진 node를 잇는 edge” 대신 “같은 label을 가진 node를
잇는 edge”로 바꾸어도 같은 주장(즉 “그러한 조건을 가진 edge의 수가 홀수이다.”)을 할 수 있나? 답을 증명하라.
36
연습문제 준비
1.8 우리는 본문에서 pigeonhole principle을 이용하여 다음의 주장이 옳다는 것을 증명하였다.
[ Node의 수가 n인 directed graph의 길이가 n보다 크거나 같은 모든 path(경로)는 항상 cycle (순환회로)을 포함한다. ]
아래 그림은 9개의 node를 갖는 directed graph 상에 길이가 9인 path를 보여준다. 여기서 우리는 같은 문제를 proof-by-
induction 기법으로 증명하려고 한다. 다음 질문에 답하라. (이 문제를 풀기 전에 proof-by-induction 기법과 적용 예를
복습하기 바란다. )
2 3,
1 8
6 9
4
37
연습문제 준비
아래 그림 (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이 존재한다고 할 수 있나?
38
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
39
2. 형식언어(Formal Languages)
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. (정보를 전달하려고 사용하는 신호와 기호 및 이들을 사
용하는 법칙에 관한 시스템을 말한다. )
41
형식언어
다음의 문자열 집합들은 위의 정의에 의하여 모두 언어라 할 수 있다. (집합 C는 C++ 언어, 집합 D는 한국어다.)
42
형식언어
2.1 Rule에 의한 언어 생성
다음과 같은 „봄-문법‟이라 이름한 간단한 rule을 가지고 이 rule이
정하는 자연어를 만들어보자.
봄-문법: <봄-문장> <봄-주어> <봄-술어>
<봄-주어> 새가 | 꽃이 | 싹이
<봄-술어> 노래한다. | 핀다. | 난다.
G S A # B
봄-문법: <봄-문장> <봄-주어> <봄-술어>
A a b c
<봄-주어> 새가 | 꽃이 | 싹이
B d e f
<봄-술어> 노래한다. | 핀다. | 난다.
G: S A#B
L(G) = { a#d, a#e, a#f, b#d,
A a|b|c
b#e, b#f, c#d, c#e, c#f }
B d|e|f
45
Rule에 의한 언어생성 형식언어
S dingdongA A dengS
A
S dingdongA dingdongdengS N
I
S dingdongA A deng
dingdongdengdingdongA
dingdongdengdingdongdeng
L = { (dingdongdeng)i | i 1 }
예 2. S aaS | aa
A
S aa S aaS S aa N
S aa S aaS aaaa I
S aaS S aaS S aa
S aaS aaaaS aaaaaa ..........
L = {a2i | i > 0}
47
Rule에 의한 언어생성 형식언어
예 3. S aSb | ab
S ab L = {aibi | i 1}
S ab
S aSb S ab
aSb aabb
A
S aSb S ab N
aaSbb aaabbb I
. . . . aaaabbbb
. . . . . . aaaaabbbbb
.......
48
Rule에 의한 언어생성 형식언어
예 4. S ACaB | a AD AC Ca aaC aE Ea
CB DB | E AE aD Da
Sa
S a A
S ACaB Ca aaC CB E N
ACaB AaaCB AaaE I
aE Ea aE Ea AE CB DB
AaEa AEaa aa AaaDB
aD Da aD Da AD AC Ca aaC
AaDaB ADaaB ACaaB AaaCaB
Ca aaC CB E aE Ea AE
AaaaaCB AaaaaE . . . . AEaaaa aaaa
49
Rule에 의한 언어생성 형식언어
예 4. S ACaB | a AD AC Ca aaC aE Ea
CB DB | E AE aD Da
50
Rule에 의한 언어생성 형식언어
예 4. S ACaB | a AD AC Ca aaC aE Ea
CB DB | E AE aD Da
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을 생성하는 과정을 보여준다.
쉬어 가기
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 –
51
Rule에 의한 언어생성 형식언어
예 4. S ACaB | a AD AC Ca aaC aE Ea
CB DB | E AE aD Da
Ca aaC CB E aE Ea . . . AE
AaaaaCB AaaaaE . . . . AEaaaa aaaa
A
aD Da . . . AD AC, N
CB DB Ca aaC . . .
... I
AaaaaDB . . . . AaaaaaaaaCB
CB E aE Ea . . . AE
AaaaaaaaaE . . . . AEaaaaaaaa aaaaaaaa
CB DB
AaaaaaaaaDB . . . . . L = { am | m = 2n, n 0 }
52
형식언어
53
Definition 형식언어
G = < VT , VN , P , S >
• VT : Terminal alphabet (단말 알파벳). 언어학자들은 이를 morphemes
(형태소)라고 하는데, 관례에 따라 소문자를 쓴다.
• VN : Nonterminal alphabet (비단말 알파벳). Variables, 또는 syntactic
categories 라고도 부르며, 관례에 따라 대문자를 쓴다.
• V = VT VN : Total alphabet (전 알파벳)
• S VN : Start symbol (시작문자)
• P : 유한개의 production rule set. 각 rule은 라 표기한다. 여기서
와 는 각각 다음 조건을 만족해야 한다.
V*VNV*, V*
54
Definition 형식언어
* w
w1 2
55
Definition 형식언어
L(G) = {aibici | i 1 }
58
형식언어
문법과 언어 예
L(G) = {0i1i | i 0 }
P = { S 0S | A A 1A | }
L(G) = { 0i1j | i, j 0 }
59
형식언어
위의 문법에서 rule (1), (2), (4)를 순서대로 적용하면 이 문법이 생성할 수 있는 유일한 terminal 문자열 abc를 얻을
수 있다. 그러나 다음과 같이 rule (1)을 적용한 다음 rule (3)을 적용하면, Abc를 얻고, 적용할 rule이 없다. 이 문자열은
nonterminal 기호 A가 있기 때문에 문법이 생성한 언어에 둘 수 없다. (정의에 의하여 terminal 기호 (소문자)로 된 문자
열만이 grammar가 생성한 언어에 속한다는 것을 기억하자.)
S ABC BC bc
S ABC Abc ??
60
Rumination: Grammars and Languages 형식언어
(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만 나타내고 다른 정보는 약하기로 한다.
61
Rumination: Grammars and Languages 형식언어
(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
A bBC A abBa A Ba
62
Rumination: Grammars and Languages 형식언어
(i) Grammar는 4-tuple G = < VT , VN , P , S >를 밝혀(specify) 정의한다. 이는 grammar를 표현하는데 필요하고
충분한 정보는 terminal alphabet, nonterminal alphabet, production rules 및 시작기호라는 뜻이다. 이들 가운데 어느 하나가
빠졌다면, 정상적인 grammar라 할 수 없다. 이렇게 어떤 model 또는 system을 정의하는 방법은 매우 보편적인
것으로, 컴퓨터 분야뿐 아니라 다른 분야에서도 널리 이용하는 방법이다. 일반적으로 어떤 시스템 (또는 model) S는
아래의 예와 같이 필요하고 충분한 정보가 무엇인지 나열한 다음, 이 정보를 구체적으로 밝히는 형식을 따라 정의한다.
다음에 공부할 주제인 오토마타도 같은 형식을 따른다.
(1) S = < 시스템을 정의하는데 필요하고 충분한 정보 I1, I2, . . ., Ik를 나열한다 >
(2) I1, I2, . . ., Ik가 구체적으로 무엇인지 밝힌다.
쉬어 가기
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 -
63
형식언어
연습문제
2.2 다음 각 grammar에 의하여 발생하는 언어를 가능한 간략하게 표현하라. 관례대로 S는 시작기호, 대문자는
nonterminal 기호, 소문자는 terminal 기호이다.
64
형식언어
(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를 갖고 있어야 한다. }
2.4 다음 각 언어를 발생하는 context-free (type 2) grammar를 만들어 보이고, grammar가 어떻게 주어진
언어를 생성하는지 간단히 설명하라.
2.5 다음 각 언어를 발생하는 grammar를 만들어 보이고, grammar가 어떻게 주어진 언어를 생성하는지 간략하게
설명하라. Grammar의 종류에는 제한이 없다. (Hint: 교과서에 있는 예를 이해하면 아이디어를 얻을 수 있다.)
(a) L1 = {a2nbnc2ndm | n,m 1 } (b) L2 = {anbncndn | n 1 }
65
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
66
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
분야에서 잘 알려진 모델이다.
68
L-systems 기타 언어 모델
L(G) = { hi( ) | i 0}
69
기타 언어 모델
L-systems
70
기타 언어 모델
L-system
[ ] [ ] [ [ ] [ ] ] [ ]
4 25 5 65 67
7
8
78 8 9[3] 99 9
9
1 9
23 9
224 9
. 9
. 9
9
2229[229[24]9[3]8765]9[229[3]8 2
765]9[228765]9[228765]9[2265] 2
2
9[225]9[24]9[3]8765
72
기타 언어 모델
3.2 Syntax Flow Graph
Syntax flow graph (syntax diagram이라고도 함)은 문법의 구조를 graph
형식으로 표시하여 시각적으로 문법을 쉽게 이해할 수 있도록 한 model이다.
아래에 든 예를 보면 Syntax flow graph를 이해하는데 충분하리라 생각한다.
S aS | A A bAc | B B d | f |
S A
a S B d
B
b A c f
A
73
Syntax Flow Graph 기타 언어 모델
예 1. C 언어 의 변수 (identifier)
Flow Graph Rule
<letter> <digit>
<letter> a | b | … | z
a 0
<digit> 0 | 1 | 2 . . . | 9
b 1
. .
. .
z 9
<identifier> <letter> |
<identifier><letter> |
<identifier><digit>
<identifier> digit
letter
letter
74
Syntax Flow Graph 기타 언어 모델
예 2. C 언어의 정수 와 실수
<unsigned integer>
digit
<unsigned integer> <digit> |
<unsigned integer><digit>
<unsigned double> +
75
기타 언어 모델
- Anonymous -
76
기타 언어 모델
77
Regular Expression 기타 언어 모델
78
Regular Expression 기타 언어 모델
79
Regular Expression 기타 언어 모델
• 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
80
기타 언어 모델
Rumination: Regular Expression
(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 + // 의문부호(?)는 바로 앞 요소를 선택하거나 안 할 수도 있음을 뜻한다.
(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*)*
81
연습문제
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 |
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를 어떻게 생성할 수 있는지 보이라.
<expression> <term>
<digit>
0
term factor
+ - * / 1
term factor
<factor>
<variable> <letter>
variable letter
a
letter
( expression ) digit b
82
연습문제
83
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
84
4. Automata
우리는 지금까지 문자열의 집합, 즉 언어를 위한 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가 무엇인지 배울 것이다.
86
Automata
a b a b b read/write tape
Finite State
control
87
DTM Automata
p q p
88
DTM Automata
a b a .. c b a .. c b a ..
p q p
다음
상태 q
(a, c, R)
(p, a) = (q, c, R)
( 읽은 문자, 바뀐 문자, 이동 방향 ) (b, b, L) (q, b) = (p, b, L)
현재 p
상태
(b)
(a)
89
Automata
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이 있는지 확인하는 것이다.
0 0 0 1 1 1
90
DTM 설계: 예 Automata
0 0 0 1 1 1
q0
91
DTM 설계: 예 Automata
(a) X 0 0 1 1 1 초기 상태 q 0 에서 0을 읽고
q0 X로 바꾼 후 상태 q1에서 우로
q1
이동. 1을 읽고 Y로 바꾼 후
(b) X 0 0 Y 1 1 상태 q2로 x를 찾아 좌로 이동.
A
q2 N
I
(c) X 0 0 Y 1 1 X를 읽고 상태 q3로 바꿔 한 step
뒤로 물러선다. 이곳에 0이 있으
q2 q3 면, 0을 X로 바꾼 후, 상태 q1로
우측으로 1을 찾아 이동한다.
(d) X X 0 Y 1 1 1이 나오면, 1을 Y로 바꾸고 (b),
(c), (d) 절차를 반복한다.
q1
(b) X X 0 Y Y 1
q2
92
DTM 설계: 예 A Automata
N
I
(b) X X 0 Y Y 1 (e) X X X Y Y Y
q2 q2
(c) X X 0 Y Y 1 (f) X X X Y Y Y
q2 q3 q2
q3 q4 q5
(d) X X X Y Y 1
(f)는 마무리 단계이다. 상태 q3
q1
에서 Y를 읽으면, 0이 없다는
뜻이므로, q 4 상태로 우측으로
가며 1이 없는지 확인한다.
이 과정에서 1이 없으면 인식
(accept)상태 q5에서 끝나다.
93
DTM 설계: 예 Automata
(X,X,R)
(0,X,R) (0,X,R)
q0 q3
start
(Y,Y,R) (Y,Y,R)
q4 q5
(B,B,N)
94
DTM 설계: 예 Automata
(0,0,L)
(0,0,R) (Y,Y,L)
(Y,Y,R)
(1,Y,L)
q2
q1
(X,X,R)
(0,X,R) (0,X,R)
q0 q3
start
(Y,Y,R) (Y,Y,R)
q4 q5
(B,B,N)
95
DTM 설계: 예 Automata
0 1 X Y B
q0 (q1, X, R)
q1 (q1, 0, R) (q2, Y, L) (q1, Y, R)
q2 (q2, 0, L) (q3, X, R) (q , Y, L)
2
q3 (q1, X, R) (q4, Y, R)
q4 (q4, Y, R) (q5, B, N)
q5
96
DTM 설계: 예 Automata
97
Automata
98
Automata
정의: DTM
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 -
99
Definition: DTM Automata
(0,0,R) (0,0,L)
(Y,Y,R) (Y,Y,L)
(1,Y,L)
q2
q1
(0,X,R)
(X,X,R)
(0,X,R)
q0 q3 굵은 원은 accepting
start state를 표시.
(Y,Y,R) (Y,Y,R)
q4 q5
(B,B,N)
100
Automata
Rumination: DTM
(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에도 적용한다.
101
Automata
M = (Q, , , , q0, [, ], F) [ a b a a b ]
q0
102
DLBA Automata
103
Automata
Z0
104
Automata
DPDA
다음
상태 q
(a, X/YX)
( 읽은 문자, stack 상단 문자 / 바뀐 stack 상단 내용)
현재 p
상태
p q r q
… Z … X Y … X V … X
( p , a, Z ) = ( q,YX ) ( q, , Y ) = ( r, V ) ( r, b, V ) = ( q, )
(b, V/)
106
DPDA Automata
107
DPDA Automata
s (, B/aB)
t s t
(A, Z0/AaBZ0) (A, Z0/BZ0) (, a/Aa)
(a) (b)
108
DPDA Automata
a b b a a a b b a a
q0 f
Z0 Z0 X
A
N
DPDA M이 인식하는 언어 L(M)은 다음과 같이 정의한다. I
L(M) = { x | M accepts x }
109
DPDA Automata
a a a b b b
(a, a/aa)
(b, a/) (, Z0/Z0)
q0
Z0 (b, a/)
(a, Z0/aZ0)
start
110
DPDA Automata
(a, a/aa)
(a, a/aa) (b, a/) (b, Z0/Z0)
(b, a/) (, Z0/Z0)
(b, a/)
(b, a/) (a, Z0/aZ0)
(a, Z0/aZ0)
start start
(a) M1: L(M1) = {aibi | i > 0 } (b) M2: L(M2) = {aibj | j > i > 0 }
111
Automata
DPDA
(a, a/aa)
(a, Z0/aZ0)
(b, a/) (b, Z0/Z0) (b, a/)
(a, a/aa)
112
Automata
DPDA
(, b/)
(, a/) (c, a/)
(c, b/)
(a, a/aa) (, Z0/ Z0)
(b, a/ba)
(d, b/)
*
(d) M4: L(M4) = {aibkci | k, i > 0 } {aibkdk | k, i > 0 }
113
Automata
start
1
115
Automata
DFA
0
1
0
0 1 2
0
1
0
start
1
1
116
Automata
Rumination: DPDA 정의
이 장을 마치기 전에 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이면, r
(c) stack에 B를 push하고 상태 q로 들어간다. (, A/ CA)
반면, transition (p, , A) = (r, CA)은 다음과 같이 동작한다는 뜻이다:
(a) 상태 p 상에서 stack 상단의 기호를 읽고 그것이 A이면 p q
(a, A/ BA)
(b) 입력테이프를 읽지 않고,
(c) stack에 C를 push하고 상태 r로 들어간다.
117
Rumination: DPDA 정의 Automata
118
Rumination: DPDA 정의 Automata
위에서 제기한 문제를 해결하려고 우리는 가끔 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 a a a a (a, Z0/Z0)
(a)
q0
(a, Z0/Z0)
(a, Z0/Z0)
Z0
( ; , Z0/Z0)
(b)
119
Automata
되새김: DPDA 정의
이렇게 하면, DPDA를 사용하는 번거로움은 덜었지만, 그 짐이 input string을 작성하는 사람에게 넘어간 셈이 된다.
그렇다면, input string을 작성하는, 소위 프로그래머에게는 불평이 없을까? End-of-string marker를 잘못 쓴다면 어떤
문제가 생길까? Pascal, C 언어, 등이 marker („;‟)를 쓰는 경우이며, FORTRAN은 marker 없이 쓰는 프로그래밍 언어이다.
이 과목에서는 end-of-string marker가 없는 언어를 주로 다루기로 한다.
(a, Z0/Z0)
(a, Z0/Z0) (a, Z0/Z0)
(a, Z0/Z0)
( ; , Z0/Z0)
(a) (b)
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에 있을 수 있다.
120
연습문제
Automata
4.1 Binary number x를 ( x {0, 1}+) input로 주었을 때, 그 값을 1 증가시킨 후 accepting 상태에서 정지하는 DTM의
state transition graph를 만들어 보이라. (DTM의 tape head는 왼쪽 끝에 있는 bit를 읽기 시작한다는 것을 기억하자.)
4.2 다음 DTM은 무엇을 하는지 각 state 상에서 하는 일을 언급하며 자세히 설명하시오. Input tape에는 { 0, 1 }+
내에 있는 임의의 string이 주어졌다고 가정한다. (간단한 input string을 놓고 TM이 하는 일을 추적하여 보면
답을 쉽게 얻을 수 있다.)
(0,0,L)
(1,1,R)
(0,0,R)
(0,B,L) 4 (B,0,N)
(1,1,R)
(1,0,L) (0,0,R)
start 0
(B,B,L)
(1,B,L) 5 (B,1,N)
(1,1,L)
121
연습문제 Automata
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) – (c)의 언어는 모두 semicolon(;)으로 끝난다. Transition graph을 만든 후 간단한 input string을 적용하여 옳게
작동하는지 확인하자.
122
연습문제 Automata
4.6 다음 각 CFG가 생성하는 언어를 인식하는 DPDA의 state transition graph을 설계하여 보이라.
(a) G1: S aSbb | abb (b) G2: S aSbb | (c ) G3: S aSbb | ccc
123
연습문제 Automata
다음 두 문제는 DFA model을 응용하는 문제로 Hopcropt와 Ullman의 저서 “Introduction to Automata Theory,
Languages, and Automata”에 있는 문제를 일부 수정한 것이다.
x1
x2
C D
124
연습문제 Automata
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이라 가정하라.
y1
2
neuron net
output
1 y2 1
input
y3
1
125
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
126
5. Nondeterministic Automata
지금까지 우리가 배운 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를 공부하기로 한다.
128
Nondeterministic Automata
a,b b q0 b
b q1
b q0 b q1 b
q0 a a
q0 q1 X
a a
a q2 q1 q2
b q0 b
a,b
b q1
a b q0 b q1 b
q0 a
b q0 b q1 b
X
a q2 q0 q1 X
131
Nondeterministic Automata
NFA
형 식 적 으 로 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이 발생할 수 있다는
뜻이다.
132
NFA Nondeterministic Automata
133
Nondeterministic Automata
Rumination: NFA
일반적으로 한 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가 인식할
수 있는 언어에 차이가 있는지 여부는 아직도 미해결 문제로 남아 있다.
134
NFA Nondeterministic Automata
a, b a
L = {xaa | x {a, b}*} a
2
1 3
135
NFA 설계: 예 Nondeterministic Automata
b
a, b a b
a
a, b a, b
136
Nondeterministic Automata
쉬어 가기
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 -
137
Nondeterministic Automata
NPDA 설계
예 1. 아래 두 graph M1, M2는 각각 다음 두 언어를 인식하는 DPDA이다.
L1 = {aibjck| i, j, k > 0, i = j } L2 = {aibjck| i, j, k > 0, j = k }
(a, a/ aa)
(b, a/) (b, a/)
(a, Z0/aZ0) (c, Z0/ Z0)
start (c, Z0/ Z0)
(a) M1
139
Nondeterministic Automata
NPDA 설계
140
NPDA 설계 Nondeterministic Automata
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 -
142
Nondeterministic Automata
143
Nondeterministic Automata
Rumination: Nondeterninistic Computing
Nondeterministic automata는 개념적인 model이며 hardware로 직접 구현할 수 있는 것이 아니다. Nondeterministic
transition이 일어날 때마다 동시에 여러 방향으로 계산이 진행하게 된다. 아래 그림이 예시하는 것과 같이, 이러한
nondeterministic transition이 있을 때마다, automaton이 여러 개의 automata로 분화되어 독립적으로 작동한다고
생각하면 이해하는데 도움이 될 수 있다.
a b
M p
(p, a) = {q, r)
a b a b
q r
M1 M2
144
Rumination: Nondeterministic Computing Nondeterministic Automata
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 -
145
Nondeterministic Automata
4.4 Nondeterministic Algorithms
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 (할당문)가 있다 하자.
.
.
x = nondet_choose (q, r) ;
.
.
146
Nondeterministic Algorithms Nondeterministic Automata
N 개의 정수를 가진 집합 S와 정수 M이 주어졌을 때, S의
부분집합 중에 합이 M인 것이 있나?
0 1
0 1 0 1
0 1 1: true
1 0 1 0 1 0 0: false
000 001 010 011 100 101 110 111
150
Nondeterministic Automata
151
Nondeterministic Automata
NFA 와 -transitions
a a
a
b b
q1 q2
q1 q2 q1 q2
(a) (b) (c)
152
Nondeterministic Automata
a b
a b
a, b
start q0
start q0 q2 q2
153
Nondeterministic Automata
FA의 -transitions 제거하기
FA 상 에 있 는 - t r a n s i t i o n 들 을 제 거 하 는 방 법 을 이 해 하 기
위하여 state transition function 의 정의를 다음과 같이 확장하여 쓰기로
하자. 아래 그림이 예시한 것과 같이, state 집합 A와, 문자열 x가
주어졌을 때, (A, x)를 A에 있는 각 state에서 시작하여 입력 x를 읽고
최종적으로 도달할 수 있는 state의 집합이라 하자.
a b a
1 2 3 4
start a
a, b
b
154
Nondeterministic Automata
FA의 -transitions 제거하기
a b
start q0 q1
a b a
a, b
start q0 q1 start q0 q1
A
(a) M (b) M' N
I
'(q0, a) = (q0, *a* ) = (( q0, * ), a* ) =
({q0, q1}, a* ) = ( ( {q0, q1}, a), * ) =
( {q0}, * ) = { q0, q1 }
156
FA의 -transitions 제거하기 Nondeterministic Automata
a b a b
a b
a, b a, b
start q0 q1 start q0 q1
start q0 q1
A
(a) M (b) (c) M' N
I
'(q1, a) = (q1, *a* ) = (( q1, * ), a* ) =
({q1}, a* ) = ( ({q1}, a), * ) = ( {}, * ) = {} =
157
FA의 -transitions 제거하기 Nondeterministic Automata
a b c
예 2.
start q0 q1 q2
(a) M
a
(b) M
158
FA의 -transitions 제거하기 Nondeterministic Automata
a b c
start q0 q1 q2
(a) M
같은 방법으로 state q0 상에서 b, c에 대한 transition을 구하면,
다음과 같은 결과를 얻는다.
'(q0, b) = (q0, *b* ) = {q1, q2 }
'(q0, c) = (q0, *c* ) ={ q2 }
이를 transition graph로 옮기면 다음과 같다.
a
a, b q2
start 0q q1
a, b, c
(b) M
159
Nondeterministic Automata
FA의 -transitions 제거하기
a b c
a b c
a,b b,c
q2 start q0 q1 q2
start q0 q1
a,b,c
(a) M (b) M
160
연습문제 Nondeterministic Automata
5.1 아래의 NFA (a)에 다음 각 string을 입력으로 주었을 때, (i) state transition sequence tree 를 그려 보이고, (ii) 이
tree를 근거로 NFA가 주어진 input string을 accept 하는지를 판단하라.
(a) aaabaa (b) aabaa
a, b b a
a
a a
a
b
a a a a b
start
start
b a
(a) (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 }
161
연습문제 Nondeterministic Automata
5.5 교과서의 5.6절에서 제시한 방법을 이용하여 다음 NFA 상의 -transition을 모두 제거하라. ( -transition을
제거한 결과 state의 수와 인식하는 언어는 변하지 않아야 한다. ) 답을 얻기까지의 절차도 밝히라.
b
a
b 2
a,b 4
b
1
a
start 5
3
a,b
162
연습문제 Nondeterministic Automata
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은 알려진 바 없다.)
2
1 t
7
s
4
3 8
10
5
6 9
163