디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[연재] 나형 5등급도 이해하는 람다 이야기 3 - 읽어보고 지워

기괴공학도갤로그로 이동합니다. 2018.09.23 03:44:59
조회 862 추천 8 댓글 8
														

Chapter 3. The Power of Lambda: If φ is numeric function, we have "φ is computable." ↔ "φ is λ-definable.".


> 먼저 참과 거짓을 정의해 봅시다.


1. 정의: if then else 구문.


1) true ≡ λx,y. x, falseλx,y. y이라고 합시다.


2) 그러면 B가 true 또는 false일 때 B P Q가 if B then P else Q를 나타내는 것을 알 수 있습니다.


2. 정의: 순서있는 쌍(ordered pair).


1) 임의의 람다-항 M, N에 대하여 [M, N] ≡ λb. b M N이라고 합시다.


2) 그러면 항상 [M, N] true = M이고 [M, N] false = N입니다.


> 이제 람다-항들의 리스트를 구현해 봅시다. Cons, Head, Tail, Null, nil을 만들면 되겠네요.

다음과 같이 택할 수 있습니다. 밑을 보지 말고 여러분도 한 번 만들어 보세요.


Consλx,y,z. z x y,

Headλx. x true,

Tailλx. x false,

Nullλx. x (λy,z. false),

nilλx. true.


그러면 리스트 [M, N, ..., L]를 Cons M (Cons N (Cons ... (Cons L nil)))로 구현할 수 있겠죠?

두 리스트를 합치는 함수 Append를 만들면서 워밍업을 마무리합시다.

nil이 아닌 임의의 리스트 X와 임의의 리스트 Y에 대하여


Append nil Y = Y,

Append X Y = Cons (Head X) (Append (Tail X) Y)


이면 되므로, 고정점 결합자 Y ≡ λf. (λx. f (x x)) (λx. f (x x))을 이용하여, 다음과 같이 택할 수 있습니다.


AppendY (λf,x,y. (Null x) (y) (Cons (Head x) (f (Tail x) y))).


> 이제 처치 수(Church numeral) 대신 사용할 자연수의 새로운 표현을 정의해 봅시다.


3. 정의: 'n'.


1) 다음과 같이 정의합시다.


'0' ≡ I,

'n + 1' ≡ [false, 'n'], for all n ∈ N.


4. 보조정리: successor(다음 수), predecessor(이전 수), test for zero(0인지 확인).


1) 임의의 자연수 n에 대하여 다음을 만족하는 결합자 S+, P-, Zero가 존재합니다.


S+ 'n' = 'n + 1',

P- 'n + 1' = 'n',

Zero '0' = true,

Zero 'n + 1' = false.


증명) S+ ≡ λx. [false, x], P- ≡ λx. x true, Zeroλx. x false를 택하면 됩니다.


5. 정의: λ-정의가능성(λ-definability).


1) 수치 함수(numeric function)은 p에 대한 사상 φ: N^p → N입니다.

이 경우 φ는 p개의 항(p-ary)을 취한다고 합니다.


2) p항의 수치 함수 φ는 다음을 만족하는 결합자 F가 존재할 때 λ-정의가능하다고 합니다.


F 'n_1' ... 'n_p' = 'φ(n_1, ..., n_p)', for all n_1, ..., n_p ∈ N.


이 경우 φ는 F에 의하여 λ-정의된다고 합니다.


> 계산가능성(computability): 부분 함수 f: N^p → N에 대하여 입력 xN^p를 받아

x가 f의 정의역의 원소라면 f(x)를 출력한 후 종료되고 그렇지 않으면 영원히 종료되지 않는 알고리듬이

존재할 때 그리고 오직 그럴 때에만 f가 계산가능하다고 합니다.


> 그런데 함수가 계산가능할 때 그리고 오직 그럴 때에만 recursive하다는 것이 밝혀졌습니다.

여기서 recursive는 우리가 아는 재귀와 약간 다릅니다. 조금 뒤에서 설명하겠습니다.

