Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

정보수학

실무한은 존재하는 것인가 그렇지 않은 것인가? SW엔지니어에겐 존재한다. 본문

카테고리 없음

실무한은 존재하는 것인가 그렇지 않은 것인가? SW엔지니어에겐 존재한다.

대칭,무한,랜덤 그리고 프로그래밍 2024. 5. 19. 22:51

 칸토어의 무한에 대한 탐구 덕에, 우리는 무한한 시간을 쏟지 않고도, 무한한 상태에 대해 무한번 비교하지 않고도 어떤 현상이 벌어질지 이해하게 되었다. (즉 1:1 대응 같은 작업을 통해) 기적과 같은 일이다.

 

사실은 비슷한 일이 또 있다. 이를테면 소수의 개수가 무한한가 라는 질문에 대해서도, 무한번 해보지 않고도 적절한 방법을 통해 증명을 할 수 있다. 유클리드는 이미 그런 선물을 우리에게 준 셈이다.

 

아무리 노력해도 정말 무한번 해야만 할 수 있는 일들이 있는데, 그 중 일부를 칸토어가해결한 셈이다. 무한번 실제 하지 않고도 말이다.

 

또다른 이야기를 위해 예를 들어보자.

 

1 = 0.99999..(무한번)

 

라고 하는데, 정말 그럴까?

 

이 질문은 간단하게는 두가지를 함의한다. 첫번째로 만약에 0.99999..를 구해나가는 과정이, 이 질문의 답에 영향을 끼쳐야 한다면, 사실 서로 같지 않을 수 있다. 즉 무한번 더하는 중간의 과정이 중요하다면, 1과 0,9999..는 다르다는 점이 첫번째이다. 이 양쪽의 두 값은, 서로가 거기에 다다르는 과정이 다르다. 같은 결과를 내는 함수이지만, 내부의 절차가 다른 컴퓨터 코드와 같다. 

 

 즉, 아래 두 함수의 차이와 같다.

 

  function A() {

    return 1;

  }

 

  function B() {

   a=0.999.... = (0.9+0.09+0.009+...)

   return a;

  }

 

 함수 A는 1을 곧바로 리턴할테지만, B는 영원히 리턴할 수 없다, 하지만 무한의 시간을 부여한다고 하면 B는 결국에는 어떤 값을 리턴하고 그 값은 A가 리턴하는 값과 같다(동치이다. 차이를 확인할 수 없다).하지만 조금 이상하다. B는 어차피 영원히 리턴할 수 없잖아요? 무슨 의미가 있나요? 라고 할 수 있지만, 놀랍게도 무한번 반복하면, 함수 B는 a값에 1을 리턴해야 한다(그래야 모순이 없다).

 

결국 두가지 함의를 모두 이야기한 셈인데, 그 값에 다다르는 과정은 다르지만, 본질적으로 그 값은 동치이다. 이는 무한의 존재를 따질 문제가 아니라, 과정과 결과를 구분하고, 실제 그 결과를 무한의 과정없이 얻을 수 있다는 점에서 수학적으로 두 값은 서로 같아 참이된다.

 

조금 다른 예시를 들어보자 1/3을 3번 더하면 값이 무엇인가. 당연히 1이다. 그런데 이 구하는 절차가 달라지면 무한이라는 애매한 절차가 끼어들게 될 수 있다.

 

예를 들면 a = 1/3을 할당하는 과정에서 a=0.3333...이기 때문이다. 사실은 0.9999..를 계산하는 것과 동일한 상황이다.

 

 function A() {

   return 1;

}

 

function B() {

   a=0.33333...(0.3+0.03...)

   return a*3;

}

 

어떠한 개발자도 이 1/3을 세번 더한 값을 얻기 위해서 B함수를 쓰지 않는다. 영원히 끝나지 않기 때문이다. 그러나 우리는 1/3을 다른 표기법으로 정의하여 선언하고, 3을 더해서 1이 나오게 할 수 있는 다른 코딩 방법을 알고 있고, 당연히 그렇게 코딩한다. 따라서 이 결과값은 1을 쉽게 구할 수 있다.

 

그렇게 개발자는 무한의 시간을 쓰지 않아도 이 계산을 우회하는 다른 방법을 알고 있다.

 

즉, 1/3이라는 값을 10진수로 나타내려면 무한의 시간이 걸리지만, 그냥 어떤 추상적인 값으로 정의하여 3번 더하면 무한의 시간이 걸리지 않는다. 수학에서도 이렇게 정의에 따라서 무한과 유한이 서로 교환되어 참이 될 수 있다. 논리적으로 문제가 없고(모순이 없고) 서로 다르지 않으면 같기 때문에 중간 절차의 변화는 별 영향이 없다.

 

 따라서 무한을 다룰때는 이렇게 "결과적으로 같은" 것이 중요하다. 그리고 무한에 대한 이해는, 무한의 과정이 필요한 계산을 유한한 시간에 끝낼 수 있게 한다. 인류는 어떤 계산을 위해서 여러가지 경로가 있음을 이해하게 된 것이다. 무한한 시간이 걸릴 수 있는 계산을, 유한한 시간안에 끝내는 방법을 종종 확보할 수 있다. 그리고 좀더 평이하게 생각해보면, 다른 절차로 무한한 시간이 걸릴 일을 유한한 시간안에 해결할 수 있게 변환한 것이다. 그리고 실제 그 값은 같다는 사실을 증명했다(모순이 없다)

 

 무한에 대한 논쟁은 그렇게 정리가 될 수 있다. 과정은 다르나 결과는 같은 그저 흔한 현상의 하나일 뿐이다. 오히려 구하기 불가능해보였던, 예측이 가능한, 기발한 도구다. 0.99999.. = 1 을 낯설게 생각하지 않아도 되는 이유다. 그리고 그러한 변환 속에 실무한은 당연히 존재한다. 실무한은 유한으로 가는 또다른 실질적으로 동일한 과정에 불과하다. 낯설어할 필요가 없다. 과정의 차이가 주는 혼돈과 결과적인 동치를 혼동할 필요가 없다. 결과만 인용한다고 하면, 마음놓고 활용해도 괜찮다는 것이 증명되었기 때문이다. 결국 우리는 무한한 시간이 지나면 발생할 일을 유한한 시간안에 알 수 있는 도구를 확보했을 뿐이다.