목록으로 돌아가기

YiMatrix · 아카데미 저널

『역경(周易)』 속에 숨겨진 알고리즘, 튜링 머신보다 3000년 앞서다

「대연지수 오십, 기용 사십유구」——『주역·계사』에 쓰인 이 문장을 코드로 번역하면 초기화, 반복, 종료 조건을 갖춘 알고리즘이다. 수학사, 컴퓨터 과학, 정보 부호화라는 세 가지 잣대로 역경 속 '수(數)'를 다시 읽는다: 그것은 신비주의가 아니라, 중국 고대인들이 가장 먼저 기록하고 오늘날에도 실행 가능한 알고리즘이다

南荒2026년 5월 30일약 9분
『역경(周易)』 속에 숨겨진 알고리즘, 튜링 머신보다 3000년 앞서다

"대연지수 오십, 기용 사십유구."

이 문장은 『주역·계사』에 쓰여 있다.

이해가 안 가도 괜찮다. 오늘날 프로그래머가 알아볼 수 있는 코드로 바로 번역하겠다——먼저 쉰 개를 취한다. 하나는 남겨두고 쓰지 않는다. 남은 마흔아홉 개를 두 더미로 나눈다. 하나를 뽑아 손가락 사이에 끼운다. 네 개씩 묶어 나머지를 센다. 이 과정을 열여덟 번 반복하여 괘(卦) 하나를 도출한다.

이것은 철학이 아니다.

이것은 아주 오래전에 쓰여졌지만 오늘날에도 실행 가능한 알고리즘이다.

이제 세 가지 잣대로 그것을 측정해보겠다: 수학사, 컴퓨터 과학사, 정보 부호화. 측정이 끝나면, 이 글을 쓴 사람이 한 일은 나중에 '계산'이라는 것을 명확히 설명한 사람들과 같은 일이었음을 알게 될 것이다.


1. 한 줄씩 역컴파일하기

먼저 그 원문을 한 문장씩 분해한다. 각 고문(古文)에 현대어 해석을 붙이고, 코드 개념에 대응시킨다.

「대연지수 오십, 기용 사십유구」

쉰 개의 시초(蓍草, 풀대, 고대인의 계산 도구로 주판알과 유사) 중 하나를 먼저 빼내어 움직이지 않고, 나머지 마흔아홉 개만 연산에 사용한다.

——이것은 초기화: 시작 값을 정의하는 것이다.

「분이위이이상량」

마흔아홉 개를 무작위로 두 더미로 나눈다.

——이것은 상태를 둘로 나누는 것이며, 전체 과정의 상태가 여기서부터 변화하기 시작한다.

「괘일이상삼」

한 더미에서 하나를 뽑아 손가락 사이에 끼운다.

——한 번의 확정적인 숫자 취하기 동작이다.

「섭지이사이상사시」

두 더미를 각각 네 개씩 묶어 센다.

——4를 단위로 한 번의 모듈로 연산을 수행하여 마지막에 몇 개가 남는지 본다.

「귀기어력이상윤」

세고 남은 나머지——한 개, 두 개, 세 개 또는 네 개——를 역시 손가락 사이에 끼워 기록한다.

——나머지를 임시 변수에 저장한다.

「고재력이고괘」

이 한 바퀴가 끝나면 일변(一變)이라 한다. 삼변(三變)이 한 효(爻)를 도출하고, 육효(六爻)가 모여 한 괘(卦)를 이룬다.

——이것은 반복종료 조건: 열여덟 번 반복하여 여섯 효를 모으면 멈춘다.

