8장 완성 시점의 아키텍처는 기능적으로는 완전했으나, 구현 수준에서는 심각한 코드 중복 문제를 안고 있었다. 생각 엔진(규칙기반 추론 에이전트)이 다른 5개 모듈의 로직을 자신의 내부에 인라인 복사해 두었기 때문이다.
이 구조는 단일 변경점을 보장할 수 없었다. 한 곳을 수정하면 베낀 모든 위치를 추적해 갱신해야 했고, 버전 동기화 실패의 위험이 있었다.
9장의 목표: 한선씨의 가져오기(import) 메커니즘을 활용해 순수 모듈 코어와 시범용 래퍼를 분리하고, 추론 엔진이 4개의 순수 코어를 실제로 결합하는 진정한 모듈 통합을 구현한다.
---
한선씨에서 모듈을 불러올 때, 파일 실행 시 그 내용이 전부 평가된다. 따라서 부작용(I/O)이 있는 코드(테스트 케이스, 데모 출력)를 포함한 파일을 불러오면 의도하지 않은 실행이 발생한다.
해결책: 각 모듈을 두 파일로 분리한다.
의미어매핑.한선 → 사용자용 데모 (가져오기 "의미어매핑_코어" + 시범 코드)
의미어매핑_코어.한선 → 순수 함수만 (최상위 출력값 0, 순수함수만)
| 구분 | 코어 | 래퍼 |
|---|---|---|
| 내용 | 함수 정의, 전역 상수만 | 코어 가져오기 + 시범 실행 |
| 부작용 | 없음(O) | 있음(시범 코드의 출력값) |
| 사용 대상 | 다른 모듈의 불러오기 | 직접 실행, 학습, 문서화 |
| 마지막 명령어 | 없거나 수치 반환 | 출력값() 포함 |
예: 의미어매핑_코어.한선
함수 단어벡터(단어) {
// 36 핵심어 매핑: 티(9) + 타(9) + 옴(9) + 음(9)
... 벡터 반환
반환 [위상, 강도]
}
함수 문장분류(문장_배열) {
... 문장 분석
반환 [대표위상, 합산강도]
}
// 코어 파일은 여기서 끝남. 출력값 없음.
예: 의미어매핑.한선
가져오기 "의미어매핑_코어"
// 시범 코드
변수 테스트 = ["자산", "확장", "가속"]
변수 결과 = 문장분류(테스트)
출력값("테스트 결과: " + 결과)
---
명세서 절⑥ 완료(2026-06-20):
| 모듈명 | 코어 파일 | 함수 주요 3개 | 상태 |
|---|---|---|---|
| 의미어 매핑 | 의미어매핑_코어.한선 | 단어벡터(), 문장분류(), — | ✓ 완료 |
| 사상 인코더 | 사상인코더_코어.한선 | 위상비트(), 시프트적용(), 시프트오차() | ✓ 완료 |
| 진법 계산기 | 크라우니진법2_코어.한선 | 프레임찾기(), 깃든수(), 음덤프() | ✓ 완료 |
| 방사형 셀코어 | 방사형셀코어_코어.한선 | 셀읽기(), 스핀업(), 스핀다운() | ✓ 완료 |
---
프로그래밍 언어 대부분은 네임스페이스(또는 모듈 별칭)를 제공한다:
import X as encoder
encoder.frame_find(27) # 함수 정의명은 변경됨
한선씨의 가져오기 구문에서도 유사한 시도가 있었다:
가져오기 "사상인코더_코어" 이름 ENC
ENC::프레임찾기(27) // 외부 호출은 ENC 접두
함정: 별칭은 함수 정의명만 접두하고, 내부 함수호출과 전역 상수 참조는 미접두 상태로 남는다.
// 사상인코더_코어.한선 내부
함수 시프트적용(V, 스케일) {
변수 비트 = 위상비트(스케일) // 여기서 "위상비트"는 별칭이 안 붙음
변수 결과 = 프레임찾기(비트) // 전역 함수도 별칭 없이 호출
반환 결과
}
// 모듈을 "ENC" 별칭으로 불러도
// 내부에서는 여전히 "위상비트", "프레임찾기" 원래 이름으로 찾음
// → 이름 충돌 위험 미해결
더 우아한 해결책은 별칭을 쓰지 않고 애초에 이름이 겹치지 않게 설계하는 것.
- 진법 계산기의 프레임찾기()와 사상 인코더의 프레임찾기() 중 사상 인코더 버전은 삭제 - 진법 계산기가 더 근본이므로, 사상 인코더는 크라우니진법2_코어에서 제공하는 함수만 호출하도록 수정
- 사상 인코더의 고유 기능 = FPGA 비트시프트 안착값 적용 - 이를 시프트적용(V, 스케일), 시프트오차(방향) 등으로 명시적 이름화
``javascript 가져오기 "의미어매핑_코어" // OK 가져오기 "의미어매핑_코어" // 2번째는 자동 무시 (basename 같음) ``
결과:
---
크라우니추론엔진.한선 (최상위 통합)
├─ 가져오기 "의미어매핑_코어"
├─ 가져오기 "사상인코더_코어"
├─ 가져오기 "크라우니진법2_코어"
└─ 가져오기 "방사형셀코어_코어"
// 1단계: 의미어 분석 (의미어매핑_코어::문장분류)
변수 문장 = ["자산", "확장", "가속"]
변수 [위상, 강도] = 문장분류(문장)
// → [티(+1), 10]
// 2단계: 사상 인코더 (사상인코더_코어::시프트적용)
변수 V = 시프트적용(강도, 위상)
// → V = 10 × 2.75 = 27.5, 반올림 27, 시프트오차 +32 → 음누적
// 3단계: 진법 계산기 (크라우니진법2_코어::프레임찾기, 깃든수, 음덤프)
변수 프레임 = 프레임찾기(V) // Cr^n 호출키: 1,3,7,20,55,...
// V=27 덮는 최소 = 55(Cr^4)
변수 깃든 = 깃든수(V, 프레임) // 27
변수 음버퍼 = 음덤프(프레임, V) // 55-27=28
// 4단계: 추론 규칙 (크라우니추론엔진 내 규칙 매트릭스)
만약 (위상 == 티) {
변수 결정 = "가속실행"
변수 음_회생 = 음버퍼
} // 결정 + 음_회생 → 상태 갱신
// 5단계: 셀코어 DB (방사형셀코어_코어::스핀업)
변수 셀 = 셀읽기("프로젝트A") // [R=2, θ=50%]
변수 신_셀 = 스핀업(셀, 위상, V) // [R=3, θ=85%]
같은 파이프라인, 다른 위상:
위상 = 타(-1)
V = 10 × 0.375 = 3.75 → 4 (시프트오차 -7 → 음누적)
프레임 = 7(Cr^2)
깃든 = 4
음버퍼 = 3
결정 = "방어전환"
스핀다운 → [R=1, θ=20%]
---
| Level | Cr^n 이론값 | 호출키(올림) | 파생 음 | 누적 용도 |
|---|---|---|---|---|
| 0 | 1.000 | 1 | — | 기준 |
| 1 | 2.718 | 3 | +0.282 | 미시 스케일 조정 |
| 2 | 7.389 | 7 | −0.389 | 약간의 축소 신호 |
| 3 | 20.085 | 20 | −0.085 | 세밀한 조정 |
| 4 | 54.598 | 55 | +0.402 | 중간 팽창 |
| 5 | 148.413 | 148 | −0.413 | 강한 팽창 |
| 6 | 403.429 | 403 | −0.429 | 매우 강한 팽창 |
| 7 | 1096.633 | 1096 | −0.633 | 극단적 팽창 (정수) |
주요 특성:
| Level | Ka^n (3자리 유효) | 사용 | 근거 |
|---|---|---|---|
| 1 | 0.368 | 미시 감소 스케일 | 1/e ≈ 0.36788 |
| 2 | 0.135 | 제곱 수축 | (1/e)^2 ≈ 0.13534 |
| 3 | 0.0498 | 3제곱 | (1/e)^3 ≈ 0.04979 |
| 4 | 0.0183 | 4제곱 | — |
| 5 | 0.00674 | 극미시 | — |
| 6 | 0.00248 | 거의 영 | — |
---
| 방향 | 이상값 | FPGA 선언값 | 이진분수 | 비트시프트(Verilog) | 음 파생 |
|---|---|---|---|---|---|
| 팽창(Cr1) | 2.7182 | 2.75 | 10.11 | x + (x>>1) + (x>>2) | +0.0318 |
| 수축(Ka1) | 0.3678 | 0.375 | 0.011 | (x>>2) + (x>>3) | +0.0072 |
설계 원리:
사상인코더_코어::시프트오차(방향) 함수:
함수 시프트오차(방향) {
만약 (방향 == 티) {
반환 +32 // Cr1 오차 × 1000 ≈ +31.8
} 아니면 (방향 == 타) {
반환 +7 // Ka1 오차 × 1000 ≈ +7.2
} 아니면 {
반환 0 // 옴
}
}
음버퍼에 누적되어, 장기적 보정을 위해 레이지 평가 단계에서 사용.
---
명세서 절⑥ 완료(2026-06-21):
회귀 테스트: 9/9 GREEN
├─ 코어 4개 독립 컴파일
├─ 래퍼 4개 (+ 원본 의미어매핑, 사상인코더 데모)
└─ 추론 엔진 end-to-end ("자산 확장 가속" → 가속실행, 완성비율 50→85%)
음 누적 검증:
초기 음버퍼: 689
시프트오차 누적: +32(Cr1) + +7(Ka1) × 다중호출
회생 후: 637 (음 46 회생)
셀코어 R: 2→3 (한 단계 팽창 확인)
---
문제: 함수 내 전역 배열 인덱싱 = ARRAY OOM, 함수 내 나눗셈 = SIGBUS
원인: hanseonc_high 컴파일 시 2>&1 (stderr를 stdout에 합침) → TOAU 바이너리 오염, 무한 루프
해결:
# ❌ 위험
./hanseonc_high input.한선 > /tmp/out.toau 2>&1
# ✅ 정상
./hanseonc_high input.한선 > /tmp/out.toau
# (stderr는 콘솔로 자유롭게 출력)
발견: 네임스페이스 별칭(이름 X)은 함수 정의명만 변경하고, 내부 호출은 원래 이름 그대로 → 이름 충돌 회피 불가
정답: 무별칭 + 코어 이름 중복 없게 설계 → basename 중복 가져오기 자동 방지
규칙: 코어 파일의 최상위 명령어는 함수 정의만. 출력값() 호출 금지.
예외: 상수 초기화(예: 셀코어 DB 로드)는 허용하되, 화면 출력은 절대 금지.
---
| 변경 요청 | 수정 위치 | 영향 범위 |
|---|---|---|
| 36개 핵심어 확장 | 의미어매핑_코어.한선 1줄 | 모든 추론(위상 재분류) |
| 격자 상수 조정 | 크라우니진법2_코어.한선 배열 | 모든 프레임 결정 |
| 셀코어 DB 스키마 | 방사형셀코어_코어.한선 | 모든 스핀 연산 |
| FPGA 비트시프트값 | 사상인코더_코어.한선 | 모든 V 증폭/감소 |
이전 (인라인): 추론 엔진 + 5개 모듈 내부 × 5 = 최대 6×5=30 테스트점
현재 (가져오기 결합):
Before: 6개 파일, 3곳 복사본 → sync 실패 위험
After: 4개 코어 + 4개 래퍼 + 1개 엔진 = 9개 단일 버전
---
1장: 명명(e → 크, 1/e → 카)과 4상 철학
2~8장: 6개 도구의 독립 구현
9장: 가져오기 결합을 통한 진정한 통합
이제 크라우니 진법은:
을 동시에 만족하는 실제로 작동하는 엔진이 되었다.
다음 궤도는 이 엔진을 기반으로 규칙 매트릭스를 확장하고, 사람·국가·기업의 초지능 의사결정을 지원하는 단계로 진행된다.
---
/Users/ef/CrownyOS/crownyc/CLAUDE.md § 고수준 한선씨 문법 /Users/ef/crowny-base/rtl/크라우니시프트.v/Users/ef/crowny-base/크라우니진법2_코어.한선 (29줄, 순수)/Users/ef/crowny-base/크라우니추론엔진.한선 (v4.0, 4코어 결합)/Users/ef/crowny-base/tests/ (9/9 GREEN)첫 번째 책은 선물이에요. 가입하면 100맘을 드리니까, 두 번째 책부터 자유롭게 읽을 수 있어요. 친구를 추천하면 50맘도 생겨요.