- I remember back in the day
우리는 어떤 사람이 마음에 들면, 그 사람에 대해서 작은 거라고 할지라도 더 알고 싶어서 발버둥 칩니다. 멀리 갈것도 없습니다. 연예인에 삘꽂혀서 그 연예인의 나이, 취미, 혈액형 그리고 별 정확하지도 않은 키랑 몸무게 찾아다니느라 애쓰던 시절을 떠올려 보시지요. 그리고 노트북을 살때, 노트북에 꽂혀서 사소한 것 까지도 다 찾아내고 물어보고 알아내서 자신에 마음에 조금이라도 더 드는 상품을 사지요.
아이팟도 그 좋은 예인데요, 아이팟을 사고나서 온갖 해킹이며, 어플다 깔다가 하루가 지나갔던 그런 경험을 하신분도 있을 겁니다. 서론이 너무 기네요. 이번 포스트에서는 함수형언어를 이해하려고 무진장 애를 쓰다가 머릿속에 떠오른 게 있어서 적어보려고 합니다. 엄밀하지 못한 글일 수도 있으나, 따뜻한 피드백 많이 부탁드립니다. 차가운 피드백은... 아시져? ^^
- 기초학문?
개인적인 생각으로 우리가 흔히 기초학문이라 부르는 것들은 공통적인 특징이 있는 것 같습니다. 그리고 기초학문은 아마도 존재하지 않던 새로운 것들을 만들어 내는 쪽보다는 기존에 있던 것들에 새로운 의미를 부여하고 새로운 발견을 해나가는 쪽이 더 맞지 않나 합니다. 그래서 그 새로운것이 어떤건지 성질을 밝혀내고 알아내서 어떻게 응용이 될 수 있을지에 대한 단서를 제공하는게 아닌가 합니다.
- 그래서 뭐? 수학?
그런 기초학문중에 대표적인 하나를 꼽자면 수학을 꼽을 수 있을 것 같습니다. 수학이라는 학문도 사람들이 살면서 자연스럽게 뭔가를 세기 위해서 군만두만 먹으면서 벽에 작대기를 그으면서 표시하던게 점차 발전하여 지금의 우리가 쓰는 숫자도 아랍쪽 어디선가 발견이 되고 퍼지면서 사용되는거고, 그 도구에 '수'라는 이름을 붙이면서 시작된게 아닌가 합니다. 뭔가 분명히 존재하지만 명확하게 정의할 수 없을때, 거기에 이름을 붙이게 되면 우리는 그에 대한 연구를 시작할 수 있게 됩니다. 이름을 붙인다는 건 우리에게 상당한 지배력을 제공해 주기 때문입니다. 무진장 가깝지만 사귀자고 누구도 명확하게 이야기 하지않은 상태라면, 서로 뻘쭘하고 넘을 수 있는 선의 범위도 모호하지만 서로의 관계를 공식적으로 '연인'이라고 이름붙이게 되면 더 자연스럽게 애정행각(!)을 벌일 수 있는 법이지요. ^^;;
- 그래서 하고 싶은 이야기가 머꼬?
자, 다들 중~고등학교때 수학공부를 하고 문제를 풀던 때를 떠올려 보시지요. 수학은 정의와 공식으로 시작해서 정의와 공식으로 끝납니다. 정의나 공식은 이미 존재하는 무언가를, 그리고 그 무언가에 나타나는 패턴을 명확하게 나타내 보일 수 있는 수학적 도구입니다. 그리고 그런 정의와 공식에서 시작해서 또다른 정의와 공식이 그위에 쌓이게 되고 그런 것들이 계속 되면서 각각의 수학분야가 하나로 모이게 되는 대통합수학도 이루어 지는 거고 그렇게 하다보니 페르마의 마지막 정리 같은 난제도 해결이 될 수 있었습니다.
즉, 수학문제를 풀때 그 문제를 이루고 있는 각 요소가 뭔지 공식으로 정의를 해내고, 그 정의를 모아서 문제에 대한 공식을 도출해 냅니다. 그리고 그 공식을 통해서 문제를 해결하고, 동일한 패턴을 보이는 문제들을 풀어나갑니다. 가만히 생각해보면, 중간중간에 도출되는 값을 x,y같은 부호에 묶어주고, 도출된 공식을 부호로 표시하거나, 공식에 있는 부호를 공식으로 풀어내서 문제를 해결하곤 했습니다. 수학문제를 해결한다는 건 무엇을 어떻게 정의하느냐에 따라서 금새 풀리기도 아무리 싸매고 고생해도 안풀리곤 했던 거지요. 우리가 풀던 수학에선 x에는 하나의 값이나 공식만 정의할 수 있었고, 상태를 저장하는 거 역시 없었습니다.
- 그게 함수형 언어랑 뭔 상관?
최대공약수를 정의할 때 명령형 프로그래머는,
a와 b의 최대공약수를 계산 해내려면, 일단 a랑 b가 같은지 보는거야. 만약에 그렇다면, 둘중에 하나를 출력하고 끝나면 되는거지. 안 그렇다면, 둘중에 큰수를 두수의 차(빼기)로 바꾸고 다시 하면 돼
그리고 함수형 프로그래머는,
a와 b의 최대공약수는 a와 b가 같다면 a이고, a와 b가 같지 않다면 c와 d에 대한 최대공약수를 구하게 되는데 여기서 c는 a와 b중에 작은수가 되고, d는 그 두수의 차가 된다. 주어진 쌍의 숫자의 최대공약수를 구하려면, 이 공식을 세부적으로 계속 확장해 나간다음에 식이 끝날때까지 하나씩 수행하면서 줄여나가면 된다.
사실 이 글을 쓰게 된데에는 "Programming Language Pragmatics"에서 위의 문장을 보고서 든 생각을 바탕으로(제 맘대로 해석했습니다-_-) 기존에 수학에 대해서 생각해오던 것들을 추려서 쓴 것입니다. 위의 문장이 많은 것을 말해주는 것 같다는 생각이 듭니다. 명령형 프로그래머는 "어떻게"에 집중하는 반면에 함수형 프로그래머는 최대공약수 "무엇"인지를 정의하는데 중점을 둔다는 것입니다. 물론 F#은 Haskell과 같은 순수한 함수형언어는 아닙니다. 물론, 순수한 함수형 언어로도 사용할 수 있지만, 그건 F#의 역할이 아니라는게 개인적인 생각입니다.
- 아 거 말 되게 많네.
깊이도 없는 내용을 쓸데없이 길게말하느라 쓰는 저도 수고했고, 읽어주신 여러분도 수고하셨습니다.-_-;; 사실 함수형언어는 "왜 함수형 언어인가?"에 대한 질문에 답을 할 수 있어야 함수형언어와 친하게 지낼 수 있지 않을까 하는 생각이 듭니다. 명령형나라의 프로그래머와 함수형나라의 프로그래머는 서로 문제를 바라보는 관점이 다르기 때문이죠. "Why Functional Programming Matters?"와 같은 좋은 논문도 있어서 공부중이지만, 부족한 제머리와 부족한 시간은 깝깝하기만 하군요;; 아무튼, 제가 느끼는 것들은 이 공간을 통해서 계속 머리박아가면서 쓰겠습니다. 좋은 피드백으로 격려해주세요. 앞으론 차가운 피드백 이야긴 안하겠습니다.^^
-참고자료
1. Expert F#, Don Syme, Adam Granicz, Antonio Cisternino, APRESS.
2. Programming Language Pragmatics, 2nd Edition, Michael L. Scott, Morgan Kaufmann Publishers
3. 거짓의 사람들, 스캇 펙, 비전과 리더십
4. 페르마의 마지막 정리, 사이먼 싱, 영림카디널
5. 사고력을 키우는 수학책, 오카베 츠네하루, 을지외국어
ps. 왜 연재 계획도 없고, 이야기 했던 계획이랑도 틀린 포스트가 계속 올라오냐?
아직 아무도 지적하신 분은 없지만... 네 지당하신 지적입니다. 제가 연재라는 개념이 희박하고 분야에 대한 지식이 얉은 탓에 그렇게 되는 점 혹시 안좋게 보신 분들이 있다면 사과드립니다;;; 앞으로도 계속 그럴지도 모르기 때문에 지금쯤에는 사과를 해 드려야 나중에 한꺼번에 욕을 먹는 사태를 방지할 수 있을거 같아서 말이죠-_-;;;
'F#' 카테고리의 다른 글
| Welcome to F#(6) - 비교본능. (0) | 2009/04/23 |
|---|---|
| Welcome to F#(5) - 아주 조금씩 심화되는 탐색전. (10) | 2009/04/20 |
| Welcome to F#(4) - 과거와 배경을 좀 더 알고싶어. (4) | 2009/04/18 |
| Welcome to F#(3) - 사소한 탐색전. (3) | 2009/04/12 |
| Welcome to F#(2) - 두번째 만남. (6) | 2009/04/08 |
| Welcome to F#(1) - 첫만남. (8) | 2009/04/05 |