이 다섯 문장을 합치면 다음과 같은 코드가 된다. 코드를 이해하지 못해도 괜찮다——왼쪽 열은 동작이고, 오른쪽 샵(#) 뒤는 그에 해당하는 고문 원문이다. 한 줄씩 대응해서 보면 된다.

init   시초 = 50          # 대연지수 오십
use    시초 = 49          # 기용 사십유구 (하나를 남겨두고 움직이지 않음)
loop 18번:                # 십팔변
    무작위로 두 더미로 나눔           # 분이위이이상량
    하나를 뽑아 손가락 사이에 끼움     # 괘일이상삼
    네 개씩 묶어 나머지를 셈           # 섭지이사이상사시
    나머지를 저장함                   # 귀기어력이상윤
return 육효성괘                      # 고재력이고괘

이 코드에서 무엇이 보이는가.

초기화(쉰)가 있다. 상태 변수(손에 든 시초 개수, 매 라운드마다 변함)가 있다. 반복(십팔변)이 있다. 종료 조건(육효가 모이면 멈춤)이 있다.

초기화, 상태 변수, 반복, 종료 조건——이 네 가지는 어떤 프로그램의 뼈대이다.

저 문장은 뼈대가 갖춰져 있다.


2. 이것이 바로 튜링 머신이다

처음 이 내용을 다 읽고 나는 한참 동안 멈춰 생각했다.

이것은 철학자가 세계관을 표현하는 것이 아니다. 이것은 정확하고, 한 단계씩 실행할 수 있는 과정이다——같은 시작 조건을 주고, 같은 단계를 따라가며, 각 단계마다 명확한 규칙이 있다.

1936년, 영국의 수학자 튜링(Turing)은 『계산 가능한 수에 관하여(On Computable Numbers)』라는 논문을 썼다.

그 논문에서 그는 처음으로 한 가지를 엄밀하게 규정했다: 어떤 과정이 기계가 한 단계씩 실행하여 마지막에 결과를 계산할 수 있는가——후에 사람들은 이것을 '계산 가능'이라고 불렀다. 그가 제시한 기준은 매우 깔끔하다: 과정은 시작 상태가 있어야 하고, 하나씩 전이 규칙이 있어야 하며, 종료 조건이 있어야 한다. 이 세 가지를 만족하면 기계가 계산할 수 있는 것이다.

그가 이를 위해 구성한 추상 모델은 후에 튜링 머신이라고 불렸다.

오늘날 당신이 사용하는 모든 컴퓨터, 모든 스마트폰은 본질적으로 튜링 머신의 공학적 구현이다. CPU가 하는 일을 가장 낮은 수준까지 벗겨내면, '현재 상태를 읽고, 규칙에 따라 다음 상태로 이동하며, 정지할 때까지 반복'하는 것이다.

이제 그 쉰 개의 시초로 돌아가 보자.

시작 상태——쉰에서 마흔아홉을 취함. 전이 규칙——둘로 나누고, 하나를 뽑고, 넷씩 세고, 나머지를 기록함. 종료 조건——여섯 효가 모여 괘를 이룸.

하나도 빠짐없다.

대연지수는 시초와 사람의 손으로 실행할 수 있는 알고리즘이다——그리고 그 실행자는 최초의 튜링 머신이었다.

시간 축을 놓고 보면 더욱 흥미롭다.

1936년, 튜링은 한 편의 논문 전체를 통해 '어떤 과정이 계산 가능한가'라는 것을 처음으로 엄밀하게 설명했다.

그러나 『계사』라는 글을 쓴 고대인은 '알고리즘'이라는 단어도, 개념도, 심지어 자신이 무엇을 하고 있는지 설명할 추상적인 수학 언어조차 없었다.

튜링은 한 편의 논문으로 '알고리즘'이라는 것을 명확히 했다. 고대인은 그것을 명확히 하지 않았다——그들은 직접 그것을 실행했다.


3. 태극에서 64괘까지, 완벽한 이진 트리

역경에는 또 다른 구조가 숨겨져 있는데, 더 직접적이고 한눈에 알아볼 수 있다.

『계사상전』 제11장에는 다음과 같은 문장이 있다:

「역유태극, 시생양의, 양의생사상, 사상생팔괘」

오늘날의 말로 번역하면——

태극은 하나이다. 양의는 둘이다. 사상은 넷이다. 팔괘는 여덟이다.

하나가 둘이 되고, 둘이 넷이 되고, 넷이 여덟이 되며, 각 층마다 2를 곱한다. 팔괘가 다시 두 개씩 겹쳐져서, 팔 곱하기 팔, 육십사괘를 얻는다.

이 수열을 써보면:

1 → 2 → 4 → 8 → 16 → 32 → 64.

즉, 2의 0제곱부터 2의 6제곱까지이다. 6제곱은 한 괘의 여섯 효에 해당한다.

이것은 엄격한 이진 트리이다. 각 노드는 아래로 두 갈래로 나뉜다——음(陰) 또는 양(陽), 0 또는 1, 세 번째 가능성은 없다.

컴퓨터 과학에서 들어본 이름들——이진 탐색, 이진 힙, 허프만 부호화——모두 이 트리의 먼 친척이다. 오늘날 당신이 얼굴 인식으로 휴대폰 잠금을 해제할 때, 그 뒤에는 0과 1이 층층이 이분되는 과정이 있다.

하나, 둘, 넷, 여덟, 열여섯, 서른둘, 예순넷——이것은 단순한 숫자 놀이가 아니라, 하나의 트리가 성장하는 것이다.

태극에서 육십사괘까지: 완벽한 이진 트리

다시 그 '쉰'으로 돌아가자. 그것도 임의로 정해진 숫자가 아니라, 그 뒤에 산술이 있다.

『계사』 제9장에 따르면, 천수(天數, 홀수: 1, 3, 5, 7, 9)의 합은 스물다섯이고, 지수(地數, 짝수: 2, 4, 6, 8, 10)의 합은 서른이며, 합계는 쉰다섯이다.

그러나 연산에는 쉰을 사용한다——쉰다섯에서 다섯을 뺀 것이다.

이 단계는 솔직히 말해야 한다: 왜 하필 다섯을 빼는가? 고대인이 제시한 이유는 '오행(五行)'이라는 다섯 기초 수를 시스템 밑바탕으로 삼아 시스템 밖에 두고 연산에 참여시키지 않기 위해서였다. 이 단계는 약속이며, '쉰다섯'이라는 숫자에서 엄밀히 도출된 것은 아니다.

그리고 쉰에서 마흔아홉으로——쉰에서 다시 하나를 빼는 것——이 단계는 깔끔하다: 뺀 그 '하나'는 움직이지 않는 '태극'이며, 시작점 자체로서 계산에 들어가지 않는다.

쉰다섯, 쉰, 마흔아홉——이 숫자들은 각각 따로 놀지 않으며, 적어도 뒷부분은 고리처럼 맞물려 있다. 그것은 하나의 산술 문제이며, 어떤 신비도 아니다.


4. 그러나 역경은 알고리즘의 기원이 아니다

여기까지 말하고 나면, 사람들이 쉽게 흥분하여 오해할 수 있는 한 가지를 짚고 넘어가야 한다.

역경은 오늘날 컴퓨터 과학의 기원이 아니다.

라이프니츠(Leibniz), 그가 '팔괘에서 이진법을 발명했다'고 전해지는 사람——그는 1679년에 이미 독자적으로 이진법 원고를 썼으며, 그때 그는 어떤 중국 괘 그림도 본 적이 없었다. 그는 팔괘에서 이진법을 배운 것이 아니다.

그는 1703년에야 복희(伏羲)의 육십사괘도를 보고서야 깨달았다: 아주 오래전 중국인이 이미 이 체계를 써놓았다는 것을. 선후 관계는 정반대이다.

튜링도 마찬가지다. 그는 『계사』를 읽고 튜링 머신을 생각해낸 것이 아니다. 그는 케임브리지에서 서양 수리 논리학의 계보를 따라 스스로 '무엇이 계산 가능한가'라는 질문 앞에 도달했다.

(그 '아주 오래전'에 대해 말하자면——『계사』의 성문은 실제로는 다소 늦으며, 주로 전국시대에서 한나라 초기 사이에 쓰여졌다. 그러나 그것이 기록한 것은 더 일찍 사용되던 그 연산 체계이다.)

서로 다른 두 문명이, 수천 년의 시대를 사이에 두고, 서로를 전혀 본 적 없이, 각자 독립적으로 동일한 체계를 발견했다.

이 사실은 '역경이 기원이다'라는 주장보다 백 배 더 충격적이다.

누가 누구를 베낀 것이 아니다. 인간이 자연을 진지하게 관찰하고 규칙을 추상화하기 시작하면, 언젠가는 동일한 기저 구조를 만나게 된다.

계산 가능한 세계는 동서양을 가리지 않으며, 고금을 가리지 않는다. 그것은 거기에 있으며, 다른 방향에서 온 사람들이 다가와 그것을 만나기를 기다린다.


고대인에게는 키보드도, CPU도, '알고리즘'이라는 두 글자도 없었다.

그들은 쉰 개의 풀대로, 실행 가능한 연산 체계를 수천 년 동안 끊이지 않은 책에 써넣었다——먼저 세상을 세고, 상태를 부호화하며, 단계적으로 추론하고, 마지막으로 눈앞의 상(象)으로 환원했다.

오늘날 우리는 이 체계를 알고리즘이라고 부른다. 그들은 단지, 세상을 진지하게 관찰했을 뿐이다.


계속 읽기

추천

목록으로 돌아가기