수학자들은 자주 이름을 붙입니다. 원의 둘레와 지름의 비율을 발견했을 때, 그것을 그냥 "약 3.14159…"라고 부를 수도 있었습니다. 그런데 어느 순간 누군가가 그 수에 이름을 붙였습니다. π, '파이'. 이름이 생기자마자 이 수는 단순한 계산 결과에서 벗어나 하나의 도구가 되었습니다. 파이를 모르는 사람도 "파이만큼"이라는 말로 원을 이야기할 수 있게 되었고, 수학자들은 파이를 한 글자로 써 내려가며 복잡한 공식을 단숨에 정리했습니다. 이름은 도구화의 시작입니다.
또 하나의 수가 있습니다. 연속 복리의 밑, 자연성장의 곡선, 정보이론에서 가장 효율적인 진법의 밑으로 알려진 수. 오일러가 발견하고 e라는 기호를 받은 수입니다. e ≈ 2.71828…
e에 대해 수학 시간에 배운 기억이 있으시다면, 대부분 "복리 계산에 쓴다더라" 혹은 "자연로그의 밑이다" 정도로 알고 계실 겁니다. 그런데 e는 π처럼 널리 불리는 이름을 갖지 못했습니다. 알파벳 소문자 e, 그것이 전부입니다. 이 수를 일상의 말로 부를 방법이 없었습니다.
크라우니 진법은 여기서 시작합니다. 이 수에 이름을 붙이는 것입니다.
---
π를 '파이'라 부르듯, 우리는 e를 '크(Cr)' 라 명명합니다.
'크라우니'의 앞 두 글자를 따왔습니다. 영문 약자는 Cr, 크라우니에서 e를 상징하는 기호입니다. 이 수의 역수, 즉 1/e ≈ 0.36788…은 '카(Ka)' 라 부릅니다. 크의 반대, 수축의 보폭입니다.
이름을 붙이는 이유는 단순합니다. 이 수를 매번 "2.71828…"이라고 쓰는 대신, "크(Cr)만큼 팽창했다"고 말할 수 있어야 하기 때문입니다. 크와 카가 있어야 비로소 이 수체계를 언어로 다룰 수 있습니다.
그런데 오일러의 e와 크라우니의 Cr은 수치는 같아도 의미가 다릅니다.
오일러의 e는 시간의 산물입니다. "원금이 연속으로 복리 성장할 때 1년 후 얼마가 되는가"라는 질문의 답이 e입니다. 시간이 흐르면서 연속으로 증가하는 과정, 즉 미분방정식의 해에서 e가 등장합니다. e의 본질은 연속적 시간 속 성장률입니다.
크라우니의 Cr은 다릅니다. 공간의 팽창 규격입니다. 연속적 시간이 아니라, 불연속 양자상태들이 빈틈없이 공간을 채워 나갈 때 충돌도 공백도 없이 배치될 수 있는 임계 보폭이 바로 Cr입니다. 우주가 팽창하면서도 붕괴하지 않는 이유는 무언가가 그 속도를 자연스럽게 조절하기 때문입니다. Cr은 그 조절값입니다.
같은 숫자, 다른 이야기. 그러나 이름을 붙이지 않았다면 이 차이조차 말할 수 없었을 것입니다.
---
"진법"이라는 말이 나오면 많은 분이 뒤로 물러섭니다. 2진법, 10진법처럼 컴퓨터 수업에서 들었던 딱딱한 개념처럼 느껴지기 때문입니다.
그런데 진법은 본질적으로 이런 질문입니다. "한 자리에서 몇 가지 상태를 구분할 수 있는가?" 10진법은 한 자리에 0부터 9까지 열 가지. 2진법은 0과 1 두 가지. 그렇다면 자연상수 e를 밑으로 하는 진법은? 하나의 자릿수로 정보를 담을 때 가장 효율적인 밑이 e라는 것이 수학적으로 증명되어 있습니다.
단, e진법은 그 자체로 구현할 수 없습니다. e는 무리수라서 정수 진법이 아니기 때문입니다. 그래서 크라우니 진법은 다른 길을 택합니다. e의 정수 격자를 사전에 계산해 두고, 연산할 때는 그 격자를 찾아 매칭합니다. 복잡한 부동소수점 계산 없이, 미리 만들어 둔 표를 보고 맞추는 방식입니다. 요리로 비유하면, 재료를 그때그때 저울에 달아 계산하는 것이 아니라, 검증된 레시피에 적힌 "한 컵, 두 숟갈"처럼 미리 정해진 눈금을 쓰는 것입니다.
이름을 붙이는 행위가 없었다면 이 수체계는 수식 안에만 머물렀을 것입니다. 크라우니 진법은 e에 이름을 붙이고, 그것을 격자로 만들고, 다시 언어로 부를 수 있도록 한 계단씩 내려옵니다. 그 첫 계단이 바로 이 장이 하는 일입니다.
이름을 붙이는 것. 그것이 도구화의 시작이고, 선언의 시작입니다.
크라우니 진법에는 세 주인공이 있습니다. 크(Cr), 카(Ka), 그리고 음(Um)입니다. 이 셋을 이해하면 이 수체계 전체가 열립니다.
크(Cr) = e ≈ 2.718 은 팽창의 보폭입니다. 어떤 값이 커지고 싶을 때, 크의 격자를 타고 올라갑니다. 1에서 시작해 크 하나를 올라가면 약 3, 두 개를 올라가면 약 7, 세 개면 약 20, 이렇게 e의 거듭제곱을 따라 계단처럼 뻗어 나갑니다.
카(Ka) = 1/e ≈ 0.368 은 수축의 보폭입니다. 크의 역수입니다. 어떤 값이 작아지고 싶을 때, 카의 격자를 타고 내려갑니다. 1에서 시작해 카 하나를 내려가면 약 0.368, 두 개면 약 0.135, 세 개면 약 0.050. 빠르게 0을 향해 수렴합니다.
음(Um) 은 조금 다릅니다. 팽창도 수축도 아닌, 그 두 움직임 사이에서 생겨나는 잉여와 오차를 품어 안는 바다입니다. 격자에 딱 맞지 않는 값의 차이, 연산 중 생기는 찌꺼기, 시스템이 처리하지 못한 나머지들이 모두 이 바다로 흘러들어 갑니다.
세 요소를 가장 쉽게 느끼는 비유가 있습니다. 기어박스를 생각해 보세요. 1단에서 출발해 2단, 3단으로 올라가는 것이 크(팽창). 고속도로에서 내리막을 앞두고 5단에서 4단, 3단으로 내려가는 것이 카(수축). 그리고 클러치를 밟는 순간, 기어가 바뀌는 그 짧은 사이의 떨림 에너지가 음(잉여)으로 흡수됩니다. 엔진 가속의 충격이 운전석으로 전달되지 않는 이유는 그 떨림을 어딘가가 받아내기 때문입니다.
---
크라우니 진법에서 핵심 원리가 하나 있습니다. 방향과 보폭은 역할이 다르다는 것입니다.
방향을 담당하는 것은 4상(티·옴·타·음)입니다. 티(Ti)는 증폭, 앞으로, 위로의 방향. 타(Ta)는 감소, 뒤로, 아래로의 방향. 옴(Om)은 중립, 대기의 상태. 음(Um)은 기저, 흡수입니다.
보폭을 담당하는 것이 크와 카입니다. 티 방향으로 크 보폭만큼 나아가면 2.718배 팽창. 타 방향으로 카 보폭만큼 수축하면 0.368배로 줄어듦.
나침반과 두 발의 보폭. 나침반이 방향을 알려주면, 발이 그 방향으로 한 걸음, 두 걸음 움직입니다. 나침반과 발이 합쳐져야 비로소 이동이 완성됩니다.
이 분리가 중요한 이유는 유연성 때문입니다. 방향을 바꿔도 보폭의 규칙은 그대로이고, 보폭을 조절해도 방향의 규칙은 흔들리지 않습니다. 각자의 역할이 명확해서 하나가 바뀌어도 전체가 무너지지 않습니다.
---
크와 카의 격자는 실행 중에 계산하지 않습니다. 사전에 만들어 두고 찾아 씁니다. 이것이 크라우니 진법의 계산 전략입니다.
| 단계 | 크(팽창) Crⁿ | 호출 정수 | 카(수축) Kaⁿ |
|---|---|---|---|
| 0 | 1.000 | 1 | — |
| 1 | 2.718 | 3 | 0.368 |
| 2 | 7.389 | 7 | 0.135 |
| 3 | 20.085 | 20 | 0.050 |
| 4 | 54.598 | 55 | 0.018 |
| 5 | 148.413 | 148 | 0.007 |
| 6 | 403.429 | 403 | 0.002 |
| 7 | 1096.633 | 1096 | 0.001 |
표의 '호출 정수' 열에 주목하세요. 실제 Cr³은 20.085이지만, 이 시스템에서는 그냥 20이라고 씁니다. 소수점 이하는 음 바다로 보냅니다. Cr⁷은 1096.633이지만 1096으로 씁니다. 0.633은 음이 받아 냅니다.
이 접근 방식은 정밀도를 포기하는 것이 아닙니다. 정밀도의 책임을 분산하는 것입니다. 연산 회로는 깔끔한 정수만 다루고, 소수점 이하의 미묘한 차이는 음이 관리합니다. 비유하자면 회사의 재무 담당자가 원 단위까지 장부를 맞추는 동안, 조직의 유연성 예비비가 예상치 못한 소액 지출을 조용히 흡수하는 것과 같습니다.
---
음에 대해 한 가지 오해를 바로잡아야 합니다. 음은 버려지는 쓰레기가 아닙니다.
음은 시스템의 허파입니다. 폐는 우리 몸에서 산소를 공급하는 것 이상의 일을 합니다. 혈액의 pH를 맞추고, 체온을 조절하고, 이산화탄소를 내보내며 과호흡도 조절합니다. 몸이 갑자기 뛰어도 폐가 그 충격을 완충해 줍니다.
음 바다가 정확히 그 역할을 합니다. 크와 카의 격자에서 딱 맞지 않는 값이 생겨날 때마다, 음이 그것을 품어 안습니다. 연산 오차가 폭발해 전체 시스템을 뒤흔드는 일이 없도록 흡수합니다. 그리고 나중에 필요할 때, 그 잉여 에너지는 다시 쓸 수 있는 자원으로 대기 상태에 머뭅니다. 버린 것이 아니라 저장한 것입니다.
크·카·음 이 세 요소가 함께 있어야 크라우니 진법이 작동합니다. 크와 카만 있다면 격자에 딱 맞지 않는 모든 값은 오차가 되어 시스템을 불안하게 만들 것입니다. 음이 있어야 비로소 어떤 값이 들어와도 흔들리지 않는 수체계가 됩니다.
학교에서 수학을 배울 때 우리는 이렇게 배웠습니다. 15와 5를 더하면 20, 20에서 5를 빼면 15. 이 방식은 직관적이지만 한 가지 전제가 있습니다. 모든 수를 정밀하게 맞춰야 한다는 것입니다. 15.7을 더하고 싶다면 15.7을 정확히 표현해야 하고, 15.3을 빼고 싶다면 15.3을 정확히 다뤄야 합니다.
그런데 크라우니 진법은 다른 방식을 선택합니다. 덧셈과 뺄셈 대신, 프레임과 거주자라는 개념을 씁니다. 이것을 셀-거주자 모델(Cell-Resident Model)이라고 부릅니다.
어떤 값이 들어올 때, 이 값을 그것보다 살짝 큰 크라우니 격자에 넣습니다. 값이 격자 안에 깃들어 삽니다. 그리고 격자와 값의 차이, 즉 잉여는 음 바다로 보냅니다. 딱 맞추려 하지 않습니다. 들어가고 남으면 흘려 보냅니다.
이 세 단계를 차례로 살펴봅니다.
---
어떤 값이 시스템에 들어옵니다. 예를 들어 15.7이라는 값입니다.
첫 단계는 이 값을 덮을 수 있는 가장 가까운 크라우니 격자를 찾는 것입니다. 격자표를 보면 Cr³ = 20입니다. 15.7보다 크고, 가장 가까이에 있는 크라우니 격자는 20입니다. 이것이 올림프레임(Ceiling Frame)입니다.
'올림'이라는 이름이 붙은 이유가 있습니다. 값을 있는 그대로 쓰지 않고, 위로 올려서 격자에 맞추기 때문입니다. 천장을 올려다보듯이, 값 위에 덮을 격자를 찾는 것입니다.
방향이 증폭(티)이면 크 격자를 씌우고, 감소(타)면 카 격자를 씌웁니다. 여기서 이전 장에서 말한 방향과 보폭의 분리가 작동합니다. 방향(티/타)이 먼저 결정되고, 그에 맞는 격자가 씌워집니다.
---
올림프레임이 정해지면, 그 안에 실제 값이 들어갑니다. 15.7이 20이라는 프레임 안에 들어오는 것입니다.
그런데 이 과정에서 소수점을 버립니다. 15.7은 15가 됩니다. 소수점 이하는 음 바다로 보내 버리는 것입니다. 이렇게 정수화된 값, 15를 깃든수(Resident Number)라 부릅니다. 프레임이라는 집에 깃들어 사는 값입니다.
깃든수는 항상 정수입니다. 프레임도 정수(격자의 호출 정수), 깃든수도 정수. 이 시스템은 정수만 다룹니다. 소수점은 음이 받아 가기 때문입니다.
---
올림프레임(20)에서 깃든수(15)를 빼면 5가 남습니다. 이 5가 음덤프(Um Dump)입니다. 잉여 에너지, 처리되지 않은 차이가 음 바다로 내려가는 과정입니다.
프레임 20에서 거주자 15가 살고 있을 때, 5만큼의 빈 공간이 생깁니다. 이 공간은 버려지지 않습니다. 음 바다에 예치됩니다. 나중에 비슷한 연산이 일어날 때 이 잉여가 자원으로 돌아올 수 있습니다.
회사의 예비비와 같습니다. 어떤 프로젝트 예산을 1000만 원으로 잡았는데 실제로 850만 원이 쓰였다면, 남은 150만 원은 회사 예비금으로 돌아갑니다. 사라지지 않고, 다음에 쓰일 자원이 됩니다.
---
입력값: 15.7 (증폭 방향, 티)
1단계 — 올림프레임: Cr³ = 20 (15.7을 덮는 가장 가까운 크 격자)
2단계 — 깃든수: 15 (소수점 이하 0.7은 음 덤프)
3단계 — 음덤프: 20 - 15 = 5 (음 바다로)
결과: 프레임 20 안에 깃든수 15, 음 5 예치.
이 전 과정이 O(1), 즉 고정된 한 번의 연산으로 끝납니다. 격자표를 한 번 찾고, 빼면 끝입니다. 값이 아무리 크고 복잡해도 과정은 항상 이 세 단계입니다.
---
크라우니 진법에서 뺄셈은 위상 반전으로 대체됩니다. 15에서 7을 빼는 것이 아니라, 7을 타(감소) 방향으로 뒤집어서 더하는 것입니다. 부호비트가 사라집니다.
이것은 전자회로에서 의미 있는 효율입니다. 덧셈 회로와 뺄셈 회로를 따로 만들지 않아도 됩니다. 방향 비트 하나만 있으면 됩니다. 게이트 수가 절반이 됩니다.
덧셈과 뺄셈을 버리고 방향과 격자로 대신하는 것, 이것이 셀-거주자 모델이 전통적 사칙연산에 비해 달리 생각하는 핵심입니다. 더 복잡한 것처럼 보이지만, 실제로 연산 회로는 단순해지고 오차 처리는 음이 대신 맡아 자동화됩니다.
우주에서 블랙홀은 두려움의 대상입니다. 빛조차 빠져나오지 못하는 무한 밀도의 공간. 한번 들어가면 나오지 못한다는 공포. 그래서인지 많은 사람이 블랙홀을 일종의 쓰레기통처럼 상상합니다. 무엇이든 집어삼켜 사라지게 만드는 공간이라고.
그런데 물리학자들의 관점은 다릅니다. 블랙홀은 정보를 파괴하지 않습니다. 그 안에서 무언가가 일어나고 있을 뿐, 우리가 볼 수 없을 뿐입니다. 블랙홀의 경계, 사건의 지평선(Event Horizon) 너머는 우리의 관측 범위 밖이지만, 그 너머에도 무언가가 있습니다.
크라우니 진법의 음(Um) 레이어는 이 블랙홀에서 영감을 받았습니다. 음은 모든 잉여와 오차를 삼키는 공간이지만, 그것을 파괴하지 않습니다. 저장합니다.
---
크라우니 수체계에는 두 개의 공간이 있습니다.
가시공간 — 사건의 지평선 안
티(Ti)·옴(Om)·타(Ta)가 1:1:1로 균형을 이루는 공간입니다. 화면에 표시되는 값, 거래로 오가는 숫자, 운영체제가 처리하는 명령들. 우리가 눈으로 보고 손으로 다루는 모든 것이 이 공간에 있습니다. 총량은 3입니다. 세 방향이 균형을 이룹니다.
블랙홀 공간 — 사건의 지평선 너머
음(Um)이 3 이상 쌓이는 공간입니다. 잉여·오차·역기전력·계산 찌꺼기들이 모두 이곳으로 흘러듭니다. 눈에 보이지 않습니다. 측정하기 어렵습니다. 그러나 이 공간이 있기 때문에 가시공간은 항상 깔끔하게 유지됩니다.
두 공간은 동시에 존재합니다. 한 쪽이 처리할 수 없는 것을 다른 쪽이 받아 냅니다. 이 역할 분담이 시스템 전체를 안정하게 만듭니다.
---
잠깐 음이 없는 세계를 상상해 봅시다.
어떤 연산이 정확히 격자에 맞아 떨어지지 않습니다. 15.7이라는 값을 처리했는데, 격자는 15와 20밖에 없습니다. 음이 없다면 이 0.7은 어디로 가야 할까요? 반올림을 해서 16으로 만들까요? 그러면 원래 값과 달라집니다. 버릴까요? 그러면 정확성이 손상됩니다. 계속 오차를 누적시킬까요? 그러면 연산이 쌓일수록 오차가 폭발합니다.
현실의 많은 시스템이 이 문제와 씨름합니다. 부동소수점 연산에서 "0.1 + 0.2 = 0.30000000000000004"가 되는 이유가 여기 있습니다. 컴퓨터가 이진법으로 소수를 정확히 표현하지 못하기 때문에 미세한 오차가 누적됩니다.
음 레이어는 이 문제의 구조적 해법입니다. 오차를 없애는 것이 아니라, 오차를 품는 공간을 처음부터 설계에 넣습니다. 가시공간에서는 항상 깨끗한 정수만 오갑니다. 음이 모든 소수점 이하를 책임지기 때문입니다.
---
현실의 시스템에서 음 레이어는 세 가지 다른 모습으로 나타납니다.
하드웨어에서의 음: 모터 제어 시스템에서 음은 역기전력 흡수 회로입니다. 모터가 급제동할 때 발생하는 전류 역류를 받아내는 배터리나 저항기. 이것이 없으면 과전류로 회로가 손상됩니다. 음이 있어야 모터가 안전하게 멈출 수 있습니다.
소프트웨어에서의 음: 메모리 시스템에서 음은 가비지 컬렉터(GC)와 예비 버퍼입니다. 프로그램이 더 이상 필요하지 않은 데이터를 흘려 보내면, GC가 그것을 모아 재활용 가능한 메모리로 돌려놓습니다. 오버플로가 발생하지 않도록 미리 공간을 확보합니다.
금융에서의 음: 거래 시스템에서 음은 리스크 헷징 풀입니다. 매수와 매도가 정확히 맞아떨어지지 않을 때 생기는 차이를 흡수하는 예비 자금. 음이 있어야 작은 불균형이 시장 전체의 충격으로 번지지 않습니다.
이름만 다를 뿐, 모두 같은 역할을 합니다. 주 시스템이 처리하지 못하는 잉여를 받아 안전하게 보관하다가 필요할 때 돌려주는 것.
---
가시공간에서 거대한 양수와 음수가 충돌했다고 상상해 보세요. 더하면 어마어마한 수가 되거나, 빼면 음수가 됩니다. 이 수들이 계속 쌓이면 어떻게 될까요? 일반 컴퓨터에서는 정수 오버플로가 발생합니다. 표현 범위를 넘어서면 값이 갑자기 음수로 바뀌거나 예측 불가능한 동작을 합니다.
크라우니 진법에서는 그런 충돌이 일어나기 전에 그 찌꺼기가 모두 음으로 내려갑니다. 가시공간의 값들은 항상 크라우니 격자 안에 있고, 격자를 벗어나는 잉여는 음이 받습니다. 이론적으로 가시공간은 오버플로할 수 없습니다.
이것이 음 기저레이어가 제공하는 수학적 보증입니다. 시스템이 절대 과열되거나 붕괴하지 않는다는 구조적 약속. 오차가 없는 것이 아니라, 오차가 어디로 가는지 처음부터 정해 두었다는 약속.
사건의 지평선 너머의 블랙홀처럼, 음 레이어는 보이지 않지만 시스템이 안정적으로 돌아가게 하는 근거입니다.
앞 장들에서 우리는 크라우니 진법의 개념을 이야기했습니다. e를 밑으로 하는 격자, 크와 카의 보폭, 음 바다. 그런데 아름다운 수학이 현실의 칩 위에서 어떻게 돌아갈 수 있을까요?
FPGA(Field Programmable Gate Array)는 하드웨어 논리를 직접 프로그래밍할 수 있는 칩입니다. 이 칩은 철저하게 0과 1, 2진법으로만 동작합니다. 크라우니 진법의 이상적인 값 e = 2.71828…을 2진법 칩 위에서 어떻게 구현할 수 있을까요?
이 장은 그 다리를 놓는 이야기입니다.
---
4상(음·옴·티·타)을 표현하려면 최소 2개의 비트가 필요합니다. 2비트로 만들 수 있는 조합이 정확히 4개이기 때문입니다.
| 2비트 | 상 | 의미 |
|---|---|---|
| 00 | 음(Um) | 기저, 잉여 흡수, 가장 낮은 에너지 상태 |
| 01 | 옴(Om) | 중립, 대기, 0의 상태 |
| 10 | 티(Ti) | 팽창, 증폭, +1 방향 |
| 11 | 타(Ta) | 수축, 감소, -1 방향 |
이 매핑은 우연이 아닙니다. 0이 두 개인 00이 기저(음)이고, 0이 하나인 01이 중립(옴)이고, 1이 하나인 10이 증폭(티)이고, 1이 두 개인 11이 감소(타)입니다. 비트의 수가 에너지의 수준과 대응합니다. 에너지가 낮을수록 0이 많고, 높을수록 1이 많습니다.
이 2비트 헤더가 모든 데이터의 첫머리에 붙습니다. FPGA는 이 두 비트를 보고 이 데이터가 어느 방향으로 어떤 역할을 해야 하는지 즉시 판단합니다. 마치 편지 봉투에 붙은 우편 분류 코드처럼, 이 2비트가 데이터의 운명을 처음부터 결정합니다.
---
FPGA에서 소수점 연산은 비쌉니다. 부동소수점 곱셈기를 만들려면 수백 개의 게이트가 필요하고, 전력도 많이 소모합니다. 크라우니 진법의 이상적인 값들은 모두 무리수입니다. e = 2.71828…, 1/e = 0.36788…. 이것들을 그대로 FPGA에 넣을 수 없습니다.
해법은 비트 시프트(Bit Shift)입니다. 2의 거듭제곱으로 분수를 만들어 소수점 연산을 덧셈과 비트 이동으로만 처리합니다.
크(Cr) Level 1의 FPGA 안착값: 2.75
이상적인 값 e ≈ 2.71828 대신, 2.75를 선언합니다.
2.75 = 2 + 1/2 + 1/4
= 10.11 (이진 소수)
= 원본값 × 2 + 원본값 >> 1 + 원본값 >> 2
즉, 어떤 값에 크를 곱하고 싶다면 그 값을 1번 왼쪽 시프트(×2)하고, 1번 오른쪽 시프트(÷2)한 값을 더하고, 2번 오른쪽 시프트(÷4)한 값을 더합니다. 3번의 비트 이동과 2번의 덧셈. 곱셈 게이트가 하나도 없습니다. 1클럭에 끝납니다.
이상적인 값과의 차이는 2.75 - 2.71828 = 0.0317...입니다. 이 차이는 음 버퍼 파생으로 자동 수렴합니다.
카(Ka) Level 1의 FPGA 안착값: 0.375
이상적인 값 1/e ≈ 0.36788 대신, 0.375를 선언합니다.
0.375 = 1/4 + 1/8
= 0.011 (이진 소수)
= 원본값 >> 2 + 원본값 >> 3
어떤 값에 카를 곱하고 싶다면 2번 오른쪽 시프트하고 3번 오른쪽 시프트한 값을 더합니다. 역시 곱셈 없이 1클럭.
이상적인 값과의 차이 0.375 - 0.36788 = 0.0071...도 음 버퍼로.
---
2.75와 0.375. 이 두 값은 FPGA 칩 위에 영구적인 하드웨어 상수로 새겨집니다.
소프트웨어처럼 실행 중에 계산하지 않습니다. 칩 설계 단계에서 이미 배선으로 결정됩니다. 이 상수들이 박힌 칩은 전원이 들어오는 순간부터, 아무 계산 없이 크와 카의 보폭을 즉시 제공할 수 있습니다.
비유하자면, 측량사가 현장에 나갈 때마다 줄자로 1미터를 재는 것이 아니라, 국제 킬로그램 원기처럼 이미 확정된 기준을 가지고 가는 것입니다. 한번 선언된 기준은 흔들리지 않습니다.
---
일반 컴퓨터의 부동소수점 연산은 정밀하지만 느리고 비쌉니다. 무엇보다, 부동소수점 연산은 예측 불가능한 오차를 만들 수 있습니다. 앞서 언급한 "0.1 + 0.2 ≠ 0.3"의 문제가 대표적입니다.
크라우니 FPGA 방식은 이 문제를 처음부터 회피합니다. 소수점이 있는 연산은 비트 시프트로 대체하고, 그 과정에서 생기는 아주 작은 오차(0.0317, 0.0071)는 처음부터 음 버퍼로 라우팅하도록 설계합니다. 이 오차가 어디로 가는지 모르는 것이 아니라, 처음부터 어디로 가는지 정해 두는 것입니다.
정밀도를 포기한 것이 아닙니다. 오차의 행선지를 설계에 포함시킨 것입니다. 이것이 크라우니 수체계가 FPGA 위에 안착하는 방식입니다.
자동차 엔진이 돌아가는 모습을 상상해 보세요. 피스톤이 위아래로 움직이면서 회전력을 만들어 냅니다. 그런데 피스톤은 직선 운동을 합니다. 이 직선 운동이 크랭크축을 통해 회전으로 변환됩니다. 직선과 원형, 두 운동이 합쳐져서 바퀴가 굴러갑니다.
크라우니 진법의 모터제어 모델은 이 피스톤의 움직임을 정확히 닮아 있습니다. 그리고 그 구조가 크라우니 진법의 크·카·티·타·옴·음과 1:1로 대응합니다.
---
크라우니 수체계의 여섯 상태가 모터의 여섯 움직임과 정확히 맞아떨어집니다.
축운동 (직선)
크(Cr) → 전진 (앞으로 밀어내는 거시적 팽창) 카(Ka) → 후진 (뒤로 당기는 미시적 수축)
회전운동
티(Ti) → 우회전 견인 (증폭하며 돌리기) 타(Ta) → 좌회전 감쇠 (자연스럽게 감속하며 돌리기) 옴(Om) → 정지 (중립, 대기)
에너지 처리
음(Um) → 잉여 흡수 (역기전력, 충격, 진동을 받아 안음)
이 대응은 단순한 비유가 아닙니다. 실제로 모터 제어 시스템에서 이 여섯 가지 명령이 필요합니다. 전진과 후진, 좌회전과 우회전, 정지, 그리고 예상치 못한 에너지를 처리하는 버퍼. 크라우니 진법은 이 요구사항과 처음부터 구조적으로 일치합니다.
---
모터 제어에서 두 가지 골칫거리가 있습니다. 역기전력(Back EMF)과 저크(Jerk)입니다.
역기전력은 모터가 외부 힘으로 돌아가거나 급제동할 때 발생합니다. 모터는 발전기처럼 작동하면서 전류를 역방향으로 밀어냅니다. 이 역류 전류가 제어 회로로 들어오면 회로가 손상될 수 있습니다. 그래서 일반적으로 역기전력 흡수 회로나 다이오드를 별도로 설치합니다.
저크는 가속도의 변화율입니다. 부드러운 가속은 저크가 낮고, 갑작스러운 출발이나 급제동은 저크가 높습니다. 저크가 높으면 승차감이 나쁘고, 기계적 피로도 빨리 쌓입니다.
크라우니 모터제어에서 역기전력은 음 레이어로 처리됩니다. 급제동 시 발생하는 과잉 전류가 음 버퍼로 흘러들어 갑니다. 별도의 회생제동 회로 없이, 수체계 자체가 이 역할을 합니다. 역기전력이 오차로 버려지는 것이 아니라, 음에 저장되어 다음에 쓸 수 있는 자원이 됩니다.
저크는 크라우니 격자의 완만한 계단 구조 덕분에 자연스럽게 줄어듭니다. e의 수학적 성질 중 하나가 d/dx(eˣ) = eˣ라는 것입니다. 미분해도 자기 자신이 나옵니다. 이것은 eˣ 곡선이 특별히 부드럽다는 뜻입니다. 가속을 올릴 때 크의 격자를 따라 올라가면, 그 곡선이 자연 성장 곡선과 일치합니다. 갑작스러운 점프 없이 부드럽게 올라갑니다. 저크가 최소화됩니다.
---
크라우니 모터제어는 가속과 감속을 다르게 정의합니다.
증폭 = 올림 명령: 앞 공간을 열어 끌어당기는 것. 억지로 밀어붙이는 것이 아니라, 갈 길을 만들어 자연스럽게 나아가게 하는 것. 진공청소기가 먼지를 흡입하듯이, 앞 공간을 비워 물체를 끌어당깁니다. 마찰이 생기지 않습니다.
감소 = 내림 명령: 에너지를 차단해 자연감쇠하게 하는 것. 억지로 잡아당겨 멈추는 것이 아니라, 동력을 끊어 자연스럽게 느려지게 하는 것. 자전거 바퀴가 페달을 밟지 않으면 서서히 멈추는 것처럼. 마찰열이 생기지 않습니다.
이 두 정의가 모터제어에서 의미하는 바는 명확합니다. 가속 시 마찰열이 없고, 감속 시 발열이 없습니다. 에너지를 억지로 변환하지 않고, 자연스러운 흐름을 따르기 때문입니다.
---
이 모터제어 모델을 일반화하면 나선형 운동이 됩니다. 직선 운동(크·카)과 회전 운동(티·타·옴)이 결합해 나선을 그립니다. 달팽이 껍데기의 나선, DNA의 이중나선, 은하의 나선 팔. 자연에서 나선이 자주 보이는 이유는 이것이 최소 에너지로 최대 공간을 차지하는 형태이기 때문입니다.
크라우니 진법에서 어떤 프로젝트나 데이터가 완성되어 가는 과정도 이 나선을 따릅니다. 완성도가 높아질수록(티·증폭) 크의 격자를 타고 나선이 바깥으로 팽창합니다. 완성도가 낮아지거나 재검토가 필요할 때(타·감소) 카의 격자를 타고 중심으로 수렴합니다. 완성되지 못한 요소는 음 DB에서 대기합니다.
이것이 6장이 말하는 나선형 피스톤입니다. 단순한 기계 부품이 아니라, 크라우니 수체계가 현실 물리 세계와 만나는 방식입니다.
지금 우리가 가진 대형 언어 모델은 놀라운 도구입니다. 방대한 텍스트를 읽고 학습해서 사람처럼 대화하고, 글을 쓰고, 코드를 작성합니다. 그런데 한계가 있습니다.
첫째, 확률에 의존합니다. LLM은 "이 맥락에서 다음 단어가 무엇일 확률이 높은가"를 계산합니다. 확률이 높은 답을 내놓지만, 그것이 항상 옳다는 보장은 없습니다. 환각(Hallucination), 즉 그럴듯하게 들리지만 사실이 아닌 답을 생성하는 이유가 여기 있습니다.
둘째, 결정이 불투명합니다. LLM이 어떤 판단을 내렸을 때 왜 그 판단을 했는지 정확히 알기 어렵습니다. 규칙을 따른 것이 아니라 통계적 패턴을 따른 것이기 때문입니다.
셋째, 일관성을 보장하기 어렵습니다. 같은 질문을 다르게 표현하면 다른 답이 나올 수 있습니다. 항상 같은 규칙을 적용한다는 보장이 없습니다.
이런 한계 때문에 LLM을 판단의 주체로 쓰기 어렵습니다. 특히 헌법이나 법률처럼 일관성이 반드시 보장되어야 하는 영역에서는 더욱 그렇습니다.
---
크라우니 규칙기반 추론 에이전트는 이 문제를 다른 방향에서 접근합니다. LLM을 없애는 것이 아니라, 역할을 재정의합니다.
인식 트랙 (LLM — 감각기관)
LLM은 외부 세계의 비정형 언어를 받아들입니다. 사람이 하는 말, 뉴스 기사, 계약서, 재무 데이터. 이것들을 읽고 의미의 극성(방향성)과 강도(스케일)만을 추출합니다. "자산 확장"이라는 단어가 나왔다. 이것은 증폭(티) 방향이다. "손실 축소"라는 말이 나왔다. 이것은 감소(타) 방향이다. LLM은 번역기입니다. 결론을 내리지 않습니다.
추론 트랙 (크라우니 규칙 — 판단 엔진)
LLM이 추출한 벡터 신호를 받아서 실제 판단을 합니다. 신호가 들어오면, 크라우니 헌법에 새겨진 규칙을 적용해 O(1) 시간에 결론을 냅니다. "자산 확장 신호 + 현재 상태 분석 = 가속 실행". 확률 없이, 예외 없이, 규칙대로.
두 트랙의 분리가 핵심입니다. 유연한 부분(언어 이해)은 LLM이 맡고, 일관성이 필요한 부분(판단과 결정)은 규칙 엔진이 맡습니다. LLM이 잘못 번역해도 추론 트랙이 이상한 판단을 내리지 않도록 필터가 있습니다. 추론 트랙이 결정을 내려도 LLM이 맥락을 이해하지 못하면 실행하지 않습니다.
---
이 시스템이 작동하려면 세상의 모든 의미어를 크라우니 벡터로 매핑해야 합니다.
"성장, 확장, 증가, 팽창, 가속, 획득, 투자" → 10 (티, 크 보폭) "감소, 축소, 손실, 수렴, 감속, 절약, 방어" → 11 (타, 카 보폭) "유지, 관찰, 대기, 검토, 보류, 중립" → 01 (옴) "오류, 불명확, 잡음, 모순, 맥락 이탈" → 00 (음)
이 매핑 사전이 쌓일수록 시스템은 강해집니다. 처음에는 핵심 의미어 수십 개로 시작하지만, 사용하면서 계속 확장됩니다. 새로운 의미어가 등장할 때마다 규칙 매트릭스에 추가됩니다. LLM이 처음 보는 단어를 마주쳐도, 문맥에서 극성을 추출해 기존 규칙에 연결합니다.
---
규칙기반 추론의 가장 큰 장점은 속도와 예측 가능성입니다.
LLM의 추론은 O(n)입니다. 맥락이 길어질수록, 선택지가 많아질수록, 시간과 컴퓨팅 자원이 더 필요합니다. 반면 크라우니 규칙 엔진의 판단은 O(1)입니다. 신호가 들어오면, 규칙 테이블에서 해당 패턴을 찾아 결론을 냅니다. 복잡도가 늘어나도 판단 속도는 변하지 않습니다.
예측 가능성도 있습니다. 규칙은 변하지 않습니다. 내일도 모레도 같은 입력에 같은 출력이 나옵니다. 이것이 헌법이 되는 이유입니다. 규칙이 사람이나 상황에 따라 달라지지 않는다는 것, 그것이 신뢰의 근거입니다.
---
규칙기반 추론 에이전트의 목표는 효율적인 계산이 아닙니다. 사람의 초지능 잠재력 구현을 돕는 것입니다.
사람은 모든 결정을 혼자 내릴 수 없습니다. 정보는 너무 많고, 시간은 부족하고, 편향에서 자유롭기 어렵습니다. 에이전트는 사람이 미처 보지 못한 신호를 포착하고, 일관된 규칙으로 분석하고, 명확한 방향을 제안합니다. 결정은 사람이 합니다. 에이전트는 그 결정을 더 잘 내릴 수 있도록 돕는 도구입니다.
LLM이 감각기관이라면, 크라우니 규칙 엔진은 뇌의 판단 영역입니다. 그리고 그 판단 영역에 새겨진 규칙이 크라우니 헌법, 크라우니 진법의 격자입니다. 수체계와 가치체계가 하나로 연결되는 지점이 바로 여기입니다.
앞 일곱 장에서 우리는 크라우니 진법의 개념을 쌓아왔습니다. e를 '크'라 부르는 것부터 시작해, 크·카·음 세 요소, 올림프레임과 깃든수, 음 기저레이어, FPGA 안착값, 나선형 모터제어, 규칙기반 추론 에이전트까지. 그런데 개념만으로는 충분하지 않습니다.
수체계는 구현될 때 비로소 도구가 됩니다. 컴퓨터 위에서 실제로 계산이 이루어지고, 프로그래머가 코드를 작성할 수 있어야 합니다. 책의 마지막 장은 그 구현의 선언입니다.
---
크라우니 진법은 6개의 한선씨 모듈로 구현되었습니다. 한선씨는 크라우니의 한국어 프로그래밍 언어입니다. 모든 모듈은 컴파일되고 실행이 검증된 상태입니다.
1. 크라우니진법.한선 — 팽창 격자 계산기
크라우니 진법의 기본 연산을 구현합니다. 어떤 값이 들어오면 올림프레임을 찾고, 깃든수를 계산하고, 음 덤프를 반환합니다. 검증 사례: V=15 → 프레임 20, 깃든수 15, 음 5.
입력: 15
결과: 프레임 20 (Cr³), 깃든수 15, 음버퍼 5
2. 크라우니진법2.한선 — 수축 격자 + 균형 통합
카(수축) 방향 계산과 타(내림) 프레임을 추가합니다. 뺄셈 대신 위상 반전 덧셈을 구현합니다. 부호비트가 사라지고 방향 비트만 남습니다. 음버퍼 회생(저장된 잉여를 다시 연산에 쓰는 것)도 구현됩니다.
3. 사상인코더.한선 — 2비트 4상 인코딩
00(음)·01(옴)·10(티)·11(타) 인코딩과 디코딩을 담당합니다. FPGA 안착값 Cr1=2750/Ka1=375(고정소수점 ×1000)를 내장합니다. 파생 오차(+32/+7)를 음버퍼로 자동 라우팅합니다.
4. 방사형셀코어.한선 — 극좌표 데이터베이스
반경(R)=크라우니 레벨, 각도(θ)=완성비율로 셀을 배치합니다. 완성도가 높아지면 티 명령으로 스핀업(바깥 궤도 팽창), 낮아지면 타 명령으로 스핀다운(안쪽 수렴). 완전히 폐기된 데이터는 음 DB(중심, R=0)로 이동합니다.
5. 의미어매핑.한선 — 의미어 벡터 사전
한국어 의미어 36개(티·타·옴·음 각 9개)를 크라우니 벡터로 매핑합니다. 단어 하나를 입력하면 2비트 방향 코드와 보폭 레벨을 반환합니다. 문장을 입력하면 전체 극성을 분류합니다.
6. 크라우니추론엔진.한선 — 이중 트랙 추론
인식 트랙(의미어 파싱)과 추론 트랙(O(1) 결정)을 통합합니다. "자산 확장 가속"이라는 문장이 들어오면, 의미어 분류→방향 신호→규칙 적용→가속 실행 결정→음 회생 순으로 처리합니다. 엔드투엔드 검증 완료.
---
6모듈은 단순한 코드 파일이 아닙니다. 이것은 서비스 선언입니다.
크라우니 진법이 이제 추상적 수체계가 아니라는 선언. 실제로 계산하고, 추론하고, 판단하는 도구가 되었다는 선언. 한선씨로 작성되어 크라우니 VM 위에서 돌아간다는 선언. 언제든지 가져와서 쓸 수 있는 라이브러리로 존재한다는 선언.
π가 이름을 얻기 전에는 원의 둘레를 계산할 때마다 3.14159를 써야 했습니다. 이름을 얻은 후에는 π라고 쓰면 됩니다. 이제 크라우니 진법은 이름을 얻었고, 구현되었습니다. 아무나 가져와서 쓸 수 있습니다.
---
6모듈의 완성은 끝이 아니라 시작입니다.
이 도구 위에서 쌓아올릴 것들이 있습니다. 방사형 셀코어 DB를 실제 데이터베이스 엔진으로 확장하는 것. 의미어 사전을 수백, 수천 개로 늘리는 것. 규칙 엔진을 실제 경영 AI에 연결하는 것. FPGA 하드웨어에 직접 구워 넣는 것.
나선은 계속 바깥으로 팽창합니다. 6모듈은 그 나선의 첫 번째 바퀴입니다. 완성비율 100%. 다음 바퀴가 시작됩니다.
---
자연상수 e를 '크(Cr)'라 명명한다.
크의 역수 1/e를 '카(Ka)'라 명명한다.
이 두 보폭과 음(Um) 바다 위에 수체계를 세운다.
격자는 미리 계산한다. 연산할 때는 찾아 맞춘다.
방향(티·타·옴)과 보폭(크·카)을 분리한다.
잉여는 버리지 않는다. 음이 품는다.
2비트 4상으로 FPGA 위에 안착한다. 2.75와 0.375가 상수가 된다.
LLM은 감각기관이다. 추론은 규칙이 담당한다.
6모듈이 구현된다. 도구가 된다.
이로써 크라우니 진법을 선언한다.
e를 '크'라 부르는 날부터, 이 수는 도구가 되었다.
8장에서 우리는 크라우니 진법의 여섯 모듈을 완성했습니다. 진법 계산기, 감소·균형 처리, 2비트 사상 인코더, 방사형 셀코어 데이터베이스, 의미어 매핑, 그리고 그 모두를 지휘하는 규칙기반 추론 엔진. 각각은 홀로 서서 제 몫을 해냈습니다.
그런데 홀로 서는 것과 한 몸이 되는 것은 다른 일입니다. 처음의 추론 엔진은 다른 모듈들의 로직을 베껴서 자기 안에 다시 적어두는 방식이었습니다. 사전도 다시 적고, 격자도 다시 적고, 셀의 움직임도 다시 적었습니다. 작동은 했지만, 한 곳을 고치면 베껴둔 모든 곳을 따라 고쳐야 하는 위태로운 구조였습니다.
진짜 도구는 그렇게 만들어지지 않습니다. 부품은 한 번만 만들고, 필요한 곳에서 그 하나의 부품을 불러다 쓰는 것. 프로그래밍에서 이것을 '가져오기(import)'라 부릅니다. 9장은 흩어진 여섯 부품이 베끼지 않고 진짜로 한 몸이 되는 이야기입니다.
---
한 모듈을 다른 곳에서 불러다 쓰려면, 그 모듈은 순수해야 합니다. 불러오는 순간 제멋대로 떠들어대면 안 됩니다.
크라우니의 각 모듈에는 두 종류의 내용이 섞여 있었습니다. 하나는 진짜 일을 하는 함수들(주어진 값에 프레임을 씌우고, 단어를 위상으로 바꾸는 도구). 다른 하나는 "이렇게 쓰면 됩니다" 하고 보여주는 시범 코드(혼자 실행했을 때 화면에 결과를 찍어주는 부분).
문제는 가져오기가 파일을 통째로 끌어온다는 데 있었습니다. 시범 코드가 섞인 모듈을 불러오면, 불러오자마자 그 시범이 멋대로 실행되어 화면을 어지럽혔습니다. 비유하자면, 망치를 집어 들 때마다 망치가 "저는 못을 이렇게 박습니다!" 하고 시연을 시작하는 꼴입니다.
그래서 우리는 각 모듈을 둘로 갈랐습니다.
망치는 조용한 망치로, 시연은 시연대로 따로. 이 분리가 결합의 첫걸음이었습니다.
---
부품을 한 작업대에 모으자 새로운 문제가 드러났습니다. 서로 다른 부품이 같은 이름의 함수를 갖고 있던 것입니다. 사상 인코더에도 '프레임찾기'가 있고, 진법 계산기에도 '프레임찾기'가 있었습니다. 둘을 같은 자리에 부르면 누구를 가리키는지 알 수 없어 충돌합니다.
흔한 해법은 '꼬리표'를 붙이는 것입니다. "인코더의 프레임찾기", "계산기의 프레임찾기" 하고 출신을 표시하는 방식이지요. 그런데 크라우니의 도구를 살펴보니, 그 꼬리표는 함수의 이름표만 바꿀 뿐, 함수가 속으로 다른 동료를 부를 때는 꼬리표를 붙여주지 않았습니다. 겉이름은 바뀌었는데 속에서 부르는 이름은 그대로라, 결국 길을 잃었습니다.
그래서 우리는 꼬리표에 기대지 않기로 했습니다. 대신 더 단순하고 튼튼한 원칙을 세웠습니다. 애초에 이름이 겹치지 않게 짓는다. 그리고 정말 중복된 기능(두 곳에 다 있던 '프레임찾기')은 한 곳에만 남기고, 다른 곳에서는 지웠습니다. 같은 일을 하는 부품이 둘일 필요는 없으니까요.
사상 인코더가 내놓을 진짜 고유한 재능은 따로 있었습니다. 입력값을 2.75배로 키우고 0.375배로 줄이는 고정소수점 시프트 — 바로 5장에서 본 FPGA 안착값입니다. 그 재능만 또렷한 이름으로 남기고, 겹치던 부분은 양보했습니다. 결합이란 모두를 욱여넣는 것이 아니라, 각자가 가장 잘하는 하나를 들고 모이는 일입니다.
---
이렇게 정리된 네 개의 순수 코어 — 의미어 매핑, 사상 인코더, 진법 계산기, 방사형 셀코어 — 를 추론 엔진이 진짜로 불러다 결합했습니다. 베껴 적은 코드는 모두 지워졌습니다. 이제 한 문장이 들어오면 이렇게 흐릅니다.
"자산 확장 가속" 이라는 문장
↓ 의미어 매핑: 세 단어가 모두 '티(팽창)' → 대표 위상 = 티
↓ 사상 인코더: 기준강도 10에 2.75배 시프트 → V = 27, 비트 = 10
↓ 진법 계산기: 27을 덮는 올림 프레임 = 55, 깃든수 27, 음으로 28 덤프
↓ 추론 규칙: 티 → "가속실행 + 음회생"
↓ 방사형 셀코어: 해당 프로젝트의 완성비율을 50%→85% 스핀업
각 단계는 자기 코어의 함수를 부를 뿐, 남의 일을 베껴 하지 않습니다. 의미를 읽는 일은 의미어 매핑에게, 크기를 키우는 일은 사상 인코더에게, 프레임을 씌우는 일은 진법 계산기에게, 완성도를 갱신하는 일은 셀코어에게. 지휘자인 추론 엔진은 누구에게 무엇을 맡길지만 압니다.
반대 방향의 문장 "손실 감소 안정 자산"이 들어오면 위상은 '타(수축)'로 기울고, 흐름은 내림 프레임과 스핀다운으로, 결정은 "방어전환"으로 바뀝니다. 같은 길, 다른 결론. 그리고 절사된 모든 잉여는 언제나처럼 '음'의 바다로 떨어집니다.
---
여섯 도구가 한 몸이 되자, 고칠 곳은 언제나 한 곳이 되었습니다. 사전을 늘리고 싶으면 의미어 코어 한 곳만, 격자를 손보고 싶으면 진법 코어 한 곳만 고치면 모든 곳에 반영됩니다. 베낀 사본을 쫓아다니며 똑같이 고치던 위태로움은 사라졌습니다.
이것은 단순한 정리정돈이 아닙니다. 1장에서 우리는 "진법에 수를 붙인다"는 철학으로 출발했습니다. e를 '크'라 명명하고, 음을 바닥에 깔고, 오차를 품어 안는 우주를 설계했습니다. 그 모든 개념이 이제 베끼지 않고 서로를 부르는 살아있는 부품들로 구현되어, 한 문장을 받아 하나의 결정을 내놓는 엔진이 되었습니다.
크라우니 진법은 더 이상 종이 위의 아이디어가 아닙니다. 흩어진 부품이 한 몸이 되어 실제로 작동하는 도구입니다. 그리고 도구가 된 수체계는, 사람의 판단을 베끼지 않고 규칙으로 사유하는 또 다른 지능의 첫 골격이 됩니다. 그 이야기가 이 책이 선언한 자리이고, 다음 궤도가 시작되는 지점입니다.