이제부터 λ-정의가능한 함수는 recursive함을 보이겠습니다.


6. 정의: 초기함수(initial function).


1) 초기함수들은 다음과 같이 정의된 3 개의 수치 함수 U[i]n, S+, Z입니다.


U[i]n(x_1, ..., x_n) = x_i, 1 ≤ i ≤ n;

S+(n) = n + 1;

Z(n) = 0.


> 자연수 n에 대한 명제 P(n)에 대하여


μn. P(n) = x ↔ (∀i. 1 ≤ i ≤ x ⇒ ¬P(i)) and P(x)


이라 정의합시다.


> 벡터를 표현하기 어려운 관계로 n이나 x를 보면 벡터라고 생각해 주세요.


7. 정의: 수치 함수들의 분류(class)의 3 가지 연산- 합성(composition), 원시 재귀(primitive recursion),

최소화(minimalization) -에 대하여 닫혀있음은 다음과 같이 정의됩니다.


1) 다음과 같이 정의되는 모든 φ에 대하여 φ ∈ A를 얻을 때 A는 합성에 대하여 닫혀있다고 합니다.


φ(n) = χ(ψ_1(n), ..., ψ_m(n)), with χ, ψ_1, ..., ψ_m ∈ A.


2) 다음과 같이 정의되는 모든 φ에 대하여 φ A를 얻을 때 A는 원시 재귀에 대하여 닫혀있다고 합니다.


φ(0, n) = χ(n), φ(k + 1, n) = ψ(φ(k, n), k, n), with χ, ψ A.


3) 다음과 같이 정의되는 모든 φ에 대하여 φ A를 얻을 때 A는 최소화에 대하여 닫혀있다고 합니다.


φ(n, m) = μm. [χ(n, m) = 0], with χ A such that ∀n. ∃m. χ(n, m) = 0.


8. 정의: recursive한 함수들의 분류 R.


1) R은 모든 초기함수들을 포함하고 합성, 원시 재귀, 최소화에 닫혀있는 수치 함수들의 가장 작은 분류입니다.


2) 그러므로 R을 귀납적으로 정의할 수 있습니다.


> The proof that all recursive functions are λ-definable is in fact by corresponding induction argument - Kleene(1936).


9. 보조정리: 초기함수들은 λ-정의가능합니다.


증명) U[i]n ≡ λx_1,...,x_n. x_i, S+ ≡ λx. [false, x], Zλx. '0'을 택하면 됩니다.


10. 보조정리: λ-정의가능한 함수들은 합성에 대하여 닫혀있습니다.


11. 보조정리: λ-정의가능한 함수들은 원시 재귀에 대하여 닫혀있습니다.


12. 보조정리: λ-정의가능한 함수들은 최소화에 대하여 닫혀있습니다.


13. 정리: 모든 recursive한 함수는 λ-정의가능합니다.


> 역 또한 성립합니다. 그러므로 수치 함수 φ에 대하여 φ가 recursive일 때 그리고 오직 그럴 때에만 λ-정의가능합니다.

게다가 부분 함수에 대해서도 λ-정의가능성의 개념이 존재합니다. 만약 ψ가 부분 함수라면 다음을 얻습니다.


ψ is partial recursive ↔ ψ is λ-definable.


14. 정리: 모든 recursive한 함수는 처치 수 c_n에 대하여 λ-정의될 수 있습니다.


15. 명제: 람다항 T, T^-1이 존재하여 임의의 자연수 n에 대하여 T c_n = 'n'이고 T^-1 'n' = c_n입니다.


16. 따름정리: 정리 14의 다른 증명 - F가 φ을 'n'으로 λ-정의할 때

변환자 T와 T^-1을 이용하면 φ는 F_c에 의하여 c_n으로 λ-정의할 수 있습니다.


> 마지막으로 연립방정식을 풀 때 쓰는 기술을 배우겠습니다.


17. 다중 고정점 정리(multiple fixed-point theorem): F_1, ..., F_n이 람다-항일 때

다음을 만족하는 X_1, ..., X_n이 항상 존재합니다.


