8장에서 우리는 크라우니 진법의 여섯 모듈을 완성했습니다. 진법 계산기, 감소·균형 처리, 2비트 사상 인코더, 방사형 셀코어 데이터베이스, 의미어 매핑, 그리고 그 모두를 지휘하는 규칙기반 추론 엔진. 각각은 홀로 서서 제 몫을 해냈습니다.
그런데 홀로 서는 것과 한 몸이 되는 것은 다른 일입니다. 처음의 추론 엔진은 다른 모듈들의 로직을 베껴서 자기 안에 다시 적어두는 방식이었습니다. 사전도 다시 적고, 격자도 다시 적고, 셀의 움직임도 다시 적었습니다. 작동은 했지만, 한 곳을 고치면 베껴둔 모든 곳을 따라 고쳐야 하는 위태로운 구조였습니다.
진짜 도구는 그렇게 만들어지지 않습니다. 부품은 한 번만 만들고, 필요한 곳에서 그 하나의 부품을 불러다 쓰는 것. 프로그래밍에서 이것을 '가져오기(import)'라 부릅니다. 9장은 흩어진 여섯 부품이 베끼지 않고 진짜로 한 몸이 되는 이야기입니다.
---
한 모듈을 다른 곳에서 불러다 쓰려면, 그 모듈은 순수해야 합니다. 불러오는 순간 제멋대로 떠들어대면 안 됩니다.
크라우니의 각 모듈에는 두 종류의 내용이 섞여 있었습니다. 하나는 진짜 일을 하는 함수들(주어진 값에 프레임을 씌우고, 단어를 위상으로 바꾸는 도구). 다른 하나는 "이렇게 쓰면 됩니다" 하고 보여주는 시범 코드(혼자 실행했을 때 화면에 결과를 찍어주는 부분).
문제는 가져오기가 파일을 통째로 끌어온다는 데 있었습니다. 시범 코드가 섞인 모듈을 불러오면, 불러오자마자 그 시범이 멋대로 실행되어 화면을 어지럽혔습니다. 비유하자면, 망치를 집어 들 때마다 망치가 "저는 못을 이렇게 박습니다!" 하고 시연을 시작하는 꼴입니다.
그래서 우리는 각 모듈을 둘로 갈랐습니다.
망치는 조용한 망치로, 시연은 시연대로 따로. 이 분리가 결합의 첫걸음이었습니다.
---
부품을 한 작업대에 모으자 새로운 문제가 드러났습니다. 서로 다른 부품이 같은 이름의 함수를 갖고 있던 것입니다. 사상 인코더에도 '프레임찾기'가 있고, 진법 계산기에도 '프레임찾기'가 있었습니다. 둘을 같은 자리에 부르면 누구를 가리키는지 알 수 없어 충돌합니다.
흔한 해법은 '꼬리표'를 붙이는 것입니다. "인코더의 프레임찾기", "계산기의 프레임찾기" 하고 출신을 표시하는 방식이지요. 그런데 크라우니의 도구를 살펴보니, 그 꼬리표는 함수의 이름표만 바꿀 뿐, 함수가 속으로 다른 동료를 부를 때는 꼬리표를 붙여주지 않았습니다. 겉이름은 바뀌었는데 속에서 부르는 이름은 그대로라, 결국 길을 잃었습니다.
그래서 우리는 꼬리표에 기대지 않기로 했습니다. 대신 더 단순하고 튼튼한 원칙을 세웠습니다. 애초에 이름이 겹치지 않게 짓는다. 그리고 정말 중복된 기능(두 곳에 다 있던 '프레임찾기')은 한 곳에만 남기고, 다른 곳에서는 지웠습니다. 같은 일을 하는 부품이 둘일 필요는 없으니까요.
사상 인코더가 내놓을 진짜 고유한 재능은 따로 있었습니다. 입력값을 2.75배로 키우고 0.375배로 줄이는 고정소수점 시프트 — 바로 5장에서 본 FPGA 안착값입니다. 그 재능만 또렷한 이름으로 남기고, 겹치던 부분은 양보했습니다. 결합이란 모두를 욱여넣는 것이 아니라, 각자가 가장 잘하는 하나를 들고 모이는 일입니다.
---
이렇게 정리된 네 개의 순수 코어 — 의미어 매핑, 사상 인코더, 진법 계산기, 방사형 셀코어 — 를 추론 엔진이 진짜로 불러다 결합했습니다. 베껴 적은 코드는 모두 지워졌습니다. 이제 한 문장이 들어오면 이렇게 흐릅니다.
"자산 확장 가속" 이라는 문장
↓ 의미어 매핑: 세 단어가 모두 '티(팽창)' → 대표 위상 = 티
↓ 사상 인코더: 기준강도 10에 2.75배 시프트 → V = 27, 비트 = 10
↓ 진법 계산기: 27을 덮는 올림 프레임 = 55, 깃든수 27, 음으로 28 덤프
↓ 추론 규칙: 티 → "가속실행 + 음회생"
↓ 방사형 셀코어: 해당 프로젝트의 완성비율을 50%→85% 스핀업
각 단계는 자기 코어의 함수를 부를 뿐, 남의 일을 베껴 하지 않습니다. 의미를 읽는 일은 의미어 매핑에게, 크기를 키우는 일은 사상 인코더에게, 프레임을 씌우는 일은 진법 계산기에게, 완성도를 갱신하는 일은 셀코어에게. 지휘자인 추론 엔진은 누구에게 무엇을 맡길지만 압니다.
반대 방향의 문장 "손실 감소 안정 자산"이 들어오면 위상은 '타(수축)'로 기울고, 흐름은 내림 프레임과 스핀다운으로, 결정은 "방어전환"으로 바뀝니다. 같은 길, 다른 결론. 그리고 절사된 모든 잉여는 언제나처럼 '음'의 바다로 떨어집니다.
---
여섯 도구가 한 몸이 되자, 고칠 곳은 언제나 한 곳이 되었습니다. 사전을 늘리고 싶으면 의미어 코어 한 곳만, 격자를 손보고 싶으면 진법 코어 한 곳만 고치면 모든 곳에 반영됩니다. 베낀 사본을 쫓아다니며 똑같이 고치던 위태로움은 사라졌습니다.
이것은 단순한 정리정돈이 아닙니다. 1장에서 우리는 "진법에 수를 붙인다"는 철학으로 출발했습니다. e를 '크'라 명명하고, 음을 바닥에 깔고, 오차를 품어 안는 우주를 설계했습니다. 그 모든 개념이 이제 베끼지 않고 서로를 부르는 살아있는 부품들로 구현되어, 한 문장을 받아 하나의 결정을 내놓는 엔진이 되었습니다.
크라우니 진법은 더 이상 종이 위의 아이디어가 아닙니다. 흩어진 부품이 한 몸이 되어 실제로 작동하는 도구입니다. 그리고 도구가 된 수체계는, 사람의 판단을 베끼지 않고 규칙으로 사유하는 또 다른 지능의 첫 골격이 됩니다. 그 이야기가 이 책이 선언한 자리이고, 다음 궤도가 시작되는 지점입니다.
첫 번째 책은 선물이에요. 가입하면 100맘을 드리니까, 두 번째 책부터 자유롭게 읽을 수 있어요. 친구를 추천하면 50맘도 생겨요.