댓글을 달아 주세요
함수형 언어 자체에 대해서 이해가 쉽지는 않았는데, 이제 조금은 알 것 같은 느낌입니다... ^^
아 감사합니다;;;
아직 저도 명확하게 정리는 안되서요;;;
머리박다보니까 조금 생각이 나서 적긴했는데, 더 박아봐야겠더라구요-_-;;
수학의 정의와 함수언어가 비슷한 면이 많습니다.
수학에서 팩토리얼 정의를 보면 다음과 같죠?
fact n = n * fact (n-1) (단, n = 0 이면 1)
이것을 F# 으로 표현하면
let rec fact n = if n = 0 then 1 else n * fact (n-1)
또는
let rec fact n =
match n with
0 -> 1
_ -> n * fact (n-1)
으로 표현할 수가 있는데, 수학 표현과 비슷하지 않나요?
나만 그렇게 느끼나?
4CT& 페르마 정리 증명 심사오류 내부감사 직무유기 조사하라
아펠과 하켄의 1976 년경 4색 구분 정리 증명은 1200시간 컴퓨터작업이 필요하고, 와일즈의 1997 년경 페르마 정리 증명은 200 쪽 방대한 분량으로서, 간단명료한 증명 문제가 여전히 남아 있으며, 우리의 간명하고 완벽한 4색 구분 정리 증명과 페르마 정리 증명을 부인하는 수학자는 국내외에 아무도 없다.
심사의견 전체 오류임을 입증하는 다음 두 가지를 조사하라. 교육과학기술부 산하 공익법인인 대한수학회의 반례를 요구하는 방법도 있고, 수학 기초지식을 가진 제3자에게 감정 의뢰할 수도 있을 것이다.
첫째, 다음 세 가지 공식들은 모든 피타고라스 수를 구할 수 있다.
X=(2AB)^(1/2)+A, Y=(2AB)^(1/2)+B, Z=(2AB)^(1/2)+A+B
상기 공식은 c^2=A=Z-Y, 2d^2=B=Z-X 일 때 X=2cd+c^2, Y=2cd+2d^2, Z=2cd+c^2+2d^2 같이 된다.
위 공식은 c+d=r 일 때 X=r^2-d^2, Y=2rd, Z=r^2+d^2 같은 기존 공식이 된다.
둘째, [2^{(n-1)/n}+……+2^(2/n)+2^(1/n)](자연수)^{(n-2)/n} 과 (자연수)/(무리수) 는 항상 무리수가 된다.
2006.3.3. 투고논문에 대한 2006.6.12. 심사의견이 전체적인 오류임을 지적하며 공익법인 내부감사를 의뢰하였으나 부당업무에 대한 감사도 아니하고 회신조차 아니 함에도 주무관청이 이를 방치하고 있다.
* * * 09.11.17. 감사원장 조치내용 * * *
“귀하께서는 감사원에 민원 (접수번호 제2009-08868, 08881, 08955호)를 제출하셨습니다. 검토결과, 위 민원은 교육과학기술부에서 조사할 사항으로 판단되어 교육과학기술부로 하여금 이를 조사 처리하고 그 결과를 귀하께 회신하도록 하였음을 알려 드립니다.”
* * * 06.6.12.이후 공익법인 부당업무 * * *
첫째, 논문심사의견 전체오류이며 편집장이 잘못된 주장만 반복하고 07.1.5.이후 회신도 없다.
둘째, 부당업무 고발에도 자체 내부 감사를 실행하지 아니 한 잘못을 하고 회신도 없다.
셋째, 주무관청의 성의를 가지고 답변하라는 요청도 무시하는 잘못을 하고 회신도 없다.
4색 구분 정리 증명과 페르마 정리 증명 요약
4색 구분 정리 증명
[1] 한 점에 접하는 모든 지역들은 3색으로 충분히 구분된다.
[증명] 한 점에 접하는 지역들 중에서 한 지역을 선택할 때, 이 선택된 지역에 접하는 주변의 모든 지역들은 2색으로 충분히 구분되기 때문이다.
[2] 한 지역에 접하는 모든 지역들은 3색으로 충분히 구분된다.
[증명] 한 지역 내의 한 점과 주변 지역들의 경계선들이 한 지역의 경계선과 만나는 점들을 연결할 때, 이 지역들은 결국 한 점에 접하는 지역들과 마찬가지로서 3색으로 충분히 구분되기 때문이다.
[3] 한 지역과 한 지역에 접하는 주변의 모든 지역들을 구분함에는 4색으로 충분하다. 여기에서, 한 지역은 모든 모양의 무수한 지역들을 포함할 수 있다.
[증명] 한 지역에 접하는 주변의 모든 지역들은 3색으로 충분히 구분되기 때문이다.
2 가지 방법의 페르마 정리 증명
Xn+Yn=Zn
A=Z-Y, B=Z-X
X=G(AB)1/n+A, Y=G(AB)1/n+B, Z=G(AB)1/n+A+B, X+Y-Z=G(AB)1/n
{G(AB)1/n+A}n+{G(AB)1/n+B}n={G(AB)1/n+A+B}n
n=1 일 때, G=0 이고, n=2 일 때, G=21/2>0 임.
X=(2AB)1/2+A, Y=(2AB)1/2+B, Z=(2AB)1/2+A+B
c2=A=Z-Y, 2d2=B=Z-X 일 때,
X=2cd+c2, Y=2cd+2d2 and Z=2cd+c2+2d2
c+d=e 일 때, X=e2-d2, Y=2ed, Z=e2+d2.
페르마정리 증명 제1방법
Xn+Yn=Zn
(Xn/2)2+(Yn/2)2=(Zn/2)2
a=Zn/2-Yn/2, b=Zn/2-Xn/2
{G(ab)1/2+a}2+{G(ab)1/2+b}2={G(ab)1/2+a+b}2
G=21/2>0
Xn/2=(2ab)1/2+a, Yn/2=(2ab)1/2+b, Zn/2=(2ab)1/2+a+b
Xn={(2ab)1/2+a}2, Yn={(2ab)1/2+b}2, Zn={(2ab)1/2+a+b}2
홀수 n 에서 X, Y 와 Z 가 자연수일 때, 위식의 Xn, Yn 과 Zn 는 자연수이지만, 우변의 {(2ab)1/2+a}2, {(2ab)1/2+b}2, {(2ab)1/2+a+b}2 은 자연수가 될 수 없는 모순이 발생함으로 X, Y 와 Z 는 자연수가 될 수 없다. 그러나 짝수 n 에서는 위와 같은 모순이 발생하지 않는다. 한편, 짝수 n 에서는 모든 피타고라스 수가 거듭제곱이 될 수 없음으로 자연수 해를 가질 수가 없는 것이다.
페르마정리 증명 제2방법
{G(AB)1/n+A}n+{G(AB)1/n+B}n={G(AB)1/n+A+B}n
위 식에서 A=B 일 때, G=[{2(n-2)/n+…+21/n+1}n{2A(n-2)}]1/n 을 구할 수가 있고,
상기의 식들을 이용하여, 모든 자연수 A, B에서
G(AB)1/n 이 절대로 자연수가 될 수 없음이 증명된다.
[증명인: 이재율과 이유진]