X_1 = F_1 X_1 ... X_n,

.

.

.

X_n = F_n X_1 ... X_n.


증명) X ≡ [F_1 X_1 ... X_n, ..., F_n X_1 ... X_n]이라 정의합시다.

그러면 X_i = Head (c_i Tail X)일 때 기존의 고정점 정리에 의하여 X를 구할 수 있습니다.

따라서 모든 X_i를 적어도 하나씩 구할 수 있습니다.


> 마치며: 원래 22일 오후 3시 반에 올렸는데 지워졌네요 ㅠㅠ 다음 주에 4장 reduction으로 돌아오겠습니다.

삭제된 글에 있던 증명과 연습문제는 자고난 다음에 올릴게요.

추천 비추천

8

고정닉 4

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2864 설문 비난 여론에도 뻔뻔하게 잘 살 것 같은 스타는? 운영자 24/06/03 - -
1374 ⚠애니 sicp 다시 읽어 볼까나 ㅇㅅㅇ 초코냥갤로그로 이동합니다. 18.12.23 155 0
1373 ⚠애니 근데 대학과정을 커헠이말대로 하는거면 맞는말같기도 하고 [4] ㅇㅇ(126.164) 18.12.23 283 0
1372 % 프로그래밍 정규과목에 넣어야한다 [3] 점진적크리스마스해커톤(58.126) 18.12.23 284 1
1370 % C# 하니까 편하네 [2] 0xrgb갤로그로 이동합니다. 18.12.23 121 0
1369 % 답은 '김포프 헬로코딩' 이다 ㅇㅇ(223.39) 18.12.23 222 0
1368 % 프로그래밍 교육과 윤성우에게 불만인것 [30] 커헠갤로그로 이동합니다. 18.12.23 777 2
1367 % 오늘 하루 종일 아이디어 짜냈는데 [6] 기괴공학도갤로그로 이동합니다. 18.12.23 98 0
1366 % 러스트로 Oauth인증 요청하려면 [2] 다메즈마(115.21) 18.12.22 88 0
1365 정보 Rust 재미있는 trait 문제 해설 [2] ㅇㄹ갤로그로 이동합니다. 18.12.22 82 0
1364 % 이맥스 창바꾸기처럼 편한기능이없던데 [2] 로드투로드갤로그로 이동합니다. 18.12.22 83 0
1363 % std::function은 박싱에 가상호출 하는거지? [15] ㅇㄹ갤로그로 이동합니다. 18.12.22 136 0
1362 질문 Recursion님 Prolog 코드 요약해주실 수 있나요? 기괴공학도갤로그로 이동합니다. 18.12.22 63 0
1361 % 패키지에 document comment 추가했음 ㅇㄹ갤로그로 이동합니다. 18.12.22 44 0
1360 ⚠애니 이건 애니짤로 쳐야함? [5] liliilli(125.188) 18.12.22 139 0
1359 % TSTL v2.1 & TGrid v0.1 릴리즈했습니다. [1] 삼촌(218.145) 18.12.22 372 5
1358 연재 Rust 재미있는 trait 문제 [2] ㅇㄹ갤로그로 이동합니다. 18.12.22 119 1
1357 % 테조스에서 오카멜 교육 진행함 [3] Recursion갤로그로 이동합니다. 18.12.22 123 0
1356 질문 플밍 언어 만드는데 필요한 지식이 담긴 책이 [2] ㅇㅇ(203.226) 18.12.22 95 0
1355 % uefi 단점이 있네 ㅇㄹ갤로그로 이동합니다. 18.12.22 143 0
1354 % 아이디어가 떠올랐다 [5] 기괴공학도갤로그로 이동합니다. 18.12.22 95 0
1352 % 저번 네이버에서 사용자 파라매터를 get으로 보내서 까였잖아. 다메즈마(211.36) 18.12.22 81 0
1351 % std::function 최적화 먹이면 가상 함수 비용이랑 거의 같나보네 [3] liliilli(125.188) 18.12.22 146 0
1349 ⚠애니 프롣트 제대로하는 애들도 별로없다더라 [1] ㅇㅇ(126.151) 18.12.22 97 0
1348 % 그냥 C 돌려본지 너무 오래됐는데 gcc 옵션 안줘도 C99 돌아가지? [18] ㅇㅇ(123.141) 18.12.22 236 0
1347 % 앞으로 뭘 해야 프로그래머가 될 수 있을까? [2] 다메즈마(115.21) 18.12.22 90 0
1346 % 일단 오늘은 여기까지. 다메즈마(115.21) 18.12.22 56 0
1345 % 근데 rust 배워서 돈벌수있나요 [1] 543543갤로그로 이동합니다. 18.12.22 78 0
1344 % pgAmin4는 결국 네이티브 GUI포기함. [6] 다메즈마(115.21) 18.12.22 121 0
1343 % 버전업을 하면 기분이 3번 좋아짐 ㅇㄹ갤로그로 이동합니다. 18.12.22 49 0
1342 % 두시다. 지금까지 한 거 말하고 자야지... [1] 다메즈마(115.21) 18.12.22 76 0
1341 ⚠애니 하루걸린 리팩토링 전후 [5] ㅇㄹ갤로그로 이동합니다. 18.12.22 149 1
1340 ⚠애니 [애니짤&질문]이맥스 쓰는넘 = 푸갤럼일 확률 몇프로 올라감? [3] 매미노갤로그로 이동합니다. 18.12.22 118 0
1339 % Rust 소유권 문제 해설 ㅇㄹ갤로그로 이동합니다. 18.12.22 81 0
1338 % 김태훈 어디서 들어봤다했더니 ㅇㅇ(121.174) 18.12.22 103 0
1337 % emacs 깔았는데 에디터를 못열고 있따 [6] 매미노갤로그로 이동합니다. 18.12.21 112 0
1336 % DB는 postgresql 써야지... [1] 다메즈마(115.21) 18.12.21 118 0
1335 % 아까 만들던 거 이어서... [1] 다메즈마(115.21) 18.12.21 109 0
1334 연재 Rust 재미있는 소유권 문제 [10] ㅇㄹ갤로그로 이동합니다. 18.12.21 184 0
1333 % 깃헙갤에서 러스트의 위치 ㅇㅅㅇ 메루룽갤로그로 이동합니다. 18.12.21 155 4
1332 % Hypervisor 중에 가장 유명한 넘이 먼가요 ㅇㅇ(175.223) 18.12.21 41 0
1331 % 슈퍼컴퓨팅대회 저거 병렬화대회 맞는거같은데 [6] 로드투로드갤로그로 이동합니다. 18.12.21 146 0
1330 % 진짜 자바스크립트하면서 이맥스 Howdoi 패키지쓰니까 로드투로드갤로그로 이동합니다. 18.12.21 76 0
1329 % PJAX연습 끝 [2] 다메즈마(115.21) 18.12.21 89 0
1327 % Openai 김태훈씨 경력 진짜개씹넘사벽이었네;; [9] ㅇㅇ(223.62) 18.12.21 1460 0
1326 ⚠애니 루비 마스코트 너무 귀여움 ㅇㅅㅇ 메루룽갤로그로 이동합니다. 18.12.21 108 0
1324 % AsRef 트레잇은 &쓸때 특권이 있음 ㅇㄹ갤로그로 이동합니다. 18.12.21 71 0
1323 % 현재 생각 중인 rust로 만드는 웹 사이트 구조 [2] 다메즈마(115.21) 18.12.21 240 0
1322 % 재밌는 러스트 trait 문제 [7] ㅇㄹ갤로그로 이동합니다. 18.12.21 165 0
1320 % 페북에 경영학과 인공지능이라는 문과시험 시험지유출됬다 [5] 로드투로드갤로그로 이동합니다. 18.12.21 204 1
1318 % 역사적으로 오래된 언어들은 거의 한사람이 첨에 만들어서 작동시킨것같던데 [3] 로드투로드갤로그로 이동합니다. 18.12.21 109 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2