2012 SIGPL 겨울학교

Download Report

Transcript 2012 SIGPL 겨울학교

언어, 문법, 기계, 파서, 고쳐쓰기,
현대수학의 한계,
그리고 미래의 전산학
SIGPL 겨울학교
2012. 2. 3.
최광무
한국과학기술원 전산학과
차례
•
•
언어이론의 기초
Regular 언어(language)
•
Rewriting System 혹은 파서
– 한글 모아쓰기 기계(automata)
– Context-free 언어의 해석(parsing)
•
•
왼 파서(left parser) - 왼쪽 부터 유도하기(leftmost derivation)
–
위 아래(top-down) 파서
–
아래 위(bottom-up) 파서
오른 파서(right parser) - 오른쪽부터 유도하기를 거꾸로(rightmost derivation in reversed order)
– Deterministic parsing of CFG
•
•
왼 파서
오른 파서
Strong LL(k) 파서 ⊆ LL(k) 파서.
LR(k) 파서 ⊇ LALR(k) 파서 ⊇ SLR(k) 파서.
•
현대수학에서 계산(computable)에 관한 Turing-Church의 주장(Thesis)
•
현대수학의 비극
– TM
– μ-recursive 부분함수
Turing
Church
1930.
1934.
– Cantor’s diagonalization argument
•
uncountable, 실수(實數; real number)
•
Hilbert의 실패한 꿈
– Russell's 모순(Paradox)
– Gödel의 incompleteness theorem
1929.
1874; 1891.
1901; 1911.
1931.
– Halting 문제(problem)과 같은 문제들
•
유클리드 기하학 - 증명의 아름다움
피타고라스 – 무리수
미분이 이상하다?
미분을 완전히 그리고 적절히
정의하였는가?
끝내기 이야기
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
2/38
언어(Languages) – 소통수단
• 인문사회과학
– 철학, 역사, 사회학, 경제, 법률
– 모국어(자연언어)
• 애매(Ambiguous)하다
• 복잡하다
– 영어강의
• 예술
• ???
– 음악, 미술, 스포츠
– 연주, 형태, 행동
• 자연과학, 공학, 전산학
– 수학
• 엄밀 (Rigorous, Formal) 하다
• 간단하다
– 전산학
• 프로그래밍 언어
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
3/38
구문론(構文論; Syntax)
•
4개의 전문용어(terminology)
– 어휘(vocabulary, alphabet),
•
•
기본문자들의 집합
언어의 axiomS(atom)
•
어휘의 원소
•
•
문자(symbol)들이 줄 선(sequence) 것
문자열(수열)
•
문장(문자열)들의 집합
– 문자(symbol)
a ∈ Σ.
x ∈ Σ∗ .
– 문자열(string)
L ⊆ Σ∗ .
– 언어(language)
•
Σ
언어와 어휘, 문자열의 예
– 이진수
– 십진수
– 한글
Σ = {0, 1}
2자
Σ = {0, 1, 2, …, 9}
10자
Σ = {ㄱ, ㄴ, …, ㅎ, ㅏ, ㅑ, …, ㅣ} 24자
한글 모아쓰기 오토마타
Σ = {a, b, …, z}
한글 모아쓰기 기계
•
ㄱ ㅕㅇㅜㄹㅎㅏㄱㄱㅛ
•
Winter School
•
겨울학교
– 영어
– 컴퓨터
26자
Unicode
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
4/38
전문용어 4개+
•
ε
빈 문자열(empty string)
•
•
•
•
•
•
•
Σ0 = {ε}
Σ = Σ1 = {0, 1}
Σ2 = {00, 01, 10, 11}
…
∗
Σ𝑛 = {x∈{0, 1} | |x| = n}
…
Σ∗ = Σ0 ∪ Σ1 ∪ Σ2 ∪ …
– 산수에 +에서 0이나 ⅹ에서 1과 같은 항등원(identity)
Σ∗
• y¬∈L∈Σ∗
L
• x ∈L∈Σ∗
Σ† = Σ1 ∪ Σ2 ∪ Σ3 ∪ …
– 문자열의 universe(전 집합)
– Σ가 많이 있다.
∗
Σ
∗
Σ† = Σ / {ε}, Σ = Σ† ∪ {ε}.
•
4개의 전문용어
•
언어의 문장(statement)확인문제(membership problem)
– 문자(symbol)
– 문자열(string)
a∈Σ
x ∈ Σ∗
어휘(vocabulary)
언어(language)
• a∈Σ
Σ
L ⊆ Σ∗
– 문자열 x ∈ Σ∗ 가 문장(x ∈ L)인가, 아닌가(x ¬∈ L).
– 기계(automata)
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
5/38
문법(Grammar)
• 예 “x = 5”라는 문장에 필요한 문법규칙
– <문> → <좌> “=“ <우>
– <좌> → “x” | …
– <우> → “5” | …
• 문법 G = (N, Σ, P, S)의 요소 4개
– N: 넌 터미널(Nonterminal symbolS), 단 V = N ∪ Σ.
• N = {<문>, <좌>, <우>}
– Σ: 터미널(Terminal symbolS)
• Σ = {“x”, “=“, “5”}
– S: 시작 문자(Start symbol)
• S ∈ N,
S = <문>
– P: 규칙(Production ruleS)
• P ⊆ N x (N∪Σ)*.
• (A, α) ∈ P일 때, A → α ∈ P 또는 A → α로 쓴다.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
6/38
문법 G = (N, Σ, P, S)과 유도, 언어
•
유도(derivation), ⇒
–
–
–
–
A → α ∈ P 일 때, 임의의 β, γ ∈ V*에 대하여,
βAγ ⇒A→α βαγ.
⇒ ⊆ V* ⅹ V*.
→ ⊆ ⇒.
•
•
단 V* = (N∪Σ)*.
→는 유한, ⇒는 무한.
유도의 확장: ⇒n, ⇒*.
– ⇒0 = idV*.
– ⇒n = ⇒n-1 ∙ ⇒
{α ⇒0 α| α ∈ V*}
n ≥ 1.
– ⇒* = ⇒0 ∪ ⇒1 ∪ ⇒2 ∪ …
•
언어, L(G): 문법 G가 정의한 언어 L(G)
•
예:
<문>
– L(G) = {w ∈ T* | S ⇒* w}.
– <문> ⇒ <좌> “=“ <우>
–
⇒ “x” “=“ <우>
–
⇒ “x” “=“ “5”
SIGPL 겨울학교, 2012-02-03
<좌>
“x”
한국과학기술원 전산학과 최광무
“=”
<우>
“5”
7/38
문법의 계층(hierarchical)구조
•
Type 3: 정규(regular) 문법
– A → xB, A → y.
•
오른 줄(right linear) (정규)문법
S
•
오른 줄 (정규)문법의 normal form
B
•
왼 줄(left linear) (정규)문법
•
x1x2…xnyn ↔ ynxnxn-1…x1.
•
줄(linear list)
– A → aB, A → b.
– A → Bx, A → y.
A, B ∈ N, a, b ∈ Σ.
A, B ∈ N, x, y ∈ Σ*.
α
– 오른 줄 (정규)문법 ⇔ 왼 줄 (정규)문법
– 줄(linear) 구조.
•
S
A, B ∈ N, x, y ∈ Σ*.
Type 2: 문맥자유(context-free) 문법
β
x
y
– A → α.
A ∈ N, α ∈ V* = (N∪Σ)*.
– A → BC, A → a except S → ε. A, B, C ∈ N, a ∈ Σ.
•
•
문맥자유 문법의 normal form
Chomsky’s normal form(CNF)
•
나무(tree)
•
x1 A 1
x2 A 2
γ
z
A 1 x1
A 2 x2
…
An-1
…
An-1
xn A n
yn
A n xn
yn
문법의 계층구조
문법
– 계층(hierarchical) 구조
•
S
CSG
Type 1: 문맥민감(context-sensitive; recursive) 문법
V†,
V*.
– βAγ → βαγ, A →β:γ α. A ∈ N, α ∈
β, γ ∈
†
*
– α → β.
α ∈ V , β ∈ V , |α| ≤ |β|.
CFG
RG
Type 0: unrestricted 문법
– α → β.
SIGPL 겨울학교, 2012-02-03
α ∈ V†, β ∈ V*.
한국과학기술원 전산학과 최광무
8/38
기계(Automata)의 계층구조
•
기계의 계층구조
Type 3: 유한상태기계(Finite state automata; FA)
–
–
–
–
TM
상태(stateS), 입력 문자(S), state 변화(transitionS)
초기(initial) 상태, 끝나는(finalS) 상태
결정적(deterministic), 비결정적(non-deterministic)
정규(regular) 문법, 언어
PDA
FA
•
Type 2: Stack을 가진 기계(Pushdown automata; PDA)
•
Type 1, 0: Turing machine(메모리를 가진 기계)
•
Type 1: TM
•
– FA + stack
– 문맥자유(context-free) 문법, 언어
– FA + memory(tape)
– 컴퓨터, 프로그램
언어(문제)의 계층구조
프로그램 할 수 없다
프로그램
– 항상 끝난다(terminate).
– 알고리즘
알고리즘
Type 0: TM
– 끝나지 않을 수도 있다(infinite loop).
– 프로그램
문제가 아니다.
문맥자유
정규
수학의 대상이 아니다.
Cantor, Russell, Gödel, Hilbert, …
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
9/38
언어와 문법의 예(1)
•
Type 3: 정규 언어
– L3 = { anbm | n, m ≥ 0 }.
– 정규식(regular expression)
•
•
•
a*b*.
합(union), 곱(concatenation), 반복곱의 합(closure; *).
더하기, 붙이기,
많이
•
•
•
Nondeterministic
Deterministic
한글모아쓰기기계(automata)
•
G3N: A → aA | B | ε,
B → bB | ε.
– 유한상태기계(FA)
– 정규문법:
•
Type 2: 문맥자유 언어
•
A
b
ε
a
G3D: A → aA | bB | ε,
B → bB | ε.
– L2n = { anbn | n ≥ 0 }.
G2n: S → aSb | ε.
– L2= = { x ∈ {a, b}* | |x|b = |x|a }.
G2=: S → aSbS | bSaS | ε.
a
A
B
b
b
B
L2n ⊆ L3.
L2= ⊆ L2n.
L(G2=) ⊆ L2=, L2= ⊆? L(G2=).
– Lk,m = {x ∈ {a, b}* | |x|b = k∙|x|a + m}.
Gk,m?
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
10/38
언어와 문법의 예(2)
•
Type 1: 문맥민감 언어
–
–
–
–
–
–
–
–
L13 = { anbncn | n ≥ 0}.
G13: S → aSBC | aBC | ε.
CB → HB,
HB → HC,
HC → BC,
aB → ab,
bB → bb,
bC → bc,
S ⇒S→aSBCn-1 an-1S(BC)n-1 ⇒S→aBC an(BC)n = anB(CB)n-1C
(⇒CB→HB∙HB→HC∙HC→BC)¹/₂n(n-1) anBnCn
⇒aB→ab anbBn-1Cn ⇒bB→bbn-1 anbnCn
⇒bC→bc anbncCn-1 ⇒cC→ccn-1 anbncn.
•
Type 1: recursive 언어
•
Type 0: 언어
cC → cc.
– L1xx = { xx| x ∈ {a, b}* }.
– G1xx: S → aAS | bBS | T
–
Aa → aA,
Ba → aB,
Ab → bA,
Bb → bB,
–
BT → Tb,
AT → Ta,
T → ε.
n
n
n
– S ⇒S→aAS|bBS (aA|bB) S ⇒S→T (aA|bB) T ⇒Aa→aA|Ba→aB|Ab→bA|Bb→bBn (a|b)n(A|B)nT
– ⇒BT→Tb|AT→Tan (a|b)nT(a|b)n ⇒T→ε (a|b)n(a|b)n.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
11/38
고쳐쓰기(Rewriting system)
•
고쳐쓰기 R = (C, →, ι, Φ)
–
–
–
–
•
•
•
α → β, α, β ∈ C.
•
ι ∈ C.
•
Φ ⊆ C.
ι: 처음 상황(initial configuration)
Φ: 끝 상황(final configurationS)
유도(derivation), ⇒
–
α → β 일 때, 임의의 γ, δ ∈ C에 대하여
γAδ ⇒α→β γβδ.
→, ⇒, ⇒* ⊆ C ⅹ C.
–
문장을 만들어가는 고쳐쓰기
–
•
C: 고쳐쓰기 상황(ConfigurationS)
→ ⊆ C ⅹ C.
고쳐쓰기의 정상적인 마침.
ι ⇒* φ ∈ Φ.
문법 고쳐쓰기
•
•
생성문법(generative grammar)
–
–
문법 G = (N, Σ, P, S)의 고쳐쓰기 RG = ((N ∪ Σ)*, →G = P, S, Σ*).
L(RG) = {w ∈ Σ* (= Φ)| ι = S ⇒𝐺 ∗ w ∈ Σ*(= Φ)} = L(G).
–
–
문장을 없애가며 확인하는 고쳐쓰기(문장확인기계)
기계 M 의 고쳐쓰기 RM = (C ⅹ Σ*, →M, (ci, w), {(cF, ε)}).
기계 고쳐쓰기
•
•
–
C: 고쳐쓰기(기계) 상황
Σ*: 나머지 입력문자열
L(RM) = {w ∈ Σ* | ι = (ci, w) ⇒𝐴∗ (cF, ε) ∈ Φ}.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
12/38
정규문법, 문장확인 유한상태기계,
그리고 고쳐쓰기
•
•
정규 문법 G3 = (N, Σ, P, S).
S
⇒* xA
⇒A→yB
xyB
유한상태기계 A = (Q, Σ, δ, qS, F).
S
⇒* xyz.
qF ∈ F.
δ *( δ( δ*(qS , x) , y), z) = δ *( δ( qA , y), z) = δ *( qB , z) = qF.
y
x
z
…
…
qA
qB
qS
qF
(qS, xyz)
(qA, yz)
(qB, z)
A
B
x y z
(qF, ε)
•
기계 A의 고쳐쓰기 상황(configurationS)
•
문법 G3를 위한 고쳐쓰기 RA = (Q ⅹ Σ*, →A, (qs, w), {(qf, ε)| qf ∈ F}).
qB ∈ δ(qA, y) ⇔ (qA, y) →𝐴(qA, y)→(qB, ε) (qB, ε) ⇔ A → yB ∈ P.
(qS, xyz)⇒𝐴∗ (qA, yz) ⇒𝐴(qA, y)→(qB, ε) (qB, z)⇒𝐴∗ (qF, ε)
qF ∈ F.
•
유한상태기계 A ⇔ (정규)고쳐쓰기 RA. ⇔ 정규문법 G3.
– 기계의 상태(stateS) Q ⅹ 나머지 입력문자열 Σ*.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
13/38
문맥자유문법 유도
파스(parse) 나무(tree)
•
•
•
•
문맥자유문법
–
A → α, A ∈ N, α ∈ V* = (N∪Σ)*.
–
N: 터미널이 아닌(nonterminal) 문자
–
T: 터미널(terminal) 문자
문맥자유문법의 문자의 구분
•
바꿀 문자.
•
바꾼 문자.
유도과정에서 바꿀 문자가 여럿 나온다.
파스(parse)나무(tree)
–
나무에는 가지(subtree)가 있다.
•
•
•
시작(subroot)이 바꿀 문자
끝(leaf)이 바꾼 문자
–
계층적(hierarchical) 구조(structure).
–
S ⇒∗ x0A1x1A2x2 … xn-1Anxn
Ak ⇒∗ yk ∈ Σ*.
문맥자유문법 고치기(유도)의 일반 꼴
•
•
•
•
S
0 ≤ ∀k ≤ n: xk ∈
Σ*,
⇒∗ x0y1x1y2x2 … xn-1ynxn∈ Σ*.
1 ≤ ∀k ≤ n: Ak ∈ N,
A1 … A k … An
x0 y1 x1… xk-1yk xk…xn-1yn xn
A1, Ak , …, An 중 어떤 문자를 먼저 바꾸어도 나무는 같다.
무엇이 파스나무를 다르게 하는가?
바꿀 문자가 가진 문법 규칙에서 우변 고르기
–
–
A → α | β.
Nondeterministic
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
14/38
문맥자유문법의 두 가지 고치기 순서
(⇒𝑙𝑚 /⇒𝑟𝑚)
S
• 문장 구하기의 두 가지 고치기 순서
B
– 왼쪽부터 고치기(Leftmost derivation)
– 오른쪽부터 고치기(Rightmost derivation)
• 왼쪽부터 고치기(⇒𝑙𝑚 )
𝐵→β
xβγ ⇒𝑙𝑚∗ xyγ
• S ⇒𝑙𝑚∗ xBγ ⇒𝑙𝑚
⇒𝑙𝑚∗ xyz ∈ Σ*.
β
x
y
γ
z
– x∈Σ*, γ∈V*, B∈N, B → β, β ⇒𝑙𝑚∗ y ∈ Σ*, γ ⇒𝑙𝑚∗ z ∈ Σ*.
• 오른쪽부터 고치기(⇒𝑟𝑚)
∗
• S ⇒𝑟𝑚∗ αBz ⇒𝑟𝑚𝐵→β αβz ⇒𝑟𝑚 αyz
–
α∈V*,
z∈Σ*,
B∈N, B → β, β ⇒𝑟𝑚∗
S
⇒𝑟𝑚∗ xyz ∈ Σ*.
y ∈ Σ*, α ⇒𝑟𝑚∗ x ∈ Σ*.
• 고치기 순서에 따른 두 가지 기계
– 고치기 순서가 달라도 결과나무는 같다.
– 왼 파서(Left parser)
B
α
x
β
y
z
• 왼쪽부터 고치며, 위에서 아래로(top-down) 나무 만들기(parsing).
– 오른 파서(Right parser)
• 오른쪽부터 고치기를 거꾸로 하며, 아래서 위로(bottom-up) 나무 만들기.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
15/38
왼 유도(⇒𝑙𝑚), 파스나무,
Stack, 입력문자열, (Stack, 입력문자열)
시작
문
⇒𝑙𝑚문→좌=우 좌 = 우
⇒𝑙𝑚좌→x
x =우
⇒𝑙𝑚우→5
x =5
문
좌
=
x
x
우
5
=
5
SIGPL 겨울학교, 2012-02-03
좌
x
=
5
문
우
예상한다.
확인한다.
예상과
확인끝
(문, x=5)
⇒문→좌=우 (좌=우, x=5)
⇒좌→x
(x=우, x=5)
⇒↓x
(=우, =5)
⇒↓=
(우, 5)
⇒우→5
(5, 5)
⇒↓5
(ε, ε).
위에서 아래로
왼쪽에서 오른쪽으로
나무가 자란다.
한국과학기술원 전산학과 최광무
16/38
왼 파서(→𝐿), 문장확인기계
예상과 확인(Guess and verify)
• 왼 파서의 상황: V*ⅹΣ*.
– Stack 상황: V* = (N ∪ Σ)*,
– 나머지 입력 문자열: Σ*.
단 α ∈ V*, 일 때, stack top이 1:α.
• (1) Stack top이 Y=B ∈ N일 때:
– S
⇒𝑙𝑚∗ xBγ
⇒𝑙𝑚 xβγ
⇒𝑙𝑚∗ xyγ ⇒𝑙𝑚∗ xyz
– •S
⇒𝐿𝑚∗ x•Bγ ⇒𝐿𝑚𝐵→β x•βγ
⇒𝐿𝑚∗ xy•γ ⇒𝐿𝑚∗ xyz•
– (S, xyz) ⇒𝐿∗ (Bγ, yz) ⇒𝐿(𝐵, ε)→(β, ε) (βγ, yz) ⇒𝐿∗ (γ, z) ⇒𝐿∗ (ε, ε)
• B → β를 선택(nondeterministic)하여 B를 β로 예상한다.
• Stack에서 B를 pop하고 β를 push.
• (B, ε) →𝐿𝐵→β (β, ε).
B를 β로 예상 Guess(Produce) A as α.
x
=(⇒𝑙𝑚0 )
xyγ ⇒𝑙𝑚∗ xyz
⇒𝐿𝑚𝑚𝑜𝑣𝑒 • xa•γ = xy•γ ⇒𝐿𝑚∗ xyz•
⇒𝐿(𝑎,𝑎)→(ε, ε) (= ⇒𝐿↓𝑎 ) (γ, z) ⇒𝐿∗ (ε, ε)
• Stack top a가 현재입력문자 a와 같은가를 확인.
• Stack에서 a를 pop하고 입력문자열에서도 a를 제거. ↓
• (a, a) →𝐿(𝑎,𝑎)→(ε,ε) (= →𝐿↓𝑎 (ε, ε)). a를 확인 Verify(shift) a.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
B
β
y
γ
z
S
• (2) Stack top이 Y=a=y ∈ Σ일 때:
– S
⇒𝑙𝑚∗ xaγ
– •S
⇒𝐿𝑚∗ x•aγ
– (S, xyz) ⇒𝐿∗ (aγ, az)
S
a
=
x
y
17/38
γ
z
왼 파서 - 2
•
문법 G의 왼 파서 →𝐿 = (V*ⅹΣ*, →𝐿, (S, w), {(ε, ε)}).
•
왼 파서는 stack이 입력문자열을 유도하는가 예상하고 확인한다.
– 첫 상황 ι = (S, w) ∈ V*ⅹΣ*.
– 끝 상황 Ф = {(ε, ε) ∈ V*ⅹΣ*}.
– →𝐿 = {(B, ε) →𝐿 (β, ε)| B → β} ∪ {(a, a) →𝐿 (ε, ε)| a ∈ Σ}
– 첫 상황 ⇒𝐿∗ 끝 상황.
– 일반 상황
•
•
증명
(S, w) ⇒𝐿∗ (ε, ε).
(α, xyz) ⇒𝐿∗ (Y, z), α ∈ V*, x, y, z ∈ Σ*, Y ∈ N ∪ Σ.
αz ⇒𝑙𝑚∗ xYz ⇔ (α, xyz) ⇒𝐿∗ (Y, yz).
B → β1 | β2 (β1 ≠ β2)일 때,
–
–
–
–
(B, ε) →𝐿𝐵→β1 (β1, ε). (B, ε) →𝐿𝐵→β2 (β2, ε).
비결정적(Nondeterministic)이다.
왼 파서는 문맥자유언어의 문장확인문제를 푸는 기계이다.
문맥자유언어의 문장확인문제는 NP이다.
•
그러나 CYK 알고리즘은 O(n3).
•
(S, w) ⇒𝐿|π|+|𝑥| (ε, ε) ↔ •S ⇒𝐿𝑚|π|+|𝑥| w• → S ⇒𝑙𝑚|π| . w ∈ Σ*, π ∈ P*.
– 문맥자유언어의 문장확인문제는 P이다.
– |π| ≤ |π| + |w|.
– 왼 유도(⇒𝑙𝑚)는 왼 파서(⇒𝐿)의 요약해석(abstract interpretation)이다.
– 왼 파서(⇒𝐿)와 ⇒𝐿𝑚 은 같다.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
17-1/38
왼 파서의 예상을 예상한다.
결정적(deterministic) SLL(k) 파서
•
•
•
•
•
•
•
•
•
•
문맥자유문법 G = (N, Σ, P, S)의 왼 파서의 예상
→𝐿 = {(B, ε) →𝐿 (β, ε)| B → β}
B → β1 | β2 (β1 ≠ β2).
(S, xyz) ⇒𝐿∗ (Bγ, yz) ⇒𝐿 (β1γ, yz) ⇒𝐿∗ (γ, z) ⇒𝐿∗ (ε, ε)
S
B
–
–
B ⇒ β1 ⇒𝑙𝑚∗ y1 ∈ Σ*,
k:y1 ∈ Firstk(β1).
–
–
B ⇒ β2 ⇒𝑙𝑚∗ y2 ∈ Σ*,
k:y2 ∈ Firstk(β2).
–
k:z ∈ Followk(B).
–
–
u1 ∈ k:Firstk(β1)∙Followk(B): (B, u1) →SLL(k) (β1, u1)
u2 ∈ k:Firstk(β2)∙Followk(B): (B, u2) →SLL(k) (β2, u2)
–
–
→SLL(k) = {(B, y) →SLL(k) (β, y)| B → β, y ∈ k:Firstk(β)∙Followk(B)}
∪ {(a, a) →SLL(k) (ε, ε)| a ∈ Σ}
–
–
문법 G는 SLL(k) 문법이다.
Left to right scan with Leftmost derivation using k-lookahead symbols.
β21
(S, xyz) ⇒𝐿 (Bγ, yz) ⇒𝐿 (β2γ, yz) ⇒𝐿 (γ, z) ⇒𝐿 (ε, ε)
γ
∗
⇒*
z∈
∗
∗
x
Σ*,
k:Firstk(β1)∙Followk(B) ∩ k:Firstk(β2)∙Followk(B) = ø이면 결정적.
γ
y12
z
왼파서
(B, ε) →𝐿 (β1, ε)
(B, ε) →𝐿 (β2, ε)
문법 G의 Strong LL(k) 파서 →SLL(k) = (V*ⅹΣ*, →SLL(k), (S, w), {(ε, ε)}),
문법 G의 Strong LL(k) 파서가 결정적(deterministic)이면,
SLL(1) 문법 ⊆ SLL(k) 문법 ⊆ LL(k) 문법(u1 = k:y1z, u2 = k:y2z).
하지만 k=1인 경우, SLL(1) 문법 = LL(1) 문법.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
18/38
오른 파서는
오른 유도(⇒𝑟𝑚)를 거꾸로(←𝑟𝑚)한다.
시작
x=5
←𝑟𝑚x←좌 좌 = 5
←𝑟𝑚5←우 좌 = 우
←𝑟𝑚좌=우←문 문.
문
좌
=
x
x
우
5
=
5
SIGPL 겨울학교, 2012-02-03
우
5
=
문
좌
x
저장한다.
확인한다.
저장과
확인끝
(ε, x=5)
⇒↑x
(x, =5)
⇒ x←좌 (좌, =5)
⇒↑=
(=좌, 5)
⇒↑5
(5=좌, ε)
⇒ 5←우 (우=좌, ε)
⇒우=좌←문(문, ε).
오른쪽에서 왼쪽으로
아래에서 위로
나무가 자란다.
한국과학기술원 전산학과 최광무
(좌=우)R
19/38
오른 파서(→𝑅 )
저장과 확인(Shift and reduce)
•
오른 파서가 하는 두 가지 행동
– Stack에 입력문자 a ∈ Σ를 저장(shift)한다.
•
•
Stack에서 a를 저장하고 입력문자열에서 a를 제거.
(ε, a) →𝑅↑𝑎 (a, ε).
a ∈ Σ를 stack에 저장
– Stack에 A → α의 우변
•
•
•
있을 때:
αR 을
shift a ∈ Σ.
A로 확인(reduce)한다.
Stack에서
pop하고 A를 push한다.
α←𝐴
R
(α , ε) →𝑅
(A, ε). Stack에 α 를 A 로 확인 reduce α to A.
오른 파서는 입력문자열을 stack에 저장한 후 확인한다.
– 첫 상황 ⇒𝐿∗ 끝 상황.
– 일반 상황
•
•
αR을
αR이
증명
(ε, w) ⇒𝑅 ∗ (S, ε).
(ε, xyz) ⇒𝑅 ∗ (YαR, z), α ∈ V*, x, y, z ∈ Σ*, Y ∈ N ∪ Σ.
αYz ⇒𝑟𝑚∗ xyz ⇔ (ε, xyz) ⇒𝑅∗ (YαR, z).
S
오른 파서의 비결정성(Nondeterminism)
Y
– Stack에 규칙 A → α의 우변 αR이 있을 때
•
•
입력문자열에서 a를 저장(shift)할까, αR을 A로 확인(reduce)할 까?
–
shift-reduce conflict
–
reduce-reduce conflict
또 다른 규칙 A’ → α’의 우변
α’R이
αα
있을 때,
x
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
β
y
z
20/38
오른 파서와 LR(1) itemS
시작
x=5
←𝑟𝑚x←좌 좌 = 5
←𝑟𝑚5←우 좌 = 우
←𝑟𝑚좌=우←문 문.
문
좌
=
x
x
우
5
=
5
SIGPL 겨울학교, 2012-02-03
우
5
=
문
좌
x
저장한다.
확인한다.
저장과
확인끝
(ε, x=5)
⇒↑x (x, =5)
⇒ x←좌(좌, =5)
⇒↑= (=좌, 5)
⇒↑5 (5=좌, ε)
⇒ 5←우(우=좌, ε)
⇒우=좌←문(문, ε).
[S’ → •문,
ε]
[문 → •좌=우, ε]
[좌 → •x,
=]
[좌 → x•,
=]
[문 → 좌•=우, ε]
[문 → 좌=•우, ε]
[우 → •5,
ε]
[우 → 5•,
ε]
[문 → 좌=우•, ε]
[S’ → 문•,
ε]
오른쪽에서 왼쪽으로
아래에서 위로
나무가 자란다.
한국과학기술원 전산학과 최광무
21
오른 파서의 비결정성 줄이기
오른 파서 → LR(k) 파서
•
•
•
•
문자(오른 파서) 대신에 LR(k) state(LR(k) 파서)를 stack에 넣는다.
–
X∈N∪Σ
–
–
–
오른쪽에 있는 문자를 stack top에 넣으므로 stack 문자열이 뒤집어져(δR) 있다.
LR(k)는 집합 V*에 정의된 같은관계이다.
같은부류 [δ]LR(k)를(stack 문자열의 집합) LR(k) state라 한다.
Rk = {[B → β1•β2, x]| B→β1β2, x ∈ Σ≤k }: LR(k) itemS.
LR(k) itemsS: 〈∙〉k : V* → 2Rk .
〈αβ1〉k = {[B → β1•β2, k:z]
| S ⇒𝑟𝑚∗ αBz ⇒𝑟𝑚 αβ1β2z, B → β1β2}
δ1R LR(k)(ρk) δ2R, if 〈δ1〉k = 〈δ2〉k .
•
•
•
•
→ [XαR]LR(k) ↔ 〈XαR〉LR(k).
[δR]LR(k) ↔ [δR]ρk ↔ [δR]k ↔ 〈[δR]LR(k)〉k ↔ 〈δ〉LR(k) ↔ 〈δ〉ρk ↔ 〈δ〉k.
–
ParLR(k)(V*)를 [V*]LR(k)라고 쓰고 LR(k) state의 집합이다.
–
–
–
–
•S ⇒𝑅𝑚∗ αB•z ⇒𝑹𝒎 αβ•z ⇒𝑅𝑚∗ αy•z ⇒𝑅𝑚∗ •xyz.
•xyz ← 𝑅𝑚∗ αy•z ← 𝑅𝑚∗ αβ•z ← 𝑹𝒎 αB•z ← 𝑅𝑚∗ S•.
(ε, xyz) ⇒𝑅∗ (αR, yz) ⇒𝑅∗ (βRαR, y2z) ⇒𝑹 (BαR, z) ⇒𝑅∗ (S, ε).
(βR, ε) →𝑅 (B, ε)를 (βRαR, x) →LR(k) (BαR, x), x = k:z로 제한하여 확인한다.
–
–
–
β2 = ε이면 x를 보고 β1←B로 확인(reduce)한다.
1:β2 ∈ Σ 이면 저장(shift)한다.
1:β2 ∈ N이면 확인을 미리 준비(《∙》)한다.
S
LR(k) state ↔
LR(k) item의 집합 ↔ stack 문자열의 집합
Stack에 있는 βR←B로 확인할 때,
[B → β1•β2, x] ∈ 〈αβ1〉LR(k) ↔ [β1RαR]LR(k) 일 때,
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
B
αα
x
β
y
z
22/38
LR(k) 파서 만들기
•
•
•
•
•
《∙》ρk : Rk → 2Rk .
–
–
《[B→β1•Aβ2, x]》ρk = {[A→•ξ, y]| A → ξ, y ∈ Firstk(β2x)}
[A→ξ•, y] ∈ 〈αβ1ξ〉ρk일 때, y를 보고 ξ←A로 확인할 준비한다.
–
–
–
–
–
–
LRk(G) = (([V ∗ ]LR(k) ⅹΣ*, →LR(k), (〈ε〉k, w), {(〈ε〉k∙〈S〉k, ε)}).
→LR(k) = {(〈αβ1〉k, a) →LR(k) (〈αβ1∙a〉k∙〈αβ1〉k, ε)
| a ∈ Σ, [A → β1•aβ2, x] ∈ 〈αβ1〉k}
∪ {(〈αβ1∙ξ〉k∙〈αβ1∙ξ:|ξ|-1〉k∙ … ∙〈αβ1∙ξ:1〉k∙〈αβ1〉k, x) →LR(k) (〈αβ1∙A〉k∙〈αβ1〉k, x)
| [B → β1•Aβ2, y] ∈ 〈αβ1〉k, [A → •ξ, x] ∈ 《〈αβ1〉k》k†,
[A → ξ•, x] ∈ 〈αβ1ξ〉k, [B → β1A•β2, y] ∈ 〈αβ1A〉k}.
〈ε〉ρk = 《[S’→•S, ε]》ρk* ∈ [V ∗ ]LR(k)로 시작(basis).
[B→β1•Xβ2, x] ∈ 〈αβ1〉ρk ∈ [V ∗ ]LR(k)이면(recursion),
[B→β1X•β2, x] ∈ 《〈αβ1X〉ρk 》ρk* ∈ [V ∗ ]LR(k).
〈αβ1X〉ρk = 《[B→β1X•β2, y]》ρk* = {[B→β1X•β2, y]} ∪ 《[B→β1X•β2, y]》ρk†.
단 {[B→β1X•β2, y]} ∪ 《[B→β1X•β2, y]》ρk† = ø.
문법 G = (N, Σ, P, S)의 LR(k) 파서,
[S’→•S, ε]
S
∈ 〈ε〉k
[S’→S•, ε]
αβ1
[B→β1•Aβ2, x] ∈ 〈αβ1〉k
A
∈ 〈S〉k
[B→β1A•β2, x]
∈ 〈αβ1A〉k
[A→•ξ, y] ∈ 《〈αβ1〉k》k†
ξ
[A→ξ•, y]
SIGPL 겨울학교, 2012-02-03
∈ 〈αβ1ξ〉k
한국과학기술원 전산학과 최광무
23/38
왼 파서의 비결정성 더 줄이기
SLL(k) 파서 → LL(k) 파서
•
•
•
•
•
문자(SLL(k) 파서) 대신에 LL(k) state(LL(k) 파서)를 stack에 넣는다.
–
X∈N∪Σ
–
–
–
왼쪽에 있는 문자를 stack top에 넣으므로 stack 문자열이 뒤집히지 않는다.
LL(k)는 집합 V*에 정의된 같은관계이다.
같은부류 [δ]LL(k)(stack 문자열들의 집합)를 LL(k) state라 한다.
Lk = {[B → β1•β2, x]| B→β1β2, x ∈ Σ≤k}: LL(k) itemS.
예상할 때, 올 수 있는 입력 문자열을 SLL(k) 보다 더 자세히 계산한다.
LL(k) itemS: 〈∙〉k : V* → 2Lk .
〈β2γ〉k = {[B → β1•β2, x]
| S ⇒𝑙𝑚∗ Bγ ⇒lm xβ1β2γ, B → β1β2, x ∈ Firstk(β2γ)}
δ1 LL(k)(λk) δ2, if 〈δ1〉k = 〈δ2〉k .
•
•
[δ]LL(k) ↔ [δ]λk ↔ [δ]k ↔ 〈[δ]LL(k)〉k ↔ 〈δ〉LL(k) ↔ 〈δ〉λk ↔ 〈δ〉k.
–
ParLL(k)(V*)를 [V*]LL(k) 라고 쓰고 LL(k) state의 집합이다.
S
–
–
–
–
•S
⇒𝐿𝑚∗ x•Bγ ⇒𝑳𝒎 x•βγ ⇒𝐿𝑚∗ xy•γ ⇒𝐿𝑚∗ xyz•.
(S, xyz) ⇒𝐿∗ (Bγ, yz) ⇒𝑳 (βγ, yz) ⇒𝐿∗ (γ, z) ⇒𝐿∗ (ε, ε).
(B, u) →SLL(k) (β, u)에서 u ∈ k:Firstk(β)∙Followk(A)로 예상하나,
(B, x) →LL(k) (β, x)에서 x = k:yz로 제한하여 예상한다.
B
Stack에 있는 B→β로 예상할 때,
•
•
→ [XαR]LR(k) ↔ 〈XαR〉LR(k).
[B → β1•β2, x] ∈ 〈β2γ〉LL(k) ↔ [β2γ]LL(k) 일 때,
–
–
–
β
{k:yz} ⊆ k:Firstk(β)∙Followk(A).
β1 = ε이면 x를 보고 B→β2로 예상한다.
β1:1 ∈ Σ 이면 Σ 이면 확인(verify)한다.
β1:1 ∈ N이면 예상을 미리 준비(《∙》)한다.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
x
y
γ
z
24/38
LL(k) 파서 만들기
•
•
•
•
•
《∙》λk : Lk → 2Lk .
–
–
《[B→β1A•β2, x]》λk = {[A→ξ•, x]| A → ξ}
[A→•ξ, x] ∈ 〈β2γ〉λk일 때, A→ξ로 예상할 준비한다.
–
–
–
–
–
–
LLk(G) = (([V ∗ ]LL(k) ⅹΣ*, →LL(k), ([ε]k∙[S]k, w), {([ε]k, ε)}).
→LL(k) = {([A∙β2γ]k∙[γ]k, x) →LL(k) {([ξ∙β2γ]k∙[ξ:|β|-1∙β2γ]k∙ … ∙[ξ:1∙β2γ]k∙[β2γ]k, x)
| [B → β1A•β2, y] ∈ 〈β2γ〉k, [A →ξ•, y] ∈ 《〈β2γ〉k》k†,
[A → •ξ, x] ∈ 〈β2γ〉k, [B → β1•Aβ2, X] ∈ 〈A∙β2γ〉k}. x ⊆ X.
∪ {([aβ2γ]k∙[γ]k, a) →LL(k) ([β2γ]k, ε)
| a ∈ Σ, [A → β1•aβ2, x] ∈ 〈aβ2γ〉k}
〈ε〉λk = 《[S’→S•, ε]》λk* ∈ [V ∗ ]LL(k) 로 시작(basis).
[B→β1X•β2, x] ∈ 〈β2γ〉λk ∈ [V ∗ ]LL(k)이면(recursion),
[B→β1•Xβ2, y] ∈ 《〈Xβ2γ〉λk》λk* ∈ [V ∗ ]LL(k), y ∈ Firstk(Xx).
〈Xβ2γ〉λk = 《[B→β1•Xβ2, y]》λk* = {[B→β1•Xβ2, y]} ∪ 《[B→β1•Xβ2, y]》λk†.
단 {[B→β1•Xβ2, y]} ∪ 《[B→β1•Xβ2, y]》λk† = ø.
문법 G = (N, Σ, P, S)의 LL(k) 파서,
[S’→S•, ε]
S
∈ [ε]k
[S’→•S, s]
β 2γ
[B→β1A•β2, x] ∈ [β2γ]k
A
∈ [S]k
[B→β1•Aβ2, X]
∈ [Aβ2γ]k
[A→ξ•, x] ∈ 《[β2γ]k》k†
ξ
[A→•ξ, y]
SIGPL 겨울학교, 2012-02-03
∈ [ξβ2γ ]k
한국과학기술원 전산학과 최광무
25/38
왼 파서의 종류
• 유한상태기계
– A = (Q × Σ∗ , →A, (𝑞𝑠 , w), {(f, ε)| f∈F})
– (q, x) →A (p, ε).
• 왼 파서
– L = ((V ∗ × Σ∗ ), →L, (S, w), {(ε, ε)})
– B를 β로(B → β) 예상(guess B as β)
– (B, ε) →L (β, ε),
• SLL(k) 왼 파서
a ∈ Σ를 확인(verify a)
(a, a) →L (ε, ε).
– SLL(k) = ((V ∗ × Σ∗ ), →SLL(k), (S, w), {(ε, ε)})
– (B, x) →SLL(k) (β, x),
(a, a) →SLL(k) (ε, ε).
– x ∈ Firstk(β∙Follwk(B)),
• LL(k) 왼 파서
– LL(k) = (([V ∗ ]LL(k) × Σ∗ ), →LL(k), ([ε]k[S]k, w), {([ε]k}, (ε, ε)})
– ([B∙γ]k∙[γ]k, x) →LL(k) ([β∙γ]k…[γ]k, x), ([a∙γ]k∙[γ]k, a) →LL(k) [γ]k, ε).
• [B → •β, x] ∈ 〈β∙γ〉LL(k),
• SLL(k)문법 ⊆ LL(k)문법.
SIGPL 겨울학교, 2012-02-03
[~ → ~•a~, a~] ∈ 〈a∙γ〉LL(k).
한국과학기술원 전산학과 최광무
26/38
오른 파서의 종류
•
오른 파서
•
LR(k) 오른 파서
•
•
•
– R = ((V ∗ × Σ∗ ), →R, (ε, w), {(S, ε)})
– a ∈ Σ를 저장(shift a)
β를 B로(B → β) 확인(reduce β to B)
– (ε, a) →R (a, ε);
(β𝑅 , ε) →R (B, ε)
LR(k, k)
∗
–
–
–
–
LR(k) = (([V ]LR(k) × Σ ), →LR(k), ([ε]k , w), {([ε]k∙[S]k}, (ε, ε)})
LR(k) 상태,
LR(k) 확인(reduce)
𝑅
([α𝑅 ]k , a) →LR(k) ([a∙α𝑅 ]k∙[α ]k , ε), ([β𝑅 ∙α𝑅 ]k …[α𝑅 ]k , x) →LR(k) ([Bα𝑅 ]k∙[α𝑅 ]k , x)
[~ → ~•a~, a~] ∈ 〈α〉LR(k),
[B → β•, x] ∈ 〈αβ〉LR(k).
–
–
–
–
SLR(k) = (([V ]LR(0) × Σ ), →SLR(k), ([ε]0, w), {([ε]0∙[S]0}, (ε, ε)})
LR(0) 상태,
Followk(B) 확인(reduce)
([α𝑅 ]0, a) →SLR(k) ([a∙α𝑅 ]0∙[α𝑅 ]0, ε), ([β𝑅 ∙α𝑅 ]0…[α𝑅 ]0, y) →SLR(k) ([B∙α𝑅 ]0∙[α𝑅 ]0, y)
[~ → ~•a~] ∈ 〈α〉LR(0),
[B → β•] ∈ 〈αβ〉LR(0), y ∈ Followk(B).
–
–
–
–
LALR(k) = (([V ]LR(0) × Σ∗ ), →LALR(k), ([ε]0, w), {([ε]0∙[S]0}, (ε, ε)})
LR(0) 상태,
LR(k) 확인(reduce)
𝑅
𝑅
𝑅
([α ]0, a) →LALR(k) ([a∙α ]0∙[α ]0, ε), ([β𝑅 ∙α𝑅 ]0…[α𝑅 ]0, x) →LALR(k) ([B∙α𝑅 ]0∙[α𝑅 ]0, x)
[~ → ~•a~] ∈ 〈α〉LR(0),
[B → β•, x] ∈ 〈αβ〉LR(k).
∗
SLR(k) 오른 파서
∗
LALR(k) 오른 파서
∗
∗
LR(0, K) K ⊇ k.
LR(0, k)
SLR(k)문법 ⊆ LALR(k)문법 ⊆ LR(k)문법.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
27/38
LL, RR/LR, RL 파서
S
S
B
B
β
x
y
α
γ
S
z
α
x
B
x
x
B
LL
S
αα
β
y
γ
y
z
SIGPL 겨울학교, 2012-02-03
x
LR
한국과학기술원 전산학과 최광무
RR
B
β
z
z
S
β
y
β
y
γ
z
RL
21/38
결정적 왼/오른 파서
• 왼 파서의 결정적 파서
–
–
–
–
Stack이 유도할 문자열을 미리 계산하여 예상하고 후에 확인한다.
SLL(k)문법 ⊆ LL(k)문법이지만
SLL(1)문법 = LL(1)문법
좌 반복(left recursive) 문법은 LL(k)가 아니다.
• A → Aα | β이면
• Firstk(Aα) ⊇ Firstk(A) ⊇ Firstk(β).
• 오른 파서의 결정적 파서
– Stack에 미리 기억하고 후에 확인한다.
• 왼 파서는 (성실한) 미래학자이고,
– Stack에 있는 미래(우문맥(right context))를 미리 예측하고 확인한다.
• 오른 파서는 (성실한) 역사학자이다.
– Stack에 과거(좌문맥(left context))를 기억하여 정리하고 확인한다.
• … ⊆ LL(k)문법 ⊆ SLR(k)문법 ⊆ …
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
28/38
Turing 기계(machine)는 컴퓨터다.
•
•
Turing 기계(machine; TM) Turing 1930.
M = (Q, Σ, Γ, →TM, qs, qf )
–
–
–
–
–
–
•
•
•
Q: StateS
Σ: 입력문자
Γ: Tape 문자(Σ ⊆ Γ, B ∈ Γ, B ¬∈ Σ)
qs ∈ Q: 시작 상태
qf ∈ Q: 마지막 상태.
TM의 상태: QⅹΓ*ⅹΓ*: StateⅹTape 왼쪽내용ⅹTape 오른쪽내용.
(q, αZ, Xβ) →TM(p/Y/L) (p, αZY, β)
(q, αZ, Xβ) →TM(p/Y/R) (p, α, ZYβ)
L(TM) = {w ∈ Σ*| (q0, ε, w) ⇒TM* (qf, α, β)}.
TM은 메모리에 읽고 쓰고, head를 움직일 수 있다.
TM은 컴퓨터다.
문제(프로그램)의 계층구조
– 1 cell을 32bit로 확장(word)한다.
– 단일 head를 다중 head로 바꿀 수 있다.
•
Register, memory
– 산수와 논리(ALU)를 흉내 낼 수 있다.
– Program 메모리와 data 메모리를 구분한다.
•
•
Von Neumann 구조
Stored(Programmable) control logic
–
•
프로그램 할 수 없다
프로그램
알고리즘
NP-complete
Hardware vs. Software
TM은 프로그램이다.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
29/38
TM은 프로그램이다
• 프로그램의 꽃
– 반복(재귀)구조(loop)
• 변하지 않는 (loop invariance) 성질
• 변하는 (loop termination) 성질
• 반복구조(loop)의 문제
– 끝나지 않을 수(infinite loop)도 있다
• 항상 끝나는 프로그램(알고리즘)
– Type 1
– Recursive
– 전체(total) 함수
• 끝나지 않은 수 도 있는 프로그램
– Type 0
– Recursively enumerable
– 부분(partial) 함수
• Recursively enumerable 밖에는 무엇이 있나?
– 프로그램 할 수 없는 문제들
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
30/38
함수와 컴퓨터(프로그램, TM)
•
문제를 푸는 두 가지 방법
–
–
•
•
•
프로그램(TM)
•
•
•
해결 방법(operational)
어떻게 하는가(how)?
(ε, qs, w) ⇒𝑇𝑀 ∗ (α, qf, β). w ∈ Σ*, αβ ∈ Γ*.
•
•
•
문제(functional)
무엇을 하는가(what)?
fTM(w) = αβ.
함수
함수 f: Nn → Nm.
–
–
Nn ↔ N ↔ Nm.
f: Nn → Nm. ↔
–
상수 함수
부분함수 g: N → N.
∃x∈ N: [g(x) = X ¬∈N(undefined).
기본재귀함수(primitive recursive) 함수
•
•
•
f’: N → N.
영(zero) 함수: ζ: N → N({0}).
–
ζ(x) = 0.
–
σ(n) = n+1.
다음수(successor) 함수: σ: N → N.
–
인수 찾기(projection): πkn: Nn → N. πkn(x) = ak 단 1≤k≤n ∧ x = (a1, …, ak,, … ,an).
–
f: N ⅹ N → N를
기본재귀
•
–
–
g: N → N와 h: N ⅹ N ⅹ N → N로 정의한다.
f(x, ζ(n)) = g(x).
f(x, σ(n)) = h(x, n, f(x, n)).
SIGPL 겨울학교, 2012-02-03
f(x, 0) = g(x).
f(x, n+1) = h(x, n, f(x, n)).
한국과학기술원 전산학과 최광무
31/38
TM, 최소화 재귀함수,
Turing-Church의 주장
•
Ackermann함수는 기초재귀로는 안 된다.
•
μ-(최소화)재귀함수 – Church 1934; lecture at Princeton
•
Turing의 주장
A(0, y) = y+1
A(x+1, 0) = A(x, 1)
A(x+1, y+1) = A(x, A(x+1), y))
f(x) = μ n [g(x, n) = 0]
Min n: [g(x, n) = 0 ∧ (1 ≤ ∀k ≤ n: ∃g(x, k)]
–
–
•
TM(프로그램)은 계산가능(computable, programmable)이다.
•
TM ⇒ 계산가능.
•
TM ⇔ 계산가능.
계산가능은 TM(프로그램)이다(?)라고 주장(Thesis)
Church의 주장
–
–
μ-재귀함수는 TM으로 프로그램할 수 있다.
TM도 μ-재귀함수로 표현할 수 있다.(증명)
•
•
TM ⇔ μ-재귀함수.
–
계산가능은 μ-재귀함수이기도 하다.
–
계산가능은 프로그램(TM)이나 μ-재귀함수이다.
Turing-Church의 주장
•
–
–
–
프로그램 ⇔ μ-재귀함수 ⇔ 계산가능(?)
계산가능은 λ-calculus(Church 1934, Kleene 1935, Rosser 1935)다.
계산가능은 combinatory logic(Schönfinkel 1924, Curry 1929)이다.
계산가능은 type 0 grammar(Chomsky 1959)이다.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
32/38
Cantor의 대각선화 주장(1874; 1891)
비극의 시작
•
•
•
•
•
•
•
•
무한이진수 ↔ 자연수(셀 수 있게 무한)이라고 하자.
a1 = 00000…
a2 = 11111…
a3 = 01101…
…
a = 011 …
대각선화(diagonalization)
¬a = 100 …
대각선화의 부정
a, ¬a ∈ 무한이진문자열,
그러나, a ↔ 자연수, ¬a ¬↔ 자연수.
•
무한이진수 ¬↔ 자연수.
–
|자연수의 부분집합| > |자연수|
•
•
자연수
자연수의 부분집합
•
증명의 핵심
•
셀 수 있게(countable) 무한(많다)
셀 수 없이(uncountable) 무한(많다)
–
대각선화(diagonalization) 후에 부정한다.
–
–
Self-recursion에 대한 부정.
내 개인 생각
Russell에 영향을 준 것으로 예상.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
33/38
Russell의 모순(paradox, 1901; 1911)
• Cantor의 naive set theory에 대한 부정
• Let R = {x| x ¬∈ R}.
• 매우 아름다운 집합에 대한 정의
x ¬∈ x
– 집합도 집합의 원소가 될 수 있다.
• {{}, {{}}, {{{}}}, …}
– 집합이 그 집합 자신을 원소로 갖는 것은 이상하다.
• 사각형의 집합이 사각형의 집합을 원소로 가지지 않는다.
– 그러나,
• in x = R then (R ∈ R) ⇔ (R ¬∈ R).
• 자기자신으로 재귀(self-recursion)에 대한 부정.
• 자신을 부정하는 사람은 존재하지 않는다.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
34/38
Hilbert의 실패한 꿈(1929)
Gödel의 불완전성 정리(1931)
•
Hilbert의 꿈(program), 1929.
–
공리(axiom)로 시작한 완전하고(complete) 일관된(consistent) 수학(정리, theorem; 식, formula)의
모든 정리(theorem)는 일관된 증명(proof; 프로그램)이 있다.
•
Gödel의 불완전성 정리(Incompleteness Theorem), 1931.
•
Gödel의 불완전성 정리의 증명
– 증명(proof)도 정리(theorem)다.
1.
완전하고 일관된 공리를 가진 수학은 없다.
2.
자신의 일관됨을 주장하는 정리는 일관되지 않다.
–
–
–
–
–
G(T): 정리 → Gödel수: 정리 T의 Gödel수
prov: Gödel수 → 수; prov(G(T)) = G(p) if ∃p: 정리 T의 증명; = Gödel수가 아닌 수, otherwise.
p ⇔ F(G(p))
Consider Beweisbar(y: Gödel수) = ∃x: ((y = G(T): T: x의 정리) ∧ (x = G(p): (p: y의 증명))
Beweisbar(Gödel의 모국어인 독일어로 provable)는 너무 길다.
•
•
•
•
•
•
•
•
Beweisbar(y) = G(p): (p: y의 증명)
Gödel수(증명 ↔ 정리 ↔ 자연수)도 필요 없다.
Bew(T: 정리) = if prov(T) → true | ¬prov(T) → false fi.
Bew(T) = F(T).
대각선화(diagonalization)하고 부정한다.
¬Bew(T: 정리) = if prov(T) → false | ¬prov(T) → true fi.
¬Bew(T) = ¬F(T).
Self recursion
–
¬Bew(Bew) = ¬prov(prov) ⇔ prov(prov) = Bew(Bew).
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
35/38
Halting problem과 같은 문제들
•
•
•
•
•
•
Let H(p, d) = if p(d) stops → ¬stop
| p(d) ¬stop → stops
fi.
in p = d = H
then H(H, H) stops ⇔ H(H) ¬stop ⇔ H(H, H) ¬stop.
거짓말쟁이 개똥이가, “이 글은 내가 썼다”
그 글을 개똥이가 썼나, 안 썼다?
이발 못하는 사람만 이발해주는 이발사.
자신이 자신을 이발 할 까, 안 할 까?
이종형용사(Heterological)는 이종형용사인가 아닌가?
– 형용사가 표현하는 성질을 가지지 않은 형용사
•
•
예
(단음절)monosyllabic
(다음절)polysyllabic
그러나 Heterological ???
heterological
¬ heterological
•
p ⇔ ¬ p.
•
그런데, 이거 모두 말장난(논리장난) 아닌가?
– Gödel의 불완전성 두 번째 정리(첫 번째 정리의 corollary).
– 큰일 났다!
– 맞다()
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
36/38
서양 과학과 동양 인문학
•
서양 과학
– 수학 또는 과학
•
•
F = ma.
E = mc2.
•
경제적 우월성
•
자연과 사람의 문제.
•
•
형식주의, 논리주의의 붕괴
과학(수학) 만능에 대한 수학자들의 경고.
– 19c말 – 20c초, 쉬운 과학과 공학을 이용한 무력으로 세계제패.
– 과학 또는 수학은 쉽다.
– 공학은 어렵다.
– Cantor, Russell, Gödel, Hilbert, ...
•
동양 인문학
•
미래의 전산학
– 사람에 대한 이해와 존경
– 사람이 제일 어렵다.
– 사람의 문제를 다룬다.
– 기존의 공학과는 전혀 다른 새로운 학문이다.
– 프로그램학
•
SIGPL
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
37/38
전산학과 사람
• 미래학자들
– 전화기 망한다.
• 전 세계 인구의 1/3이 교환수
• 기계식 교환기, 컴퓨터 교환기
– 기술적 비약(Technical take-off)
– 컴퓨터 망한다.
• 전 세계 인구의 반이 프로그래머
• ???
• 새로운 파라다임.
• 좋은 프로그래밍언어
– E. W. Dijkstra(1970년대)
• 사람을 위한 프로그래밍언어 vs. 기계를 위한 프로그래밍 언어
– 최광무(1990년대)
• 사람을 위한 프로그래밍언어 vs. 수학을 위한 프로그래밍 언어
• 사람을 위한 프로그램학
– 수학과의 만남
– 인문사회학과의 만남
– 사람과의 만남
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
38/38
미래에 지도자
• 수신제가(修身齊家) 치국평천하(治國平天下)
– 공자, 대학 제 2장
• 격물치지(格物致知) 성의정심(誠意正心)
– 격물치지
• 이공학 공부
• 세상 무서운 줄 안다.
– 성의정심
• 인문사회학 공부
• 사람 귀한 줄 안다.
• 미래에 지도자
– 세상 무서운 줄 알고, 사람 귀한 줄 아는 사람
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
38-1
감사합니다
전산학과 인문사회학 공부
모두 열심히 하신 후에,
미래에 훌륭한 지도자가
되시기 바랍니다.
SIGPL 겨울학교, 2012-02-03
한국과학기술원 전산학과 최광무
38-2