나는 컴퓨터 공학과 출신이다. 공부를 하다보면 남이 짜놓은 방식을 공부해야 했다. 예를 들면 OS 공부를 할때 리눅스 커널 미로를 돌아다니면서 구조를 파악해야하는 그런 것들 말이다. 또 일일이 하드웨어를 생각하고 메모리를 고민하며 프로그래밍을 하는것은 귀찮고 인공적이라 느겨졌다. (그래서 나는 지금도 프로그래밍을 정말 못한다) 그런 점에서 나에게는 수학이 더 자연스럽게 느껴졌다. 발명 혹은 개발이 아니라 발견으로 느껴졌다. 그러다가 보잘것 없는 재능과 게으름 때문에 수학과에서 또 해매고 이도저도 아닌 낙오자로 살고 있지만 그것보다 지금 하고 싶은 말은 예전의 생각이 조금 바뀌었다는 것이다.
첫번째로 하고 싶은 이야기는 수학적 구조물에 대한 것이다. 수학에서 공부하는 실수의 개념은 어쩌면 실제를 덜 혹은 과도하게 반영하는 것 같다.(이게 말이 되는지는 모르겠지만.) 실수는 임의의 서로 다른 두 수 사이에 또 다른 수가 존재한다.( 0과 1사이, 0과 0.1 사이, 0과 0.01 사이....). 실수가 아니라 유리수만 해도 그렇다. 다르게 생각하면 임의의 수에 대해서 그보다 작은 수가 존재한다. 실수의 길이라는 개념은 측도론이라는 이론에서 다룬다. 직관적으로 보면 0부터 1까지의 직선의 길이를(단위를 생각하지 않는다면) 1로 보는 것은 당연해 보인다. 결국 길이를 잰다는 것은 실수의 모임들(예를 들면 0과 1 사이의 모든 실수의 모임) 에 숫자를 (길이 1)을 대입하는 것이다. 넓이도 부피도 길이의 2차원, 3차원의 비유로 생각할 수 있다. 다시말해서 길이를 재는 것이란 실수의 일부 모임에 따라 해당하는 길이를 대응시키는 것이다. 여기서 이론을 확장하다 보면 0부터 1 사이의 유리수의 집합은 길이가 0이되고 무리수의 집합은 다시 1이 된다. 기존의 집합에서 셀 수 있는 만큼의 수를 빼도 길이는 달라지지 않는다. 다만 실수의 모든 부분집합의 길이를 잴 수는 없다.그렇다고 가정하면 이론상에 서로 모순이 생기기 때문이다.여기까지는 기묘하지만 그럴수도 있다 싶다. 그런데 이런 무한이 존재하는 구조들을 보다보면 실제 우리가 지각하는 개념과 모순되는 상황이 생긴다. 예를 들면 하나의 구를 특정한 방법으로 유한번 쪼개서 이어 붙이면 넓이가 2배인 구를 만드는 것이 가능하다. 새부적인 과정을 보면 도중에 구를 조각낼 때 우리가 부피를 잴 수 없는 조각으로 자르기 때문에 그런 일이 발생한다. 이쯤에서 생각해보면 내가 공부했던 수학은 어디부턴가 실제에서 너무 멀리 날아가버린 듯한 생각이 자주 든다. 사람이 만들었기 때문인지 아니면 수학이 원래 사람의 한계를 벗어나서 그런지 모르겠으나..
학부 마지막 학년때였던가 인공지능 과목을 들을 때이다. 왜인지 모르겠으나 명제논리 1차술어논리를 잔뜩 다뤘다. 덕분에 나는 좋았는데 굉장히 싫어하는 학생들이 있었다. 중요한 것은 교수님의 사고방식이었다. 시험문제때 자세히 기억은 나지 않지만 T/F 문제 중에 유한한 것만 생각하면 맞지만 무한한 것에 대한 것에 대입하면 틀리는 문제가 있었다. 나는 별 생각없이 풀어서 맞았지만 틀린 친구가 나에게 의문을 제기했다. 무한한 경우에는 틀리지 않느냐 하고.. 그러고 보니 그런 것 같았다. 하지만 중요한 것은 그게 아니었다. 교수님에게 질문을 했을 때 교수님의 대답에서 충격적인 것은 무한한 경우는 생각하면 안된다는 것이었다. 물론 이론 컴과를 공부하는 교수님들은 그런것에 더 예민하겠지만 중요한것은 이것이다. 우리의 실제 삶에 무언가를 적용하려면 무한한 것에 대한 것을 다루는 것은 어떤 면에서 의미가 없다. 사람이(혹은 컴퓨터가) 무한하게 무언가를 한다면 결코 끝나지 않기 때문이다. 결과를 얻을 수 없다. 수학에서 무언가 명쾌하지 않은 것은 무한을 다룰 때가 많다. 수학은 무한을 다루다보면 논리적 정합성은 차치하고서라도 현실 개념과는 다른 이상한 세계로 빠져들고 만다. 또 그 내용을 현실로 적용할 수도 없다.
다시 인공물에 대해서 생각해 보면 결국 무언가를 유용하게 사용하려면 누군가는 정해진 방식(알고리즘)을 정해야 한다. 인공물을 만들어야 하는 것이다. 아무 지적인 임의의 판단을 하지 않고 정해진 규칙을 따르면 결과를 얻을 수 있는 방법이 있어야 사용할 수 있다. 프로그램을 누군가 만들어야 써먹을 수 있다. 수학에서는 존재 증명을 많이 하는데 예를 들면 특정 방법이 존재한다 혹은 특정한 것이 존재한다 라는 것이다. 그런 증명에는 보통 명확한 방법이 없다. 단지 있다고 증명한다고 써먹을 수는 없다. P NP 문제는 사실 어쩌면 중요하지 않다. 왜냐하면 그게 다르다고 가정하고 넘어가면 그만이니까. 리만 가설도 그렇다. 실제로 적용할 때는 그냥 참이라 가정하고 알고리즘을 만들면 그만이다. 그정도로 증명하기 어려운 내용들은 통념에 빗대어 가정해도 왠만하면 어긋나지 않는다. 그런 것들은 보통 무한을 다루거나 알고리즘이 없는(비구성적인) 내용을 다룰때 나타난다. 수학이 현실을 벗어날 때가 여기쯤이 아닌가 한다. 무한과 존재성만으로 구성을 무시하고 날아가 버릴 때...