rei-lang 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/LICENSE +230 -191
  2. package/PEACE_USE_CLAUSE.md +95 -0
  3. package/README.md +257 -186
  4. package/bin/rei.js +259 -144
  5. package/dist/index.d.mts +257 -0
  6. package/dist/index.d.ts +181 -93
  7. package/dist/index.js +5710 -239
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +8741 -0
  10. package/dist/index.mjs.map +1 -0
  11. package/package.json +73 -62
  12. package/spec/REI_BNF_v0.2.md +398 -0
  13. package/spec/REI_BNF_v0.3.md +358 -0
  14. package/spec/REI_SPEC_v0.1.md +587 -0
  15. package/theory/LICENSE-THEORY.md +57 -0
  16. package/theory/README.md +85 -0
  17. package/theory/category-c-design.md +502 -0
  18. package/theory/core-theories-11-14.md +799 -0
  19. package/theory/core-theories-15-21.md +675 -0
  20. package/theory/core-theories-8-10.md +582 -0
  21. package/theory/d-fumt-overview.md +99 -0
  22. package/theory/genesis-axiom-system.md +124 -0
  23. package/theory/gft-theory.md +160 -0
  24. package/theory/index.ts +9 -0
  25. package/theory/notation-equivalence.md +134 -0
  26. package/theory/semantic-compressor.ts +903 -0
  27. package/theory/stdlib-tier1-design.md +477 -0
  28. package/theory/theories-11-14.ts +466 -0
  29. package/theory/theories-15-21.ts +762 -0
  30. package/theory/theories-22-28.ts +794 -0
  31. package/theory/theories-29-35.ts +607 -0
  32. package/theory/theories-36-42.ts +937 -0
  33. package/theory/theories-43-49.ts +1298 -0
  34. package/theory/theories-50-56.ts +1449 -0
  35. package/theory/theories-57-66.ts +1724 -0
  36. package/theory/theories-67.ts +1696 -0
  37. package/theory/theories-8-10.ts +284 -0
  38. package/dist/index.cjs +0 -3282
  39. package/dist/index.cjs.map +0 -1
  40. package/dist/index.d.cts +0 -169
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lang/lexer.ts","../src/lang/parser.ts","../src/lang/space.ts","../src/lang/thought.ts","../src/lang/game.ts","../src/lang/puzzle.ts","../src/lang/relation.ts","../src/lang/will.ts","../theory/theories-67.ts","../src/lang/evaluator.ts","../src/index.ts"],"names":["node","trajectory","dominantMode","_","selected","center","neighbors","mode","unwrapReiVal"],"mappings":"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","file":"index.mjs","sourcesContent":["// ============================================================\r\n// Rei v0.3 Lexer — Integrated with Space-Layer-Diffusion\r\n// Original: v0.2.1 by Nobuki Fujimoto\r\n// Extended: v0.3 Space-Layer-Diffusion (collaborative design)\r\n// ============================================================\r\n\r\nexport const TokenType: Record<string, string> = {\r\n // Literals\r\n NUMBER: \"NUMBER\",\r\n STRING: \"STRING\",\r\n EXT_LIT: \"EXT_LIT\",\r\n SYMBOL_0_0: \"SYMBOL_0_0\",\r\n SYMBOL_DOT_PRIM: \"SYMBOL_DOT_PRIM\",\r\n BOOL_TRUE: \"BOOL_TRUE\",\r\n BOOL_FALSE: \"BOOL_FALSE\",\r\n // Math constants\r\n CONST_PI: \"CONST_PI\",\r\n CONST_E: \"CONST_E\",\r\n CONST_PHI: \"CONST_PHI\",\r\n CONST_I: \"CONST_I\",\r\n CONST_PHI_UP: \"CONST_PHI_UP\",\r\n CONST_PSI_UP: \"CONST_PSI_UP\",\r\n CONST_OMEGA_UP: \"CONST_OMEGA_UP\",\r\n CONST_EMPTY: \"CONST_EMPTY\",\r\n // Quad literals (v0.2)\r\n QUAD_TOP: \"QUAD_TOP\",\r\n QUAD_BOT: \"QUAD_BOT\",\r\n QUAD_TOP_PI: \"QUAD_TOP_PI\",\r\n QUAD_BOT_PI: \"QUAD_BOT_PI\",\r\n // Keywords\r\n LET: \"LET\",\r\n MUT: \"MUT\",\r\n COMPRESS: \"COMPRESS\",\r\n WEIGHT: \"WEIGHT\",\r\n GENESIS: \"GENESIS\",\r\n IF: \"IF\",\r\n THEN: \"THEN\",\r\n ELSE: \"ELSE\",\r\n MATCH: \"MATCH\",\r\n CASE: \"CASE\",\r\n WITNESSED: \"WITNESSED\",\r\n BY: \"BY\",\r\n TRUE: \"TRUE\",\r\n FALSE: \"FALSE\",\r\n NULL: \"NULL\",\r\n TEMPORAL: \"TEMPORAL\",\r\n TIMELESS: \"TIMELESS\",\r\n // ── v0.3 Space-Layer-Diffusion keywords ──\r\n SPACE: \"SPACE\", // 空 or \"space\"\r\n LAYER: \"LAYER\", // 層 or \"layer\"\r\n // Identifiers\r\n IDENT: \"IDENT\",\r\n // Operators\r\n PLUS: \"PLUS\",\r\n MINUS: \"MINUS\",\r\n STAR: \"STAR\",\r\n SLASH: \"SLASH\",\r\n OPLUS: \"OPLUS\",\r\n OTIMES: \"OTIMES\",\r\n CDOT: \"CDOT\",\r\n PIPE_OP: \"PIPE_OP\",\r\n EXTEND: \"EXTEND\",\r\n REDUCE: \"REDUCE\",\r\n ASSIGN: \"ASSIGN\",\r\n DOT: \"DOT\",\r\n ARROW: \"ARROW\",\r\n SEMICOLON: \"SEMICOLON\",\r\n COMMA: \"COMMA\",\r\n COLON: \"COLON\",\r\n LPAREN: \"LPAREN\",\r\n RPAREN: \"RPAREN\",\r\n LBRACE: \"LBRACE\",\r\n RBRACE: \"RBRACE\",\r\n LBRACKET: \"LBRACKET\",\r\n RBRACKET: \"RBRACKET\",\r\n CONVERGE: \"CONVERGE\",\r\n DIVERGE: \"DIVERGE\",\r\n REFLECT: \"REFLECT\",\r\n AND: \"AND\",\r\n OR: \"OR\",\r\n NOT: \"NOT\",\r\n GT_K: \"GT_K\",\r\n LT_K: \"LT_K\",\r\n EQ_K: \"EQ_K\",\r\n GT: \"GT\",\r\n LT: \"LT\",\r\n EQ: \"EQ\",\r\n NEQ: \"NEQ\",\r\n GTE: \"GTE\",\r\n LTE: \"LTE\",\r\n MDIM_OPEN: \"MDIM_OPEN\",\r\n // Special\r\n NEWLINE: \"NEWLINE\",\r\n EOF: \"EOF\",\r\n};\r\n\r\nconst KEYWORDS: Record<string, string> = {\r\n \"let\": TokenType.LET,\r\n \"mut\": TokenType.MUT,\r\n \"compress\": TokenType.COMPRESS,\r\n \"weight\": TokenType.WEIGHT,\r\n \"genesis\": TokenType.GENESIS,\r\n \"if\": TokenType.IF,\r\n \"then\": TokenType.THEN,\r\n \"else\": TokenType.ELSE,\r\n \"match\": TokenType.MATCH,\r\n \"case\": TokenType.CASE,\r\n \"witnessed\": TokenType.WITNESSED,\r\n \"by\": TokenType.BY,\r\n \"true\": TokenType.TRUE,\r\n \"false\": TokenType.FALSE,\r\n \"null\": TokenType.NULL,\r\n \"Temporal\": TokenType.TEMPORAL,\r\n \"Timeless\": TokenType.TIMELESS,\r\n // ── v0.3 ──\r\n \"space\": TokenType.SPACE,\r\n \"layer\": TokenType.LAYER,\r\n};\r\n\r\nconst SUBSCRIPT_CHARS = new Set(\"oxzwensbua\".split(\"\"));\r\n\r\nexport interface Token {\r\n type: string;\r\n value: string;\r\n line: number;\r\n col: number;\r\n}\r\n\r\nexport class Lexer {\r\n private chars: string[];\r\n private pos = 0;\r\n private line = 1;\r\n private col = 1;\r\n private tokens: Token[] = [];\r\n\r\n constructor(private source: string) {\r\n this.chars = Array.from(source);\r\n }\r\n\r\n tokenize(): Token[] {\r\n this.tokens = [];\r\n while (this.pos < this.chars.length) {\r\n this.skipWhitespaceAndComments();\r\n if (this.pos >= this.chars.length) break;\r\n const ch = this.chars[this.pos];\r\n\r\n if (ch === \"\\n\") {\r\n this.emit(TokenType.NEWLINE, \"\\n\");\r\n this.advance();\r\n this.line++;\r\n this.col = 1;\r\n continue;\r\n }\r\n if (ch === '\"') { this.readString(); continue; }\r\n if (ch === \"0\" && this.peek(1) === \"\\u2080\") {\r\n this.emit(TokenType.SYMBOL_0_0, \"0\\u2080\");\r\n this.advance(); this.advance(); continue;\r\n }\r\n if (ch === \"\\u{1D544}\" && this.peek(1) === \"{\") {\r\n this.emit(TokenType.MDIM_OPEN, \"\\u{1D544}{\");\r\n this.advance(); this.advance(); continue;\r\n }\r\n // ── v0.3: Unicode 空 and 層 ──\r\n if (ch === \"空\") {\r\n this.emit(TokenType.SPACE, \"空\");\r\n this.advance(); continue;\r\n }\r\n if (ch === \"層\") {\r\n this.emit(TokenType.LAYER, \"層\");\r\n this.advance(); continue;\r\n }\r\n if (this.isExtStart(ch)) {\r\n const ext = this.readExtLit();\r\n if (ext) continue;\r\n }\r\n if (this.isDigit(ch) || (ch === \"-\" && this.isDigit(this.peek(1) ?? \"\") && this.shouldNegateBePrefix())) {\r\n this.readNumber(); continue;\r\n }\r\n if (this.readUnicodeToken(ch)) continue;\r\n if (this.readMultiCharOp(ch)) continue;\r\n if (this.readSingleCharOp(ch)) continue;\r\n if (this.isIdentStart(ch)) { this.readIdentOrKeyword(); continue; }\r\n this.advance();\r\n }\r\n this.emit(TokenType.EOF, \"\");\r\n return this.tokens.filter(t => t.type !== TokenType.NEWLINE);\r\n }\r\n\r\n private skipWhitespaceAndComments() {\r\n while (this.pos < this.chars.length) {\r\n const ch = this.chars[this.pos];\r\n if (ch === \" \" || ch === \"\\t\" || ch === \"\\r\") { this.advance(); continue; }\r\n if (ch === \"/\" && this.peek(1) === \"/\") {\r\n while (this.pos < this.chars.length && this.chars[this.pos] !== \"\\n\") this.advance();\r\n continue;\r\n }\r\n if (ch === \"/\" && this.peek(1) === \"*\") {\r\n this.advance(); this.advance();\r\n while (this.pos < this.chars.length) {\r\n if (this.chars[this.pos] === \"*\" && this.peek(1) === \"/\") {\r\n this.advance(); this.advance(); break;\r\n }\r\n if (this.chars[this.pos] === \"\\n\") { this.line++; this.col = 0; }\r\n this.advance();\r\n }\r\n continue;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private readString() {\r\n const startCol = this.col;\r\n this.advance();\r\n let str = \"\";\r\n while (this.pos < this.chars.length && this.chars[this.pos] !== '\"') {\r\n if (this.chars[this.pos] === \"\\\\\" && this.pos + 1 < this.chars.length) {\r\n this.advance();\r\n const esc = this.chars[this.pos];\r\n if (esc === \"n\") str += \"\\n\";\r\n else if (esc === \"t\") str += \"\\t\";\r\n else if (esc === \"\\\\\") str += \"\\\\\";\r\n else if (esc === '\"') str += '\"';\r\n else str += esc;\r\n } else {\r\n str += this.chars[this.pos];\r\n }\r\n this.advance();\r\n }\r\n if (this.pos < this.chars.length) this.advance();\r\n this.tokens.push({ type: TokenType.STRING, value: str, line: this.line, col: startCol });\r\n }\r\n\r\n private isExtStart(ch: string): boolean {\r\n if (ch === \"0\" && SUBSCRIPT_CHARS.has(this.peek(1) ?? \"\")) return true;\r\n if (ch === \"\\u03C0\" || ch === \"\\u03C6\") {\r\n const next = this.peek(1);\r\n if (next && SUBSCRIPT_CHARS.has(next)) return true;\r\n }\r\n if (ch === \"e\" || ch === \"i\") {\r\n const next = this.peek(1);\r\n if (!next || !SUBSCRIPT_CHARS.has(next)) return false;\r\n let offset = 1;\r\n while (this.peek(offset) && SUBSCRIPT_CHARS.has(this.peek(offset)!)) offset++;\r\n const afterSubs = this.peek(offset);\r\n if (afterSubs && /[a-zA-Z0-9_]/.test(afterSubs)) return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private readExtLit(): boolean {\r\n const startCol = this.col;\r\n const base = this.chars[this.pos];\r\n this.advance();\r\n let subs = \"\";\r\n while (this.pos < this.chars.length && SUBSCRIPT_CHARS.has(this.chars[this.pos])) {\r\n subs += this.chars[this.pos];\r\n this.advance();\r\n }\r\n if (subs.length > 0) {\r\n this.tokens.push({ type: TokenType.EXT_LIT, value: base + subs, line: this.line, col: startCol });\r\n return true;\r\n }\r\n this.pos--; this.col--;\r\n return false;\r\n }\r\n\r\n private readNumber() {\r\n const startCol = this.col;\r\n let num = \"\";\r\n if (this.chars[this.pos] === \"-\") { num += \"-\"; this.advance(); }\r\n while (this.pos < this.chars.length && this.isDigit(this.chars[this.pos])) {\r\n num += this.chars[this.pos]; this.advance();\r\n }\r\n if (this.pos < this.chars.length && this.chars[this.pos] === \".\" && this.isDigit(this.peek(1) ?? \"\")) {\r\n num += \".\"; this.advance();\r\n while (this.pos < this.chars.length && this.isDigit(this.chars[this.pos])) {\r\n num += this.chars[this.pos]; this.advance();\r\n }\r\n }\r\n this.tokens.push({ type: TokenType.NUMBER, value: num, line: this.line, col: startCol });\r\n }\r\n\r\n private readUnicodeToken(ch: string): boolean {\r\n const map: [string, string][] = [\r\n [\"\\u2295\", TokenType.OPLUS],\r\n [\"\\u2297\", TokenType.OTIMES],\r\n [\"\\xB7\", TokenType.CDOT],\r\n [\"\\u03C0\", TokenType.CONST_PI],\r\n [\"\\u03C6\", TokenType.CONST_PHI],\r\n [\"\\u03A6\", TokenType.CONST_PHI_UP],\r\n [\"\\u03A8\", TokenType.CONST_PSI_UP],\r\n [\"\\u03A9\", TokenType.CONST_OMEGA_UP],\r\n [\"\\u2205\", TokenType.CONST_EMPTY],\r\n [\"\\u22A4\", TokenType.QUAD_TOP],\r\n [\"\\u22A5\", TokenType.QUAD_BOT],\r\n [\"\\u290A\", TokenType.CONVERGE],\r\n [\"\\u290B\", TokenType.DIVERGE],\r\n [\"\\u25C1\", TokenType.REFLECT],\r\n [\"\\u2227\", TokenType.AND],\r\n [\"\\u2228\", TokenType.OR],\r\n [\"\\xAC\", TokenType.NOT],\r\n [\"\\u30FB\", TokenType.SYMBOL_DOT_PRIM],\r\n ];\r\n if (ch === \"\\u22A4\" && this.peek(1) === \"\\u03C0\") {\r\n this.emit(TokenType.QUAD_TOP_PI, \"\\u22A4\\u03C0\");\r\n this.advance(); this.advance(); return true;\r\n }\r\n if (ch === \"\\u22A5\" && this.peek(1) === \"\\u03C0\") {\r\n this.emit(TokenType.QUAD_BOT_PI, \"\\u22A5\\u03C0\");\r\n this.advance(); this.advance(); return true;\r\n }\r\n for (const [sym, type] of map) {\r\n if (ch === sym) {\r\n this.emit(type, sym); this.advance(); return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private readMultiCharOp(ch: string): boolean {\r\n const next = this.peek(1);\r\n if (ch === \"|\" && next === \">\") { this.emit(TokenType.PIPE_OP, \"|>\"); this.advance(); this.advance(); return true; }\r\n if (ch === \">\" && next === \">\") { this.emit(TokenType.EXTEND, \">>\"); this.advance(); this.advance(); return true; }\r\n if (ch === \"<\" && next === \"<\") { this.emit(TokenType.REDUCE, \"<<\"); this.advance(); this.advance(); return true; }\r\n if (ch === \"-\" && next === \">\") { this.emit(TokenType.ARROW, \"->\"); this.advance(); this.advance(); return true; }\r\n if (ch === \"=\" && next === \"=\") { this.emit(TokenType.EQ, \"==\"); this.advance(); this.advance(); return true; }\r\n if (ch === \"!\" && next === \"=\") { this.emit(TokenType.NEQ, \"!=\"); this.advance(); this.advance(); return true; }\r\n if (ch === \">\" && next === \"=\") { this.emit(TokenType.GTE, \">=\"); this.advance(); this.advance(); return true; }\r\n if (ch === \"<\" && next === \"=\") { this.emit(TokenType.LTE, \"<=\"); this.advance(); this.advance(); return true; }\r\n if (ch === \">\" && next === \"\\u03BA\") { this.emit(TokenType.GT_K, \">\\u03BA\"); this.advance(); this.advance(); return true; }\r\n if (ch === \"<\" && next === \"\\u03BA\") { this.emit(TokenType.LT_K, \"<\\u03BA\"); this.advance(); this.advance(); return true; }\r\n if (ch === \"=\" && next === \"\\u03BA\") { this.emit(TokenType.EQ_K, \"=\\u03BA\"); this.advance(); this.advance(); return true; }\r\n return false;\r\n }\r\n\r\n private readSingleCharOp(ch: string): boolean {\r\n const map: Record<string, string> = {\r\n \"+\": TokenType.PLUS, \"-\": TokenType.MINUS, \"*\": TokenType.STAR, \"/\": TokenType.SLASH,\r\n \"=\": TokenType.ASSIGN, \".\": TokenType.DOT, \",\": TokenType.COMMA, \":\": TokenType.COLON,\r\n \";\": TokenType.SEMICOLON, \"(\": TokenType.LPAREN, \")\": TokenType.RPAREN,\r\n \"{\": TokenType.LBRACE, \"}\": TokenType.RBRACE, \"[\": TokenType.LBRACKET,\r\n \"]\": TokenType.RBRACKET, \"|\": TokenType.PIPE_OP, \">\": TokenType.GT, \"<\": TokenType.LT,\r\n };\r\n const type = map[ch];\r\n if (type) { this.emit(type, ch); this.advance(); return true; }\r\n return false;\r\n }\r\n\r\n private readIdentOrKeyword() {\r\n const startCol = this.col;\r\n let name = \"\";\r\n while (this.pos < this.chars.length && this.isIdentPart(this.chars[this.pos])) {\r\n name += this.chars[this.pos]; this.advance();\r\n }\r\n if (name.startsWith(\"compress\") && name.length > 8) {\r\n const suffix = name.slice(8);\r\n if ([\"\\u2070\", \"\\xB9\", \"\\xB2\", \"\\xB3\", \"\\u221E\"].includes(suffix)) {\r\n this.tokens.push({ type: TokenType.COMPRESS, value: name, line: this.line, col: startCol });\r\n return;\r\n }\r\n }\r\n const kw = KEYWORDS[name];\r\n if (kw) {\r\n this.tokens.push({ type: kw, value: name, line: this.line, col: startCol });\r\n } else {\r\n this.tokens.push({ type: TokenType.IDENT, value: name, line: this.line, col: startCol });\r\n }\r\n }\r\n\r\n private advance() { this.pos++; this.col++; }\r\n private peek(offset: number): string | undefined { return this.chars[this.pos + offset]; }\r\n private emit(type: string, value: string) { this.tokens.push({ type, value, line: this.line, col: this.col }); }\r\n private isDigit(ch: string) { return ch >= \"0\" && ch <= \"9\"; }\r\n private isIdentStart(ch: string) { return /[a-zA-Z_α-ωΑ-Ω𝕄𝕌\\u3040-\\u309F\\u30A0-\\u30FF\\u4E00-\\u9FFF]/.test(ch); }\r\n private isIdentPart(ch: string) { return /[a-zA-Z0-9_α-ωΑ-Ω⁰¹²³∞𝕄𝕌\\u3040-\\u309F\\u30A0-\\u30FF\\u4E00-\\u9FFF]/.test(ch); }\r\n private shouldNegateBePrefix(): boolean {\r\n if (this.tokens.length === 0) return true;\r\n const last = this.tokens[this.tokens.length - 1];\r\n return [\r\n TokenType.LPAREN, TokenType.COMMA, TokenType.ASSIGN,\r\n TokenType.PLUS, TokenType.MINUS, TokenType.STAR, TokenType.SLASH,\r\n TokenType.OPLUS, TokenType.OTIMES, TokenType.PIPE_OP,\r\n TokenType.SEMICOLON, TokenType.LBRACKET, TokenType.COLON,\r\n TokenType.MDIM_OPEN, TokenType.LBRACE,\r\n ].includes(last.type);\r\n }\r\n}\r\n","// ============================================================\n// Rei v0.3 Parser — Integrated with Space-Layer-Diffusion\n// Original: v0.2.1 by Nobuki Fujimoto\n// Extended: v0.3 Space-Layer-Diffusion (collaborative design)\n// ============================================================\n\nimport { TokenType, type Token } from './lexer';\n\nfunction node(type: string, props: Record<string, any> = {}): any {\n return { type, ...props };\n}\n\nexport class Parser {\n private pos = 0;\n private tokens: Token[];\n\n constructor(tokens: Token[]) {\n this.tokens = tokens.filter(t => t.type !== TokenType.NEWLINE);\n }\n\n parseProgram(): any {\n const stmts: any[] = [];\n while (!this.isAtEnd()) {\n while (this.check(TokenType.SEMICOLON)) this.advance();\n if (this.isAtEnd()) break;\n stmts.push(this.parseStatement());\n while (this.check(TokenType.SEMICOLON)) this.advance();\n }\n return node(\"Program\", { body: stmts });\n }\n\n private parseStatement(): any {\n if (this.check(TokenType.LET)) return this.parseLetStmt();\n if (this.check(TokenType.COMPRESS)) return this.parseCompressDef();\n return this.parseExpression();\n }\n\n // --- let [mut] name [: type] = expr [witnessed by \"...\"] ---\n private parseLetStmt(): any {\n this.expect(TokenType.LET);\n const mutable = this.match(TokenType.MUT);\n const name = this.expect(TokenType.IDENT).value;\n let typeAnnotation: string | null = null;\n let phaseGuard: string | null = null;\n if (this.match(TokenType.COLON)) {\n typeAnnotation = this.expect(TokenType.IDENT).value;\n if (this.check(TokenType.IDENT) && this.peek().value.startsWith(\"@\")) {\n phaseGuard = this.advance().value.slice(1);\n }\n }\n this.expect(TokenType.ASSIGN);\n const init = this.parseExpression();\n let witness: string | null = null;\n if (this.match(TokenType.WITNESSED)) {\n this.expect(TokenType.BY);\n witness = this.expect(TokenType.STRING).value;\n }\n return node(mutable ? \"MutStmt\" : \"LetStmt\", {\n name, init, typeAnnotation, phaseGuard, witness,\n });\n }\n\n // --- compress [level] name(params) [-> type] = body ---\n private parseCompressDef(): any {\n const compressToken = this.expect(TokenType.COMPRESS);\n const level = this.parseCompressLevel(compressToken.value);\n const name = this.expect(TokenType.IDENT).value;\n this.expect(TokenType.LPAREN);\n const params: string[] = [];\n if (!this.check(TokenType.RPAREN)) {\n params.push(this.parseParamDecl());\n while (this.match(TokenType.COMMA)) {\n params.push(this.parseParamDecl());\n }\n }\n this.expect(TokenType.RPAREN);\n let returnType: string | null = null;\n if (this.match(TokenType.ARROW)) {\n returnType = this.expect(TokenType.IDENT).value;\n }\n this.expect(TokenType.ASSIGN);\n const body = this.parseExpression();\n return node(\"CompressDef\", { name, params, body, level, returnType });\n }\n\n private parseCompressLevel(value: string): number {\n if (value === \"compress\") return -1;\n const suffixMap: Record<string, number> = {\n \"compress\\u2070\": 0, // ⁰\n \"compress\\xB9\": 1, // ¹\n \"compress\\xB2\": 2, // ²\n \"compress\\xB3\": 3, // ³\n \"compress\\u221E\": Infinity, // ∞\n };\n return suffixMap[value] ?? -1;\n }\n\n private parseParamDecl(): string {\n let name: string;\n if (this.check(TokenType.IDENT)) {\n name = this.advance().value;\n } else if (this.check(TokenType.CONST_E)) {\n name = this.advance().value;\n } else if (this.check(TokenType.CONST_I)) {\n name = this.advance().value;\n } else {\n name = this.expect(TokenType.IDENT).value;\n }\n if (this.match(TokenType.COLON)) {\n this.expect(TokenType.IDENT); // type annotation consumed\n }\n return name;\n }\n\n // --- Expression hierarchy (low → high precedence) ---\n private parseExpression(): any {\n return this.parsePipe();\n }\n\n // Level 1: |> pipe, ◁ reflect\n private parsePipe(): any {\n let left = this.parseLogicOr();\n while (this.check(TokenType.PIPE_OP) || this.check(TokenType.REFLECT)) {\n if (this.match(TokenType.PIPE_OP)) {\n const cmd = this.parsePipeCommand();\n left = node(\"Pipe\", { input: left, command: cmd });\n } else if (this.match(TokenType.REFLECT)) {\n const right = this.parseLogicOr();\n left = node(\"ReflectOp\", { left, right });\n }\n }\n return left;\n }\n\n private parsePipeCommand(): any {\n if (this.check(TokenType.IDENT) || this.check(TokenType.GENESIS)\n || this.check(TokenType.SPACE) || this.check(TokenType.LAYER)\n || this.check(TokenType.COMPRESS)) {\n const cmd = this.advance().value;\n let mode: string | null = null;\n let args: any[] = [];\n if (this.match(TokenType.COLON)) {\n mode = this.expect(TokenType.IDENT).value;\n }\n if (this.match(TokenType.LPAREN)) {\n if (!this.check(TokenType.RPAREN)) {\n args.push(this.parseExpression());\n while (this.match(TokenType.COMMA)) args.push(this.parseExpression());\n }\n this.expect(TokenType.RPAREN);\n }\n return node(\"PipeCmd\", { cmd, mode, args });\n }\n if (this.match(TokenType.CONVERGE)) return node(\"PipeCmd\", { cmd: \"\\u290A\", mode: null, args: [] });\n if (this.match(TokenType.DIVERGE)) return node(\"PipeCmd\", { cmd: \"\\u290B\", mode: null, args: [] });\n throw this.error(\"パイプコマンドが必要\");\n }\n\n // Level 2: ∧ ∨ (logic)\n private parseLogicOr(): any {\n let left = this.parseLogicAnd();\n while (this.match(TokenType.OR)) {\n const right = this.parseLogicAnd();\n left = node(\"BinOp\", { op: \"\\u2228\", left, right });\n }\n return left;\n }\n\n private parseLogicAnd(): any {\n let left = this.parseComparison();\n while (this.match(TokenType.AND)) {\n const right = this.parseComparison();\n left = node(\"BinOp\", { op: \"\\u2227\", left, right });\n }\n return left;\n }\n\n // Level 3: comparison operators\n private parseComparison(): any {\n let left = this.parseAddition();\n const compOps = [\n TokenType.GT_K, TokenType.LT_K, TokenType.EQ_K,\n TokenType.EQ, TokenType.NEQ, TokenType.GT, TokenType.LT,\n TokenType.GTE, TokenType.LTE,\n ];\n while (compOps.some(op => this.check(op))) {\n const opToken = this.advance();\n const right = this.parseAddition();\n left = node(\"BinOp\", { op: opToken.value, left, right });\n }\n return left;\n }\n\n // Level 4: + - ⊕\n private parseAddition(): any {\n let left = this.parseMultiplication();\n while (this.check(TokenType.PLUS) || this.check(TokenType.MINUS) || this.check(TokenType.OPLUS)) {\n const op = this.advance().value;\n const right = this.parseMultiplication();\n left = node(\"BinOp\", { op, left, right });\n }\n return left;\n }\n\n // Level 5: * / ⊗ ·\n private parseMultiplication(): any {\n let left = this.parseExtendReduce();\n while (this.check(TokenType.STAR) || this.check(TokenType.SLASH) || this.check(TokenType.OTIMES) || this.check(TokenType.CDOT)) {\n const op = this.advance().value;\n const right = this.parseExtendReduce();\n left = node(\"BinOp\", { op, left, right });\n }\n return left;\n }\n\n // Level 6: >> << ⤊ ⤋\n private parseExtendReduce(): any {\n let left = this.parseUnary();\n while (true) {\n if (this.match(TokenType.EXTEND)) {\n if (this.match(TokenType.COLON)) {\n const sub = this.expect(TokenType.IDENT).value;\n left = node(\"Extend\", { target: left, subscript: sub });\n } else {\n const right = this.parseUnary();\n left = node(\"Extend\", { target: left, expr: right });\n }\n } else if (this.match(TokenType.REDUCE)) {\n left = node(\"Reduce\", { target: left });\n } else if (this.match(TokenType.CONVERGE)) {\n const right = this.parseUnary();\n left = node(\"ConvergeOp\", { left, right });\n } else if (this.match(TokenType.DIVERGE)) {\n const right = this.parseUnary();\n left = node(\"DivergeOp\", { left, right });\n } else {\n break;\n }\n }\n return left;\n }\n\n // Level 7: unary ¬ -\n private parseUnary(): any {\n if (this.match(TokenType.NOT)) {\n const operand = this.parseUnary();\n return node(\"UnaryOp\", { op: \"\\xAC\", operand });\n }\n if (this.check(TokenType.MINUS) && this.shouldNegateBePrefix()) {\n this.advance();\n const operand = this.parseUnary();\n return node(\"UnaryOp\", { op: \"-\", operand });\n }\n return this.parsePostfix();\n }\n\n // Level 8: . member access, [index], (call)\n private parsePostfix(): any {\n let left = this.parsePrimary();\n while (true) {\n if (this.match(TokenType.DOT)) {\n if (this.check(TokenType.IDENT)) {\n const member = this.advance().value;\n // Check for .κ suffix using lookahead (don't consume DOT yet)\n if (this.check(TokenType.DOT) && this.checkAhead(TokenType.IDENT, 1)\n && this.tokens[this.pos + 1]?.value === \"\\u03BA\") {\n this.advance(); // consume DOT\n this.advance(); // consume κ\n left = node(\"MemberAccess\", { object: left, member, kappa: true });\n } else {\n left = node(\"MemberAccess\", { object: left, member, kappa: false });\n }\n }\n } else if (this.match(TokenType.LPAREN)) {\n const args: any[] = [];\n if (!this.check(TokenType.RPAREN)) {\n args.push(this.parseExpression());\n while (this.match(TokenType.COMMA)) args.push(this.parseExpression());\n }\n this.expect(TokenType.RPAREN);\n left = node(\"FnCall\", { callee: left, args });\n } else if (this.match(TokenType.LBRACKET)) {\n const index = this.parseExpression();\n this.expect(TokenType.RBRACKET);\n left = node(\"IndexAccess\", { object: left, index });\n } else {\n break;\n }\n }\n return left;\n }\n\n // --- Primary expressions ---\n private parsePrimary(): any {\n if (this.check(TokenType.NUMBER)) {\n const val = this.advance().value;\n return node(\"NumLit\", { value: parseFloat(val) });\n }\n if (this.check(TokenType.STRING)) {\n return node(\"StrLit\", { value: this.advance().value });\n }\n if (this.match(TokenType.TRUE)) return node(\"BoolLit\", { value: true });\n if (this.match(TokenType.FALSE)) return node(\"BoolLit\", { value: false });\n if (this.match(TokenType.NULL)) return node(\"NullLit\", {});\n if (this.check(TokenType.EXT_LIT)) {\n const val = this.advance().value;\n return node(\"ExtLit\", { raw: val });\n }\n if (this.match(TokenType.SYMBOL_0_0)) {\n return node(\"ExtLit\", { raw: \"0\\u2080\" });\n }\n if (this.match(TokenType.SYMBOL_DOT_PRIM)) {\n return node(\"ConstLit\", { value: \"\\u30FB\" });\n }\n if (this.match(TokenType.CONST_PI)) return node(\"NumLit\", { value: Math.PI });\n if (this.match(TokenType.CONST_E)) return node(\"NumLit\", { value: Math.E });\n if (this.match(TokenType.CONST_PHI)) return node(\"NumLit\", { value: (1 + Math.sqrt(5)) / 2 });\n if (this.match(TokenType.CONST_I)) return node(\"ConstLit\", { value: \"i\" });\n if (this.match(TokenType.CONST_EMPTY)) return node(\"ConstLit\", { value: \"\\u2205\" });\n if (this.match(TokenType.CONST_PHI_UP)) return node(\"ConstLit\", { value: \"\\u03A6\" });\n if (this.match(TokenType.CONST_PSI_UP)) return node(\"ConstLit\", { value: \"\\u03A8\" });\n if (this.match(TokenType.CONST_OMEGA_UP)) return node(\"ConstLit\", { value: \"\\u03A9\" });\n if (this.match(TokenType.QUAD_TOP)) return node(\"QuadLit\", { value: \"top\" });\n if (this.match(TokenType.QUAD_BOT)) return node(\"QuadLit\", { value: \"bottom\" });\n if (this.match(TokenType.QUAD_TOP_PI)) return node(\"QuadLit\", { value: \"topPi\" });\n if (this.match(TokenType.QUAD_BOT_PI)) return node(\"QuadLit\", { value: \"bottomPi\" });\n if (this.match(TokenType.MDIM_OPEN)) {\n return this.parseMDimLit();\n }\n if (this.match(TokenType.LBRACKET)) {\n const elems: any[] = [];\n if (!this.check(TokenType.RBRACKET)) {\n elems.push(this.parseExpression());\n while (this.match(TokenType.COMMA)) elems.push(this.parseExpression());\n }\n this.expect(TokenType.RBRACKET);\n return node(\"ArrayLit\", { elements: elems });\n }\n if (this.match(TokenType.LPAREN)) {\n const expr = this.parseExpression();\n this.expect(TokenType.RPAREN);\n return expr;\n }\n if (this.check(TokenType.IF)) return this.parseIfExpr();\n if (this.check(TokenType.MATCH)) return this.parseMatchExpr();\n if (this.check(TokenType.GENESIS)) {\n this.advance();\n if (this.match(TokenType.LPAREN)) {\n this.expect(TokenType.RPAREN);\n }\n return node(\"FnCall\", { callee: node(\"Ident\", { name: \"genesis\" }), args: [] });\n }\n\n // ── v0.3: Space literal ──\n if (this.check(TokenType.SPACE)) {\n return this.parseSpaceLit();\n }\n\n if (this.check(TokenType.IDENT)) {\n const name = this.advance().value;\n return node(\"Ident\", { name });\n }\n throw this.error(`予期しないトークン: ${this.peek().value} (${this.peek().type})`);\n }\n\n // --- MDim literal: 𝕄{center; n1, n2, ... [weight w] [mode]} ---\n private parseMDimLit(): any {\n const center = this.parseExpression();\n this.expect(TokenType.SEMICOLON);\n const neighbors: any[] = [];\n neighbors.push(this.parseExpression());\n while (this.match(TokenType.COMMA)) {\n if (this.check(TokenType.RBRACE)) break;\n if (this.check(TokenType.WEIGHT)) break;\n neighbors.push(this.parseExpression());\n }\n let weight: any = null;\n if (this.match(TokenType.WEIGHT)) {\n weight = this.parseExpression();\n }\n let mode = \"weighted\";\n if (this.match(TokenType.COLON)) {\n if (this.check(TokenType.IDENT)) {\n mode = this.advance().value;\n }\n }\n this.expect(TokenType.RBRACE);\n return node(\"MDimLit\", { center, neighbors, weight, mode });\n }\n\n // ── v0.3: Space literal: 空{ 層 0: expr, expr 層 1: expr } ──\n private parseSpaceLit(): any {\n this.expect(TokenType.SPACE); // consume 空 or space\n this.expect(TokenType.LBRACE);\n\n const layers: any[] = [];\n let topology = \"flat\";\n\n // Check for topology: 空{ topology: torus, ... }\n if (this.check(TokenType.IDENT) && this.peek().value === \"topology\") {\n this.advance(); // consume 'topology'\n this.expect(TokenType.COLON);\n if (this.check(TokenType.IDENT)) {\n topology = this.advance().value;\n }\n this.match(TokenType.COMMA); // optional comma\n }\n\n // Parse layer definitions\n while (!this.check(TokenType.RBRACE) && !this.isAtEnd()) {\n // 層 N: or layer N:\n if (!this.check(TokenType.LAYER)) {\n throw this.error(`層の定義が必要です。実際: ${this.peek().type} (\"${this.peek().value}\")`);\n }\n this.expect(TokenType.LAYER);\n const layerIndex = this.parseExpression();\n this.expect(TokenType.COLON);\n\n const nodes: any[] = [];\n // Parse node expressions until next 層 or }\n nodes.push(this.parseExpression());\n while (this.match(TokenType.COMMA)) {\n // Stop if next token is a layer definition or closing brace\n if (this.check(TokenType.LAYER) || this.check(TokenType.RBRACE)) break;\n nodes.push(this.parseExpression());\n }\n\n layers.push({ index: layerIndex, nodes });\n }\n\n this.expect(TokenType.RBRACE);\n return node(\"SpaceLit\", { layers, topology });\n }\n\n // --- if expr then expr else expr ---\n private parseIfExpr(): any {\n this.expect(TokenType.IF);\n const cond = this.parseExpression();\n this.expect(TokenType.THEN);\n const then = this.parseExpression();\n this.expect(TokenType.ELSE);\n const elseExpr = this.parseExpression();\n return node(\"IfExpr\", { cond, then, else: elseExpr });\n }\n\n // --- match expr { case pat -> expr, ... } ---\n private parseMatchExpr(): any {\n this.expect(TokenType.MATCH);\n const target = this.parseExpression();\n this.expect(TokenType.LBRACE);\n const cases: any[] = [];\n while (!this.check(TokenType.RBRACE) && !this.isAtEnd()) {\n this.expect(TokenType.CASE);\n const pattern = this.parsePrimary();\n this.expect(TokenType.ARROW);\n const body = this.parseExpression();\n cases.push({ pattern, body });\n this.match(TokenType.COMMA);\n }\n this.expect(TokenType.RBRACE);\n return node(\"MatchExpr\", { target, cases });\n }\n\n // --- Helpers ---\n private peek(): Token {\n return this.tokens[this.pos] || { type: TokenType.EOF, value: \"\", line: 0, col: 0 };\n }\n private isAtEnd(): boolean { return this.peek().type === TokenType.EOF; }\n private check(type: string): boolean { return this.peek().type === type; }\n private checkAhead(type: string, offset: number): boolean {\n const idx = this.pos + offset;\n return idx < this.tokens.length && this.tokens[idx].type === type;\n }\n private advance(): Token { const t = this.tokens[this.pos]; this.pos++; return t; }\n private match(type: string): boolean {\n if (this.check(type)) { this.advance(); return true; }\n return false;\n }\n private expect(type: string): Token {\n if (this.check(type)) return this.advance();\n const t = this.peek();\n throw this.error(`期待: ${type}, 実際: ${t.type} (\"${t.value}\")`);\n }\n private error(msg: string): Error {\n const t = this.peek();\n return new Error(`[行 ${t.line}:${t.col}] 構文エラー: ${msg}`);\n }\n private shouldNegateBePrefix(): boolean {\n if (this.pos === 0) return true;\n const prev = this.tokens[this.pos - 1];\n return [\n TokenType.LPAREN, TokenType.COMMA, TokenType.ASSIGN,\n TokenType.PLUS, TokenType.MINUS, TokenType.STAR, TokenType.SLASH,\n TokenType.OPLUS, TokenType.OTIMES, TokenType.PIPE_OP,\n TokenType.SEMICOLON, TokenType.LBRACKET, TokenType.COLON,\n TokenType.MDIM_OPEN, TokenType.LBRACE,\n ].includes(prev.type);\n }\n}\n","// ============================================================\r\n// Rei v0.3 — Space-Layer-Diffusion Model (場-層-拡散計算モデル)\r\n// Based on D-FUMT multi-dimensional number system theory\r\n// Author: Nobuki Fujimoto / Claude (collaborative design)\r\n// ============================================================\r\n\r\n// --- Core Types ---\r\n\r\n/** 拡散段階の履歴エントリ */\r\nexport interface DiffusionHistoryEntry {\r\n stage: number;\r\n directions: number;\r\n result: number;\r\n neighbors: number[];\r\n}\r\n\r\n/** σ(自己参照)の流れ情報 */\r\nexport interface SigmaFlow {\r\n stage: number;\r\n directions: number;\r\n momentum: 'rest' | 'expanding' | 'contracting' | 'converged';\r\n velocity: number;\r\n}\r\n\r\n/** σ(自己参照)の記憶情報 */\r\nexport type SigmaMemory = DiffusionHistoryEntry[];\r\n\r\n/** σ(自己参照)の場情報 */\r\nexport interface SigmaField {\r\n center: number;\r\n neighbors: number[];\r\n layer: number;\r\n index: number;\r\n co_nodes: number; // 同じ層の他のノード数\r\n}\r\n\r\n/** σ(自己参照)の関係情報 */\r\nexport interface SigmaRelation {\r\n target: { layer: number; index: number };\r\n similarity: number;\r\n type: 'resonance' | 'neighbor';\r\n}\r\n\r\n/** σ(自己参照)の意志情報 */\r\nexport interface SigmaWill {\r\n tendency: 'contract' | 'expand' | 'spiral' | 'rest';\r\n strength: number;\r\n history: string[];\r\n}\r\n\r\n/** 拡散ノード(DNode)— 場の中の個々の計算ノード */\r\nexport interface DNode {\r\n reiType: 'DNode';\r\n center: number;\r\n neighbors: number[];\r\n mode: string;\r\n weights?: number[];\r\n // 拡散状態\r\n stage: number;\r\n initialDirections: number;\r\n diffusionHistory: DiffusionHistoryEntry[];\r\n momentum: 'rest' | 'expanding' | 'contracting' | 'converged';\r\n // sigma\r\n layerIndex: number;\r\n nodeIndex: number;\r\n tendencyHistory: string[];\r\n}\r\n\r\n/** 層(Layer)— 場の中の1階層 */\r\nexport interface SpaceLayer {\r\n index: number;\r\n nodes: DNode[];\r\n frozen: boolean;\r\n}\r\n\r\n/** 場(Space)— 計算ノードの共存する空間 */\r\nexport interface ReiSpace {\r\n reiType: 'Space';\r\n layers: Map<number, SpaceLayer>;\r\n topology: 'flat' | 'torus' | 'sphere';\r\n globalStage: number;\r\n}\r\n\r\n// --- Factory Functions ---\r\n\r\n/** MDim値からDNodeを生成 */\r\nexport function createDNode(\r\n center: number,\r\n neighbors: number[],\r\n mode: string = 'weighted',\r\n weights?: number[],\r\n layerIndex: number = 0,\r\n nodeIndex: number = 0\r\n): DNode {\r\n return {\r\n reiType: 'DNode',\r\n center,\r\n neighbors: [...neighbors],\r\n mode,\r\n weights,\r\n stage: 0,\r\n initialDirections: neighbors.length,\r\n diffusionHistory: [{\r\n stage: 0,\r\n directions: neighbors.length,\r\n result: center,\r\n neighbors: [...neighbors],\r\n }],\r\n momentum: 'rest',\r\n layerIndex,\r\n nodeIndex,\r\n tendencyHistory: [],\r\n };\r\n}\r\n\r\n/** 空の場を生成 */\r\nexport function createSpace(topology: 'flat' | 'torus' | 'sphere' = 'flat'): ReiSpace {\r\n return {\r\n reiType: 'Space',\r\n layers: new Map(),\r\n topology,\r\n globalStage: 0,\r\n };\r\n}\r\n\r\n/** 場に層を追加 */\r\nexport function addLayer(space: ReiSpace, layerIndex: number): SpaceLayer {\r\n if (!space.layers.has(layerIndex)) {\r\n space.layers.set(layerIndex, {\r\n index: layerIndex,\r\n nodes: [],\r\n frozen: false,\r\n });\r\n }\r\n return space.layers.get(layerIndex)!;\r\n}\r\n\r\n/** 層にノードを追加 */\r\nexport function addNodeToLayer(\r\n space: ReiSpace,\r\n layerIndex: number,\r\n center: number,\r\n neighbors: number[],\r\n mode: string = 'weighted',\r\n weights?: number[]\r\n): DNode {\r\n const layer = addLayer(space, layerIndex);\r\n const nodeIndex = layer.nodes.length;\r\n const node = createDNode(center, neighbors, mode, weights, layerIndex, nodeIndex);\r\n layer.nodes.push(node);\r\n return node;\r\n}\r\n\r\n// --- Diffusion Engine ---\r\n\r\n/** デフォルト拡散関数: 線形補間拡散 */\r\nfunction defaultDiffuse(neighbors: number[]): number[] {\r\n const n = neighbors.length;\r\n if (n === 0) return [];\r\n const result: number[] = [];\r\n for (let i = 0; i < n; i++) {\r\n result.push(neighbors[i]);\r\n result.push((neighbors[i] + neighbors[(i + 1) % n]) / 2);\r\n }\r\n return result;\r\n}\r\n\r\n/** ノードを1段階拡散させる */\r\nexport function stepNode(node: DNode, diffuseFn?: (neighbors: number[]) => number[]): void {\r\n if (node.momentum === 'converged' || node.momentum === 'contracting') return;\r\n\r\n const fn = diffuseFn ?? defaultDiffuse;\r\n const newNeighbors = fn(node.neighbors);\r\n \r\n // 前段階との差分を計算\r\n const prevResult = computeNodeValue(node);\r\n node.neighbors = newNeighbors;\r\n node.stage += 1;\r\n const newResult = computeNodeValue(node);\r\n \r\n // 記憶に記録\r\n node.diffusionHistory.push({\r\n stage: node.stage,\r\n directions: newNeighbors.length,\r\n result: newResult,\r\n neighbors: [...newNeighbors],\r\n });\r\n\r\n // momentum更新\r\n node.momentum = 'expanding';\r\n\r\n // 傾向性の判定\r\n const delta = Math.abs(newResult - prevResult);\r\n if (delta < 0.001) {\r\n node.tendencyHistory.push('rest');\r\n } else if (newResult > prevResult) {\r\n node.tendencyHistory.push('expand');\r\n } else {\r\n node.tendencyHistory.push('contract');\r\n }\r\n}\r\n\r\n/** ノードの現在の値を計算(MDim互換) */\r\nexport function computeNodeValue(node: DNode): number {\r\n const { center, neighbors, mode } = node;\r\n const weights = node.weights ?? neighbors.map(() => 1);\r\n const n = neighbors.length;\r\n if (n === 0) return center;\r\n\r\n switch (mode) {\r\n case 'weighted': {\r\n const wSum = weights.reduce((a, b) => a + b, 0);\r\n const wAvg = neighbors.reduce((sum, v, i) => sum + (weights[i] ?? 1) * v, 0) / (wSum || 1);\r\n return center + wAvg;\r\n }\r\n case 'multiplicative': {\r\n const prod = neighbors.reduce((p, v) => p * (1 + v), 1);\r\n return center * prod;\r\n }\r\n case 'harmonic': {\r\n const harmSum = neighbors.reduce((s, v) => s + 1 / (Math.abs(v) || 1), 0);\r\n return center + n / harmSum;\r\n }\r\n case 'exponential': {\r\n const expSum = neighbors.reduce((s, v) => s + Math.exp(v), 0);\r\n return center * (expSum / n);\r\n }\r\n default:\r\n return center;\r\n }\r\n}\r\n\r\n/** 収束判定 */\r\nexport type ConvergenceCriteria =\r\n | { type: 'steps'; max: number }\r\n | { type: 'epsilon'; threshold: number }\r\n | { type: 'fixed' }\r\n | { type: 'converged' };\r\n\r\nfunction isNodeConverged(node: DNode, criteria: ConvergenceCriteria): boolean {\r\n const history = node.diffusionHistory;\r\n if (history.length < 2) return false;\r\n\r\n switch (criteria.type) {\r\n case 'steps':\r\n return node.stage >= criteria.max;\r\n case 'epsilon': {\r\n const last = history[history.length - 1].result;\r\n const prev = history[history.length - 2].result;\r\n return Math.abs(last - prev) < criteria.threshold;\r\n }\r\n case 'fixed': {\r\n const last = history[history.length - 1].result;\r\n const prev = history[history.length - 2].result;\r\n return last === prev;\r\n }\r\n case 'converged': {\r\n // デフォルト: epsilon 0.0001\r\n const last = history[history.length - 1].result;\r\n const prev = history[history.length - 2].result;\r\n return Math.abs(last - prev) < 0.0001;\r\n }\r\n }\r\n}\r\n\r\n/** 収縮: 拡散した結果を最終値にまとめる */\r\nexport type ContractionMethod = 'mean' | 'median' | 'weighted' | 'consensus';\r\n\r\nfunction contractNode(node: DNode, method: ContractionMethod = 'weighted'): number {\r\n node.momentum = 'contracting';\r\n const finalValue = computeNodeValue(node);\r\n node.momentum = 'converged';\r\n return finalValue;\r\n}\r\n\r\n/** 場全体を1段階拡散 */\r\nexport function stepSpace(\r\n space: ReiSpace,\r\n targetLayer?: number,\r\n diffuseFn?: (neighbors: number[]) => number[]\r\n): void {\r\n for (const [layerIdx, layer] of space.layers) {\r\n if (targetLayer !== undefined && layerIdx !== targetLayer) continue;\r\n if (layer.frozen) continue;\r\n for (const node of layer.nodes) {\r\n stepNode(node, diffuseFn);\r\n }\r\n }\r\n space.globalStage++;\r\n}\r\n\r\n/** 場全体を収束まで拡散 */\r\nexport function diffuseSpace(\r\n space: ReiSpace,\r\n criteria: ConvergenceCriteria = { type: 'converged' },\r\n targetLayer?: number,\r\n contractionMethod: ContractionMethod = 'weighted',\r\n diffuseFn?: (neighbors: number[]) => number[],\r\n maxSafetySteps: number = 100\r\n): number[] {\r\n let steps = 0;\r\n\r\n while (steps < maxSafetySteps) {\r\n let allConverged = true;\r\n\r\n for (const [layerIdx, layer] of space.layers) {\r\n if (targetLayer !== undefined && layerIdx !== targetLayer) continue;\r\n if (layer.frozen) continue;\r\n\r\n for (const node of layer.nodes) {\r\n if (node.momentum === 'converged') continue;\r\n\r\n if (isNodeConverged(node, criteria)) {\r\n contractNode(node, contractionMethod);\r\n } else {\r\n stepNode(node, diffuseFn);\r\n allConverged = false;\r\n }\r\n }\r\n }\r\n\r\n space.globalStage++;\r\n steps++;\r\n\r\n if (allConverged) break;\r\n }\r\n\r\n // 全ノードの最終値を収集\r\n const results: number[] = [];\r\n for (const [layerIdx, layer] of space.layers) {\r\n if (targetLayer !== undefined && layerIdx !== targetLayer) continue;\r\n for (const node of layer.nodes) {\r\n if (node.momentum !== 'converged') {\r\n contractNode(node, contractionMethod);\r\n }\r\n results.push(computeNodeValue(node));\r\n }\r\n }\r\n return results;\r\n}\r\n\r\n// --- Sigma (自己参照) ---\r\n\r\nexport function getSigmaFlow(node: DNode): SigmaFlow {\r\n return {\r\n stage: node.stage,\r\n directions: node.neighbors.length,\r\n momentum: node.momentum,\r\n velocity: node.diffusionHistory.length >= 2\r\n ? Math.abs(\r\n node.diffusionHistory[node.diffusionHistory.length - 1].result -\r\n node.diffusionHistory[node.diffusionHistory.length - 2].result\r\n )\r\n : 0,\r\n };\r\n}\r\n\r\nexport function getSigmaMemory(node: DNode): SigmaMemory {\r\n return [...node.diffusionHistory];\r\n}\r\n\r\nexport function getSigmaField(node: DNode, space: ReiSpace): SigmaField {\r\n const layer = space.layers.get(node.layerIndex);\r\n return {\r\n center: node.center,\r\n neighbors: [...node.neighbors],\r\n layer: node.layerIndex,\r\n index: node.nodeIndex,\r\n co_nodes: layer ? layer.nodes.length - 1 : 0,\r\n };\r\n}\r\n\r\nexport function getSigmaWill(node: DNode): SigmaWill {\r\n const history = node.tendencyHistory;\r\n // 最近の傾向から全体的な意志を判定\r\n const recent = history.slice(-5);\r\n const counts: Record<string, number> = {};\r\n for (const t of recent) {\r\n counts[t] = (counts[t] ?? 0) + 1;\r\n }\r\n\r\n let tendency: 'contract' | 'expand' | 'spiral' | 'rest' = 'rest';\r\n let maxCount = 0;\r\n\r\n // 頻度で判定\r\n for (const [t, c] of Object.entries(counts)) {\r\n if (c > maxCount) {\r\n maxCount = c;\r\n tendency = t as any;\r\n }\r\n }\r\n\r\n // 交互に変わっていたら spiral\r\n if (history.length >= 4) {\r\n let alternating = 0;\r\n for (let i = 1; i < recent.length; i++) {\r\n if (recent[i] !== recent[i - 1]) alternating++;\r\n }\r\n if (alternating >= recent.length - 1) tendency = 'spiral';\r\n }\r\n\r\n return {\r\n tendency,\r\n strength: maxCount / Math.max(recent.length, 1),\r\n history: [...history],\r\n };\r\n}\r\n\r\n// --- Resonance (共鳴 — 公理C5) ---\r\n\r\nexport interface ResonancePair {\r\n nodeA: { layer: number; index: number };\r\n nodeB: { layer: number; index: number };\r\n similarity: number;\r\n}\r\n\r\n/** 2つのノード間の類似度を計算 */\r\nfunction nodeSimilarity(a: DNode, b: DNode): number {\r\n // 中心値の近さ\r\n const centerDiff = Math.abs(a.center - b.center);\r\n const centerSim = 1 / (1 + centerDiff);\r\n\r\n // neighbors数の近さ\r\n const dirDiff = Math.abs(a.neighbors.length - b.neighbors.length);\r\n const dirSim = 1 / (1 + dirDiff);\r\n\r\n // 計算結果の近さ\r\n const valA = computeNodeValue(a);\r\n const valB = computeNodeValue(b);\r\n const valDiff = Math.abs(valA - valB);\r\n const valSim = 1 / (1 + valDiff);\r\n\r\n return (centerSim + dirSim + valSim) / 3;\r\n}\r\n\r\n/** 場の中の全共鳴ペアを検出 */\r\nexport function findResonances(space: ReiSpace, threshold: number = 0.5): ResonancePair[] {\r\n const allNodes: { node: DNode; layer: number; index: number }[] = [];\r\n for (const [layerIdx, layer] of space.layers) {\r\n for (let i = 0; i < layer.nodes.length; i++) {\r\n allNodes.push({ node: layer.nodes[i], layer: layerIdx, index: i });\r\n }\r\n }\r\n\r\n const pairs: ResonancePair[] = [];\r\n for (let i = 0; i < allNodes.length; i++) {\r\n for (let j = i + 1; j < allNodes.length; j++) {\r\n // 同じ層の同じノードはスキップ\r\n if (allNodes[i].layer === allNodes[j].layer && allNodes[i].index === allNodes[j].index) continue;\r\n\r\n const sim = nodeSimilarity(allNodes[i].node, allNodes[j].node);\r\n if (sim >= threshold) {\r\n pairs.push({\r\n nodeA: { layer: allNodes[i].layer, index: allNodes[i].index },\r\n nodeB: { layer: allNodes[j].layer, index: allNodes[j].index },\r\n similarity: Math.round(sim * 1000) / 1000,\r\n });\r\n }\r\n }\r\n }\r\n return pairs;\r\n}\r\n\r\n/** 空のσ(場全体の自己参照) */\r\nexport function getSpaceSigma(space: ReiSpace) {\r\n let totalNodes = 0;\r\n let convergedNodes = 0;\r\n let expandingNodes = 0;\r\n const layerIndices: number[] = [];\r\n\r\n for (const [layerIdx, layer] of space.layers) {\r\n layerIndices.push(layerIdx);\r\n totalNodes += layer.nodes.length;\r\n for (const node of layer.nodes) {\r\n if (node.momentum === 'converged') convergedNodes++;\r\n else if (node.momentum === 'expanding') expandingNodes++;\r\n }\r\n }\r\n\r\n return {\r\n field: {\r\n layers: space.layers.size,\r\n total_nodes: totalNodes,\r\n active_nodes: totalNodes - convergedNodes,\r\n topology: space.topology,\r\n },\r\n flow: {\r\n global_stage: space.globalStage,\r\n converged_nodes: convergedNodes,\r\n expanding_nodes: expandingNodes,\r\n },\r\n layer: layerIndices.sort((a, b) => a - b),\r\n };\r\n}\r\n","// ============================================================\r\n// Rei v0.3 — Thought Loop Engine (思考ループエンジン)\r\n// 柱④: 値が自分自身を繰り返し変換し、σを見て、\r\n// 続けるか止めるかを自分で判断する自律的思考\r\n//\r\n// Core Insight:\r\n// evolve は「1回の最適選択」。Thought Loop は「繰り返しの自己進化」。\r\n// 値が自分の来歴を見て変換を選び、結果を評価し、\r\n// 収束・探索・目標到達を自分で判断する。\r\n//\r\n// D-FUMT 6属性の対応:\r\n// 場 = 思考対象の値(反復を通じて変化する)\r\n// 流れ = 進化の方向(収束・発散・循環)\r\n// 記憶 = 各思考ステップの完全な履歴\r\n// 層 = 自己参照の深度(思考の入れ子)\r\n// 関係 = ステップ間の関連(前ステップとの差分)\r\n// 意志 = ループ自身の傾向性(続けたいか止めたいか)\r\n//\r\n// Author: Nobuki Fujimoto / Claude (collaborative design)\r\n// ============================================================\r\n\r\n// --- Core Types ---\r\n\r\n/** 思考ステップ — 1回の反復の記録 */\r\nexport interface ThoughtStep {\r\n iteration: number;\r\n value: any; // このステップでの値\r\n numericValue: number; // 数値化した値\r\n selectedMode: string; // evolveが選んだモード\r\n delta: number; // 前ステップとの差分\r\n awareness: number; // 覚醒度 (C4)\r\n tendency: string; // 傾向性 (C2: τ)\r\n decision: string; // 'continue' | 'converged' | 'limit' | 'target_reached' | 'awakened' | 'cycle_detected'\r\n reason: string; // 判断理由\r\n}\r\n\r\n/** 思考ループの結果 */\r\nexport interface ThoughtResult {\r\n reiType: 'ThoughtResult';\r\n // 最終結果\r\n finalValue: any;\r\n finalNumeric: number;\r\n totalIterations: number;\r\n // 全履歴(記憶属性)\r\n steps: ThoughtStep[];\r\n // 停止情報\r\n stopReason: string;\r\n stopStrategy: string;\r\n // 流れ属性\r\n trajectory: 'converging' | 'diverging' | 'oscillating' | 'chaotic' | 'stable';\r\n convergenceRate: number;\r\n // 意志属性\r\n loopTendency: string; // ループ全体の傾向性\r\n loopStrength: number; // 傾向の強さ\r\n // 覚醒属性\r\n peakAwareness: number;\r\n finalAwareness: number;\r\n awakenedAt: number | null; // 覚醒した反復番号(null=未覚醒)\r\n // 関係属性\r\n modeHistory: string[]; // 各ステップで選ばれたモード\r\n modeTransitions: number; // モードが変わった回数\r\n}\r\n\r\n/** 思考ループの設定 */\r\nexport interface ThoughtConfig {\r\n strategy: string; // 'converge' | 'explore' | 'seek' | 'awaken' | 'auto'\r\n maxIterations: number;\r\n epsilon: number; // 収束閾値\r\n targetValue?: number; // seek戦略の目標値\r\n targetEpsilon?: number; // seek戦略の目標許容誤差\r\n awakenThreshold: number; // awaken戦略の覚醒閾値\r\n allowCycleDetection: boolean;\r\n cycleWindowSize: number; // 循環検出の窓サイズ\r\n}\r\n\r\n// --- Default Config ---\r\n\r\nconst DEFAULT_CONFIG: ThoughtConfig = {\r\n strategy: 'converge',\r\n maxIterations: 50,\r\n epsilon: 0.0001,\r\n awakenThreshold: 0.6,\r\n allowCycleDetection: true,\r\n cycleWindowSize: 5,\r\n};\r\n\r\n// --- Helpers (evaluatorから独立して使えるように最小限の計算関数) ---\r\n\r\nconst THINK_COMPUTE_MODES = [\r\n \"weighted\", \"multiplicative\", \"harmonic\", \"exponential\",\r\n \"geometric\", \"median\", \"minkowski\", \"entropy\",\r\n] as const;\r\n\r\nfunction thinkComputeMDim(md: any, mode: string): number {\r\n const { center, neighbors } = md;\r\n const weights = md.weights ?? neighbors.map(() => 1);\r\n const n = neighbors.length;\r\n if (n === 0) return center;\r\n\r\n switch (mode) {\r\n case \"weighted\": {\r\n const wSum = weights.reduce((a: number, b: number) => a + b, 0);\r\n const wAvg = neighbors.reduce((sum: number, v: number, i: number) => sum + (weights[i] ?? 1) * v, 0) / (wSum || 1);\r\n return center + wAvg;\r\n }\r\n case \"multiplicative\": {\r\n const prod = neighbors.reduce((p: number, v: number) => p * (1 + v), 1);\r\n return center * prod;\r\n }\r\n case \"harmonic\": {\r\n const harmSum = neighbors.reduce((s: number, v: number) => s + 1 / (Math.abs(v) || 1), 0);\r\n return center + n / harmSum;\r\n }\r\n case \"exponential\": {\r\n const expSum = neighbors.reduce((s: number, v: number) => s + Math.exp(v), 0);\r\n return center * (expSum / n);\r\n }\r\n case \"geometric\": {\r\n const prod = neighbors.reduce((p: number, v: number) => p * Math.abs(v || 1), 1);\r\n return center * Math.pow(prod, 1 / n);\r\n }\r\n case \"median\": {\r\n const sorted = [...neighbors].sort((a: number, b: number) => a - b);\r\n const mid = Math.floor(n / 2);\r\n const med = n % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];\r\n return center + med;\r\n }\r\n case \"minkowski\": {\r\n const p = 2;\r\n const sumP = neighbors.reduce((s: number, v: number) => s + Math.pow(Math.abs(v), p), 0);\r\n return center + Math.pow(sumP / n, 1 / p);\r\n }\r\n case \"entropy\": {\r\n const total = neighbors.reduce((s: number, v: number) => s + Math.abs(v), 0) || 1;\r\n const probs = neighbors.map((v: number) => Math.abs(v) / total);\r\n const H = -probs.reduce((s: number, p: number) => s + (p > 0 ? p * Math.log2(p) : 0), 0);\r\n return center * (1 + H);\r\n }\r\n default: return center;\r\n }\r\n}\r\n\r\n/** 値を数値に変換 */\r\nfunction toNum(v: any): number {\r\n if (typeof v === 'number') return v;\r\n if (v === null || v === undefined) return 0;\r\n if (typeof v === 'boolean') return v ? 1 : 0;\r\n if (v?.reiType === 'ReiVal') return toNum(v.value);\r\n if (v?.reiType === 'MDim') return thinkComputeMDim(v, v.mode || 'weighted');\r\n if (v?.reiType === 'Ext') return v.valStar?.() ?? 0;\r\n return 0;\r\n}\r\n\r\n/** 値を𝕄に正規化 */\r\nfunction ensureMDim(v: any): any {\r\n if (v?.reiType === 'ReiVal') return ensureMDim(v.value);\r\n if (v?.reiType === 'MDim') return v;\r\n if (typeof v === 'number') return { reiType: 'MDim', center: v, neighbors: [], mode: 'weighted' };\r\n if (Array.isArray(v)) {\r\n if (v.length === 0) return { reiType: 'MDim', center: 0, neighbors: [], mode: 'weighted' };\r\n return { reiType: 'MDim', center: v[0], neighbors: v.slice(1), mode: 'weighted' };\r\n }\r\n return { reiType: 'MDim', center: 0, neighbors: [], mode: 'weighted' };\r\n}\r\n\r\n/** 簡易覚醒度計算 */\r\nfunction thinkAwareness(iterationCount: number, modeTransitions: number, trajectory: string): number {\r\n let score = 0;\r\n // 反復回数の深さ\r\n score += Math.min(iterationCount / 10, 1);\r\n // モード変化の多様性\r\n score += Math.min(modeTransitions / 5, 1);\r\n // 軌跡の複雑さ\r\n if (trajectory === 'oscillating') score += 0.8;\r\n else if (trajectory === 'chaotic') score += 1.0;\r\n else if (trajectory === 'converging') score += 0.5;\r\n else if (trajectory === 'diverging') score += 0.3;\r\n // 正規化\r\n return Math.min(score / 3, 1);\r\n}\r\n\r\n// --- Evolve per step (思考ステップごとの自動モード選択) ---\r\n\r\n/**\r\n * 1ステップ分のevolve: 来歴を見てモードを選び、値を変換\r\n * evolve(柱①)のロジックを再利用しつつ、思考ループの文脈で動作\r\n */\r\nfunction thinkEvolveStep(\r\n md: any,\r\n history: ThoughtStep[],\r\n strategy: string\r\n): { value: any; numericValue: number; selectedMode: string } {\r\n const candidates = THINK_COMPUTE_MODES.map(mode => ({\r\n mode,\r\n value: thinkComputeMDim(md, mode),\r\n }));\r\n\r\n // 過去の数値列\r\n const pastValues = history.map(s => s.numericValue);\r\n\r\n let selected: { mode: string; value: number };\r\n\r\n switch (strategy) {\r\n case 'converge':\r\n case 'stable': {\r\n // 最も安定(過去の値との差分が最小)のモードを選択\r\n if (pastValues.length === 0) {\r\n selected = candidates[0]; // 初回は weighted\r\n } else {\r\n const lastVal = pastValues[pastValues.length - 1];\r\n selected = candidates.reduce((best, c) =>\r\n Math.abs(c.value - lastVal) < Math.abs(best.value - lastVal) ? c : best\r\n );\r\n }\r\n break;\r\n }\r\n case 'explore':\r\n case 'divergent': {\r\n // 最も新しい結果を出すモード(過去と最も異なる)\r\n if (pastValues.length === 0) {\r\n selected = candidates.reduce((best, c) =>\r\n Math.abs(c.value) > Math.abs(best.value) ? c : best\r\n );\r\n } else {\r\n const mean = pastValues.reduce((a, b) => a + b, 0) / pastValues.length;\r\n selected = candidates.reduce((best, c) =>\r\n Math.abs(c.value - mean) > Math.abs(best.value - mean) ? c : best\r\n );\r\n }\r\n break;\r\n }\r\n case 'seek': {\r\n // 目標値に最も近いモードを選択(外部からtargetValueが渡される想定)\r\n // ここではデフォルトで最も中央値に近いモードを選ぶ\r\n const median = [...candidates].sort((a, b) => a.value - b.value)[Math.floor(candidates.length / 2)];\r\n selected = median;\r\n break;\r\n }\r\n case 'creative': {\r\n // 他のモードと最も異なる結果のモード\r\n const mean = candidates.reduce((s, c) => s + c.value, 0) / candidates.length;\r\n selected = candidates.reduce((best, c) =>\r\n Math.abs(c.value - mean) > Math.abs(best.value - mean) ? c : best\r\n );\r\n break;\r\n }\r\n default: {\r\n // auto: 傾向性に基づく選択\r\n if (pastValues.length >= 3) {\r\n const recent = pastValues.slice(-3);\r\n const isExpanding = recent.every((v, i) => i === 0 || v > recent[i - 1]);\r\n const isContracting = recent.every((v, i) => i === 0 || v < recent[i - 1]);\r\n\r\n if (isExpanding) {\r\n // 拡大傾向 → 安定化を選択(contract意志)\r\n const lastVal = pastValues[pastValues.length - 1];\r\n selected = candidates.reduce((best, c) =>\r\n Math.abs(c.value - lastVal) < Math.abs(best.value - lastVal) ? c : best\r\n );\r\n } else if (isContracting) {\r\n // 収縮傾向 → やや広がりのあるモードを選択\r\n selected = candidates.reduce((best, c) =>\r\n c.value > best.value ? c : best\r\n );\r\n } else {\r\n // 振動/その他 → weighted(安定)\r\n selected = candidates[0];\r\n }\r\n } else {\r\n selected = candidates[0]; // 初回はweighted\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // 値を更新: 選ばれたモードで𝕄を変換\r\n const newMd = { ...md, mode: selected.mode };\r\n\r\n return {\r\n value: newMd,\r\n numericValue: selected.value,\r\n selectedMode: selected.mode,\r\n };\r\n}\r\n\r\n// --- Trajectory Analysis (軌跡分析 — 流れ属性) ---\r\n\r\nfunction analyzeTrajectory(steps: ThoughtStep[]): 'converging' | 'diverging' | 'oscillating' | 'chaotic' | 'stable' {\r\n if (steps.length < 3) return 'stable';\r\n\r\n const deltas = steps.slice(1).map(s => s.delta);\r\n const absDeltas = deltas.map(Math.abs);\r\n\r\n // 安定: 全てのdeltaが十分小さい\r\n if (absDeltas.every(d => d < 0.001)) return 'stable';\r\n\r\n // 収束: deltaが単調減少\r\n let decreasing = 0;\r\n for (let i = 1; i < absDeltas.length; i++) {\r\n if (absDeltas[i] < absDeltas[i - 1]) decreasing++;\r\n }\r\n if (decreasing >= absDeltas.length * 0.7) return 'converging';\r\n\r\n // 発散: deltaが単調増加\r\n let increasing = 0;\r\n for (let i = 1; i < absDeltas.length; i++) {\r\n if (absDeltas[i] > absDeltas[i - 1]) increasing++;\r\n }\r\n if (increasing >= absDeltas.length * 0.7) return 'diverging';\r\n\r\n // 振動: 符号が交互に変わる\r\n let signChanges = 0;\r\n for (let i = 1; i < deltas.length; i++) {\r\n if (Math.sign(deltas[i]) !== Math.sign(deltas[i - 1])) signChanges++;\r\n }\r\n if (signChanges >= deltas.length * 0.6) return 'oscillating';\r\n\r\n return 'chaotic';\r\n}\r\n\r\n// --- Cycle Detection (循環検出) ---\r\n\r\nfunction detectCycle(values: number[], windowSize: number): boolean {\r\n if (values.length < windowSize * 2) return false;\r\n\r\n const recent = values.slice(-windowSize);\r\n const earlier = values.slice(-windowSize * 2, -windowSize);\r\n\r\n // 完全一致の循環\r\n if (recent.every((v, i) => Math.abs(v - earlier[i]) < 0.0001)) return true;\r\n\r\n // 値のセットが同じ(順序不問の循環)\r\n const recentSorted = [...recent].sort();\r\n const earlierSorted = [...earlier].sort();\r\n if (recentSorted.every((v, i) => Math.abs(v - earlierSorted[i]) < 0.0001)) return true;\r\n\r\n return false;\r\n}\r\n\r\n// --- Loop Tendency (ループの意志属性) ---\r\n\r\nfunction computeLoopTendency(steps: ThoughtStep[]): { tendency: string; strength: number } {\r\n if (steps.length < 2) return { tendency: 'rest', strength: 0 };\r\n\r\n const recentDecisions = steps.slice(-5).map(s => s.decision);\r\n const recentDeltas = steps.slice(-5).map(s => s.delta);\r\n\r\n // 収束決定が多い → ループは止まりたい\r\n const convergeCount = recentDecisions.filter(d => d === 'converged').length;\r\n if (convergeCount > 0) return { tendency: 'rest', strength: convergeCount / recentDecisions.length };\r\n\r\n // deltaが減少 → contract(収束に向かっている)\r\n const absDeltas = recentDeltas.map(Math.abs);\r\n let shrinking = 0;\r\n for (let i = 1; i < absDeltas.length; i++) {\r\n if (absDeltas[i] < absDeltas[i - 1]) shrinking++;\r\n }\r\n if (shrinking > absDeltas.length / 2) {\r\n return { tendency: 'contract', strength: shrinking / absDeltas.length };\r\n }\r\n\r\n // deltaが増加 → expand(発散に向かっている)\r\n let growing = 0;\r\n for (let i = 1; i < absDeltas.length; i++) {\r\n if (absDeltas[i] > absDeltas[i - 1]) growing++;\r\n }\r\n if (growing > absDeltas.length / 2) {\r\n return { tendency: 'expand', strength: growing / absDeltas.length };\r\n }\r\n\r\n // モードが頻繁に変わる → spiral\r\n const modes = steps.slice(-5).map(s => s.selectedMode);\r\n const modeChanges = modes.filter((m, i) => i > 0 && m !== modes[i - 1]).length;\r\n if (modeChanges >= modes.length * 0.6) {\r\n return { tendency: 'spiral', strength: modeChanges / modes.length };\r\n }\r\n\r\n return { tendency: 'rest', strength: 0.5 };\r\n}\r\n\r\n// --- Main Think Loop ---\r\n\r\n/**\r\n * 思考ループの実行 — 柱④の核心\r\n *\r\n * @param input 思考対象の値(𝕄, 数値, 配列)\r\n * @param configArg 設定(部分指定可)\r\n * @returns ThoughtResult\r\n */\r\nexport function thinkLoop(input: any, configArg: Partial<ThoughtConfig> = {}): ThoughtResult {\r\n const config: ThoughtConfig = { ...DEFAULT_CONFIG, ...configArg };\r\n const md = ensureMDim(input);\r\n\r\n const steps: ThoughtStep[] = [];\r\n const numericHistory: number[] = [];\r\n let currentMd = { ...md };\r\n let currentNumeric = toNum(md);\r\n let modeTransitions = 0;\r\n let lastMode = '';\r\n let awakenedAt: number | null = null;\r\n let peakAwareness = 0;\r\n let stopReason = 'limit';\r\n\r\n // 初期値を記録\r\n numericHistory.push(currentNumeric);\r\n\r\n for (let i = 0; i < config.maxIterations; i++) {\r\n // 1. evolveで最適モードを選択し、値を変換\r\n const evolveStrategy =\r\n config.strategy === 'converge' ? 'stable' :\r\n config.strategy === 'seek' ? 'seek' :\r\n config.strategy === 'explore' ? 'divergent' :\r\n config.strategy === 'awaken' ? 'creative' :\r\n 'auto';\r\n\r\n const evolved = thinkEvolveStep(currentMd, steps, evolveStrategy);\r\n\r\n // 2. 差分計算\r\n const delta = evolved.numericValue - currentNumeric;\r\n\r\n // 3. モード遷移カウント\r\n if (lastMode && evolved.selectedMode !== lastMode) modeTransitions++;\r\n lastMode = evolved.selectedMode;\r\n\r\n // 4. 覚醒度計算\r\n const trajectory = analyzeTrajectory(steps);\r\n const awareness = thinkAwareness(i + 1, modeTransitions, trajectory);\r\n if (awareness > peakAwareness) peakAwareness = awareness;\r\n\r\n // 5. 傾向性判定\r\n const tendencyResult = computeLoopTendency(steps);\r\n\r\n // 6. 停止判定\r\n let decision: string = 'continue';\r\n let reason: string = '';\r\n\r\n // 収束判定\r\n if (config.strategy === 'converge' || config.strategy === 'auto') {\r\n if (Math.abs(delta) < config.epsilon && i > 0) {\r\n decision = 'converged';\r\n reason = `|Δ| = ${Math.abs(delta).toFixed(6)} < ε = ${config.epsilon}`;\r\n }\r\n }\r\n\r\n // 目標到達判定\r\n if (config.strategy === 'seek' && config.targetValue !== undefined) {\r\n const targetDist = Math.abs(evolved.numericValue - config.targetValue);\r\n const targetEps = config.targetEpsilon ?? config.epsilon;\r\n if (targetDist < targetEps) {\r\n decision = 'target_reached';\r\n reason = `|value - target| = ${targetDist.toFixed(6)} < ε = ${targetEps}`;\r\n }\r\n }\r\n\r\n // 覚醒判定\r\n if (config.strategy === 'awaken') {\r\n if (awareness >= config.awakenThreshold && awakenedAt === null) {\r\n awakenedAt = i;\r\n decision = 'awakened';\r\n reason = `awareness = ${awareness.toFixed(3)} >= threshold = ${config.awakenThreshold}`;\r\n }\r\n }\r\n\r\n // 循環検出\r\n if (config.allowCycleDetection && i >= config.cycleWindowSize * 2) {\r\n if (detectCycle(numericHistory, config.cycleWindowSize)) {\r\n decision = 'cycle_detected';\r\n reason = `循環パターン検出(窓サイズ${config.cycleWindowSize})`;\r\n }\r\n }\r\n\r\n // ステップ記録\r\n const step: ThoughtStep = {\r\n iteration: i,\r\n value: evolved.value,\r\n numericValue: evolved.numericValue,\r\n selectedMode: evolved.selectedMode,\r\n delta,\r\n awareness,\r\n tendency: tendencyResult.tendency,\r\n decision,\r\n reason,\r\n };\r\n steps.push(step);\r\n numericHistory.push(evolved.numericValue);\r\n\r\n // 値を更新\r\n currentMd = ensureMDim(evolved.value);\r\n currentNumeric = evolved.numericValue;\r\n\r\n // 停止\r\n if (decision !== 'continue') {\r\n stopReason = decision;\r\n break;\r\n }\r\n }\r\n\r\n // 最終反復で停止しなかった場合\r\n if (steps.length === config.maxIterations && steps[steps.length - 1].decision === 'continue') {\r\n steps[steps.length - 1].decision = 'limit';\r\n steps[steps.length - 1].reason = `最大反復回数 ${config.maxIterations} に到達`;\r\n stopReason = 'limit';\r\n }\r\n\r\n // 結果の構築\r\n const trajectory = analyzeTrajectory(steps);\r\n const modeHistory = steps.map(s => s.selectedMode);\r\n const loopTendency = computeLoopTendency(steps);\r\n\r\n // 収束率: 最初と最後のdelta比\r\n let convergenceRate = 0;\r\n if (steps.length >= 2) {\r\n const firstAbsDelta = Math.abs(steps[0].delta) || 1;\r\n const lastAbsDelta = Math.abs(steps[steps.length - 1].delta);\r\n convergenceRate = 1 - (lastAbsDelta / firstAbsDelta);\r\n }\r\n\r\n return {\r\n reiType: 'ThoughtResult',\r\n finalValue: currentMd,\r\n finalNumeric: currentNumeric,\r\n totalIterations: steps.length,\r\n steps,\r\n stopReason,\r\n stopStrategy: config.strategy,\r\n trajectory,\r\n convergenceRate: Math.max(0, Math.min(1, convergenceRate)),\r\n loopTendency: loopTendency.tendency,\r\n loopStrength: loopTendency.strength,\r\n peakAwareness,\r\n finalAwareness: steps.length > 0 ? steps[steps.length - 1].awareness : 0,\r\n awakenedAt,\r\n modeHistory,\r\n modeTransitions,\r\n };\r\n}\r\n\r\n// --- σ for ThoughtResult ---\r\n\r\nexport function getThoughtSigma(result: ThoughtResult): any {\r\n return {\r\n reiType: 'SigmaResult',\r\n field: {\r\n type: 'thought_loop',\r\n finalValue: result.finalNumeric,\r\n totalIterations: result.totalIterations,\r\n trajectory: result.trajectory,\r\n },\r\n flow: {\r\n direction: result.trajectory,\r\n momentum: result.totalIterations,\r\n velocity: result.steps.length > 0\r\n ? Math.abs(result.steps[result.steps.length - 1].delta)\r\n : 0,\r\n convergenceRate: result.convergenceRate,\r\n },\r\n memory: result.steps.map(s => ({\r\n iteration: s.iteration,\r\n value: s.numericValue,\r\n mode: s.selectedMode,\r\n delta: s.delta,\r\n decision: s.decision,\r\n })),\r\n layer: result.awakenedAt !== null ? 1 : 0,\r\n will: {\r\n tendency: result.loopTendency,\r\n strength: result.loopStrength,\r\n history: result.modeHistory,\r\n },\r\n relation: result.steps.length > 1\r\n ? result.steps.slice(1).map((s, i) => ({\r\n from: result.steps[i].iteration,\r\n to: s.iteration,\r\n delta: s.delta,\r\n modeChange: s.selectedMode !== result.steps[i].selectedMode,\r\n }))\r\n : [],\r\n };\r\n}\r\n\r\n// --- Convenience Functions ---\r\n\r\n/** 思考ループの要約を文字列で返す */\r\nexport function formatThought(result: ThoughtResult): string {\r\n const lines: string[] = [];\r\n lines.push(`═══ 思考ループ結果 ═══`);\r\n lines.push(`戦略: ${result.stopStrategy}`);\r\n lines.push(`反復: ${result.totalIterations}回`);\r\n lines.push(`停止理由: ${result.stopReason}`);\r\n lines.push(`最終値: ${result.finalNumeric.toFixed(6)}`);\r\n lines.push(`軌跡: ${result.trajectory}`);\r\n lines.push(`収束率: ${(result.convergenceRate * 100).toFixed(1)}%`);\r\n lines.push(`最高覚醒度: ${(result.peakAwareness * 100).toFixed(1)}%`);\r\n lines.push(`モード遷移: ${result.modeTransitions}回`);\r\n lines.push(`ループの意志: ${result.loopTendency} (強度: ${result.loopStrength.toFixed(2)})`);\r\n\r\n if (result.awakenedAt !== null) {\r\n lines.push(`覚醒: 反復 #${result.awakenedAt} で覚醒`);\r\n }\r\n\r\n lines.push(`─── 軌跡 ───`);\r\n for (const step of result.steps.slice(0, 10)) {\r\n const marker = step.decision !== 'continue' ? ` ← ${step.decision}` : '';\r\n lines.push(\r\n ` #${step.iteration}: ${step.numericValue.toFixed(4)} [${step.selectedMode}] Δ=${step.delta >= 0 ? '+' : ''}${step.delta.toFixed(4)}${marker}`\r\n );\r\n }\r\n if (result.steps.length > 10) {\r\n lines.push(` ... (${result.steps.length - 10}ステップ省略)`);\r\n const last = result.steps[result.steps.length - 1];\r\n lines.push(\r\n ` #${last.iteration}: ${last.numericValue.toFixed(4)} [${last.selectedMode}] Δ=${last.delta >= 0 ? '+' : ''}${last.delta.toFixed(4)} ← ${last.decision}`\r\n );\r\n }\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/** 思考の軌跡を数値配列で返す */\r\nexport function thoughtTrajectory(result: ThoughtResult): number[] {\r\n return result.steps.map(s => s.numericValue);\r\n}\r\n\r\n/** 思考の各ステップのモードを配列で返す */\r\nexport function thoughtModes(result: ThoughtResult): string[] {\r\n return result.modeHistory;\r\n}\r\n\r\n/** 思考の最も支配的なモードを返す */\r\nexport function dominantMode(result: ThoughtResult): { mode: string; count: number; ratio: number } {\r\n const counts: Record<string, number> = {};\r\n for (const m of result.modeHistory) {\r\n counts[m] = (counts[m] ?? 0) + 1;\r\n }\r\n let maxMode = '';\r\n let maxCount = 0;\r\n for (const [m, c] of Object.entries(counts)) {\r\n if (c > maxCount) { maxMode = m; maxCount = c; }\r\n }\r\n return {\r\n mode: maxMode,\r\n count: maxCount,\r\n ratio: result.modeHistory.length > 0 ? maxCount / result.modeHistory.length : 0,\r\n };\r\n}\r\n","// ============================================================\r\n// Rei v0.3 — Game & Randomness Engine (ゲーム統一 & ピュアランダムネス)\r\n// 柱⑤: 全ゲームを「状態 + ルール + 戦略」の𝕄で統一記述\r\n// ピュアランダムネスを場の属性として導入\r\n//\r\n// Core Insight:\r\n// パズル(柱③) = 受動的 — 制約を解く(solve)\r\n// ゲーム(柱⑤) = 能動的 — 最善手を選ぶ(play)\r\n// ランダム = 両方に確率を加える\r\n//\r\n// 全ゲームは 𝕄{状態; 可能手₁, 可能手₂, ...} で表現できる\r\n// center = 現在の盤面状態\r\n// neighbors = 合法手の集合\r\n// mode = 戦略(minimax / random / greedy)\r\n//\r\n// D-FUMT 6属性:\r\n// 場(Field) = ゲーム盤面・状態空間\r\n// 流れ(Flow) = ターン進行・手番の方向\r\n// 記憶(Memory) = 完全な棋譜(全手の履歴)\r\n// 層(Layer) = 探索深度(Minimax探索の深さ)\r\n// 関係(Relation) = プレイヤー間の対立・協調構造\r\n// 意志(Will) = 戦略の傾向性(攻撃/防御/ランダム/最適)\r\n//\r\n// Author: Nobuki Fujimoto / Claude (collaborative design)\r\n// ============================================================\r\n\r\n// ═══════════════════════════════════════════\r\n// Part 1: Pure Randomness (ピュアランダムネス)\r\n// ═══════════════════════════════════════════\r\n\r\n/** ランダム結果型 */\r\nexport interface RandomResult {\r\n reiType: 'RandomResult';\r\n value: any; // 選ばれた値\r\n probability: number; // その確率\r\n entropy: number; // シャノンエントロピー\r\n source: string; // 'uniform' | 'weighted' | 'custom'\r\n}\r\n\r\n/** エントロピー分析結果 */\r\nexport interface EntropyAnalysis {\r\n reiType: 'EntropyAnalysis';\r\n shannon: number; // H(X) = -Σ p(x) log₂ p(x)\r\n maxEntropy: number; // log₂(n)\r\n relativeEntropy: number; // H / H_max (0~1, 1=最大ランダム)\r\n distribution: { value: any; probability: number }[];\r\n}\r\n\r\n/** 疑似乱数生成(xorshift128+) */\r\nlet _rngState = [Date.now() ^ 0xDEADBEEF, Date.now() ^ 0xCAFEBABE];\r\n\r\nexport function seedRandom(seed: number): void {\r\n _rngState = [seed ^ 0xDEADBEEF, (seed * 1103515245 + 12345) ^ 0xCAFEBABE];\r\n}\r\n\r\nfunction nextRandom(): number {\r\n let [s0, s1] = _rngState;\r\n const result = (s0 + s1) >>> 0;\r\n s1 ^= s0;\r\n _rngState[0] = ((s0 << 23) | (s0 >>> 9)) ^ s1 ^ (s1 << 17);\r\n _rngState[1] = (s1 << 6) | (s1 >>> 26);\r\n return (result >>> 0) / 0x100000000;\r\n}\r\n\r\n/** 一様ランダム選択 */\r\nexport function randomUniform(items: any[]): RandomResult {\r\n if (items.length === 0) return { reiType: 'RandomResult', value: null, probability: 0, entropy: 0, source: 'uniform' };\r\n const idx = Math.floor(nextRandom() * items.length);\r\n const p = 1 / items.length;\r\n return {\r\n reiType: 'RandomResult',\r\n value: items[idx],\r\n probability: p,\r\n entropy: Math.log2(items.length),\r\n source: 'uniform',\r\n };\r\n}\r\n\r\n/** 重み付きランダム選択 */\r\nexport function randomWeighted(items: any[], weights: number[]): RandomResult {\r\n if (items.length === 0) return { reiType: 'RandomResult', value: null, probability: 0, entropy: 0, source: 'weighted' };\r\n const totalWeight = weights.reduce((a, b) => a + b, 0) || 1;\r\n const probs = weights.map(w => w / totalWeight);\r\n const r = nextRandom();\r\n let cumulative = 0;\r\n let selectedIdx = items.length - 1;\r\n for (let i = 0; i < probs.length; i++) {\r\n cumulative += probs[i];\r\n if (r < cumulative) { selectedIdx = i; break; }\r\n }\r\n const entropy = -probs.reduce((s, p) => s + (p > 0 ? p * Math.log2(p) : 0), 0);\r\n return {\r\n reiType: 'RandomResult',\r\n value: items[selectedIdx],\r\n probability: probs[selectedIdx],\r\n entropy,\r\n source: 'weighted',\r\n };\r\n}\r\n\r\n/** 𝕄のランダム選択: neighborsからランダムに1つ選ぶ */\r\nexport function randomFromMDim(md: any): RandomResult {\r\n if (md?.reiType !== 'MDim' || !md.neighbors || md.neighbors.length === 0) {\r\n return { reiType: 'RandomResult', value: md?.center ?? 0, probability: 1, entropy: 0, source: 'uniform' };\r\n }\r\n if (md.weights && md.weights.length === md.neighbors.length) {\r\n return randomWeighted(md.neighbors, md.weights);\r\n }\r\n return randomUniform(md.neighbors);\r\n}\r\n\r\n/** シャノンエントロピー計算 */\r\nexport function analyzeEntropy(values: any[]): EntropyAnalysis {\r\n if (values.length === 0) {\r\n return { reiType: 'EntropyAnalysis', shannon: 0, maxEntropy: 0, relativeEntropy: 0, distribution: [] };\r\n }\r\n const counts: Map<string, number> = new Map();\r\n for (const v of values) {\r\n const key = JSON.stringify(v);\r\n counts.set(key, (counts.get(key) ?? 0) + 1);\r\n }\r\n const n = values.length;\r\n const distribution: { value: any; probability: number }[] = [];\r\n let shannon = 0;\r\n for (const [key, count] of counts) {\r\n const p = count / n;\r\n shannon -= p * Math.log2(p);\r\n distribution.push({ value: JSON.parse(key), probability: p });\r\n }\r\n const maxEntropy = Math.log2(counts.size);\r\n return {\r\n reiType: 'EntropyAnalysis',\r\n shannon,\r\n maxEntropy,\r\n relativeEntropy: maxEntropy > 0 ? shannon / maxEntropy : 1,\r\n distribution: distribution.sort((a, b) => b.probability - a.probability),\r\n };\r\n}\r\n\r\n/** ランダムウォーク: 𝕄を起点に確率的に値を変化させる */\r\nexport function randomWalk(start: number, steps: number, stepSize: number = 1): number[] {\r\n const walk: number[] = [start];\r\n let current = start;\r\n for (let i = 0; i < steps; i++) {\r\n current += (nextRandom() > 0.5 ? 1 : -1) * stepSize;\r\n walk.push(current);\r\n }\r\n return walk;\r\n}\r\n\r\n/** モンテカルロサンプリング: 𝕄のneighborsからN回サンプル */\r\nexport function monteCarloSample(md: any, n: number): { samples: any[]; entropy: EntropyAnalysis } {\r\n const samples: any[] = [];\r\n for (let i = 0; i < n; i++) {\r\n const r = randomFromMDim(md);\r\n samples.push(r.value);\r\n }\r\n return { samples, entropy: analyzeEntropy(samples) };\r\n}\r\n\r\n// ═══════════════════════════════════════════\r\n// Part 2: Game Unification (ゲーム統一)\r\n// ═══════════════════════════════════════════\r\n\r\n/** プレイヤー識別 */\r\nexport type Player = 1 | 2;\r\n\r\n/** ゲームの手 */\r\nexport interface GameMove {\r\n player: Player;\r\n position: number; // 手の位置(盤面インデックス or アクション番号)\r\n label?: string; // 人間可読なラベル(\"X at (1,1)\" etc)\r\n}\r\n\r\n/** ゲーム状態 */\r\nexport interface GameState {\r\n board: any[]; // 盤面(ゲーム固有)\r\n currentPlayer: Player;\r\n moveHistory: GameMove[];\r\n status: 'playing' | 'win' | 'draw' | 'loss';\r\n winner: Player | null;\r\n turnCount: number;\r\n}\r\n\r\n/** ゲームルール(ゲームごとに実装) */\r\nexport interface GameRules {\r\n name: string;\r\n getLegalMoves: (state: GameState) => number[];\r\n applyMove: (state: GameState, position: number) => GameState;\r\n checkWin: (state: GameState) => Player | null;\r\n checkDraw: (state: GameState) => boolean;\r\n evaluate: (state: GameState, player: Player) => number; // ヒューリスティック評価\r\n formatBoard: (state: GameState) => string;\r\n}\r\n\r\n/** ゲームスペース — 柱⑤の核心 */\r\nexport interface GameSpace {\r\n reiType: 'GameSpace';\r\n state: GameState;\r\n rules: GameRules;\r\n strategy: string; // 'minimax' | 'random' | 'greedy' | 'defensive'\r\n maxDepth: number; // 探索深度\r\n searchNodes: number; // 探索したノード数(σ用)\r\n}\r\n\r\n/** ゲームのσ自己参照 */\r\nexport interface GameSigma {\r\n reiType: 'SigmaResult';\r\n field: { game: string; board: any[]; turnCount: number; status: string };\r\n flow: { currentPlayer: Player; direction: string; momentum: number };\r\n memory: GameMove[];\r\n layer: number;\r\n relation: { players: number; type: string };\r\n will: { strategy: string; searchDepth: number; searchNodes: number };\r\n}\r\n\r\n// --- Tic-Tac-Toe (三目並べ) ---\r\n\r\nfunction tttGetLegalMoves(state: GameState): number[] {\r\n return state.board.reduce((moves: number[], cell: any, i: number) =>\r\n cell === 0 ? [...moves, i] : moves, []);\r\n}\r\n\r\nfunction tttApplyMove(state: GameState, position: number): GameState {\r\n const newBoard = [...state.board];\r\n newBoard[position] = state.currentPlayer;\r\n const newState: GameState = {\r\n board: newBoard,\r\n currentPlayer: state.currentPlayer === 1 ? 2 : 1,\r\n moveHistory: [...state.moveHistory, {\r\n player: state.currentPlayer,\r\n position,\r\n label: `${state.currentPlayer === 1 ? 'X' : 'O'} at (${Math.floor(position / 3)},${position % 3})`,\r\n }],\r\n status: 'playing',\r\n winner: null,\r\n turnCount: state.turnCount + 1,\r\n };\r\n const winner = tttCheckWin(newState);\r\n if (winner) { newState.status = 'win'; newState.winner = winner; }\r\n else if (tttCheckDraw(newState)) { newState.status = 'draw'; }\r\n return newState;\r\n}\r\n\r\nconst TTT_LINES = [\r\n [0,1,2],[3,4,5],[6,7,8], // rows\r\n [0,3,6],[1,4,7],[2,5,8], // cols\r\n [0,4,8],[2,4,6], // diags\r\n];\r\n\r\nfunction tttCheckWin(state: GameState): Player | null {\r\n for (const [a, b, c] of TTT_LINES) {\r\n if (state.board[a] && state.board[a] === state.board[b] && state.board[b] === state.board[c]) {\r\n return state.board[a] as Player;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction tttCheckDraw(state: GameState): boolean {\r\n return !tttCheckWin(state) && state.board.every((c: any) => c !== 0);\r\n}\r\n\r\nfunction tttEvaluate(state: GameState, player: Player): number {\r\n const winner = tttCheckWin(state);\r\n if (winner === player) return 10;\r\n if (winner !== null) return -10;\r\n if (tttCheckDraw(state)) return 0;\r\n // ヒューリスティック: 中央と角の重み\r\n let score = 0;\r\n if (state.board[4] === player) score += 3;\r\n for (const corner of [0, 2, 6, 8]) {\r\n if (state.board[corner] === player) score += 1;\r\n }\r\n return score;\r\n}\r\n\r\nfunction tttFormatBoard(state: GameState): string {\r\n const symbols = ['.', 'X', 'O'];\r\n const rows: string[] = [];\r\n for (let r = 0; r < 3; r++) {\r\n rows.push(state.board.slice(r * 3, r * 3 + 3).map((c: number) => symbols[c]).join(' '));\r\n }\r\n return rows.join('\\n');\r\n}\r\n\r\nconst TIC_TAC_TOE_RULES: GameRules = {\r\n name: 'tic_tac_toe',\r\n getLegalMoves: tttGetLegalMoves,\r\n applyMove: tttApplyMove,\r\n checkWin: tttCheckWin,\r\n checkDraw: tttCheckDraw,\r\n evaluate: tttEvaluate,\r\n formatBoard: tttFormatBoard,\r\n};\r\n\r\n// --- Nim (ニム) ---\r\n\r\nfunction nimGetLegalMoves(state: GameState): number[] {\r\n // board[0] = 残り石数, 最大3個まで取れる\r\n const stones = state.board[0] as number;\r\n const moves: number[] = [];\r\n for (let i = 1; i <= Math.min(3, stones); i++) moves.push(i);\r\n return moves;\r\n}\r\n\r\nfunction nimApplyMove(state: GameState, position: number): GameState {\r\n const remaining = (state.board[0] as number) - position;\r\n const newState: GameState = {\r\n board: [remaining],\r\n currentPlayer: state.currentPlayer === 1 ? 2 : 1,\r\n moveHistory: [...state.moveHistory, {\r\n player: state.currentPlayer,\r\n position,\r\n label: `Player ${state.currentPlayer} takes ${position} (${remaining} left)`,\r\n }],\r\n status: 'playing',\r\n winner: null,\r\n turnCount: state.turnCount + 1,\r\n };\r\n if (remaining <= 0) {\r\n // 最後の石を取った人が負け(misère Nim)\r\n newState.status = 'win';\r\n newState.winner = state.currentPlayer === 1 ? 2 : 1;\r\n }\r\n return newState;\r\n}\r\n\r\nfunction nimCheckWin(state: GameState): Player | null { return state.winner; }\r\nfunction nimCheckDraw(_state: GameState): boolean { return false; }\r\n\r\nfunction nimEvaluate(state: GameState, player: Player): number {\r\n if (state.winner === player) return 10;\r\n if (state.winner !== null) return -10;\r\n // Nim戦略: (残り石数 - 1) % 4 === 0 なら手番が不利\r\n const stones = state.board[0] as number;\r\n const isLosing = (stones - 1) % 4 === 0;\r\n return state.currentPlayer === player ? (isLosing ? -5 : 5) : (isLosing ? 5 : -5);\r\n}\r\n\r\nfunction nimFormatBoard(state: GameState): string {\r\n const stones = state.board[0] as number;\r\n return `Stones: ${'●'.repeat(stones)}${'○'.repeat(Math.max(0, 10 - stones))} (${stones} remaining)`;\r\n}\r\n\r\nconst NIM_RULES: GameRules = {\r\n name: 'nim',\r\n getLegalMoves: nimGetLegalMoves,\r\n applyMove: nimApplyMove,\r\n checkWin: nimCheckWin,\r\n checkDraw: nimCheckDraw,\r\n evaluate: nimEvaluate,\r\n formatBoard: nimFormatBoard,\r\n};\r\n\r\n// --- Coin Flip Game (コイン予測ゲーム) ---\r\n\r\nfunction coinGetLegalMoves(_state: GameState): number[] {\r\n return [0, 1]; // 0=表(heads), 1=裏(tails)\r\n}\r\n\r\nfunction coinApplyMove(state: GameState, position: number): GameState {\r\n const flip = nextRandom() > 0.5 ? 1 : 0;\r\n const correct = position === flip;\r\n const newScore = [...state.board];\r\n if (correct) newScore[state.currentPlayer - 1]++;\r\n newScore[2] = flip; // 最後のフリップ結果\r\n\r\n const newState: GameState = {\r\n board: newScore,\r\n currentPlayer: state.currentPlayer === 1 ? 2 : 1,\r\n moveHistory: [...state.moveHistory, {\r\n player: state.currentPlayer,\r\n position,\r\n label: `P${state.currentPlayer} guessed ${position === 0 ? 'H' : 'T'}, got ${flip === 0 ? 'H' : 'T'} → ${correct ? '✓' : '✗'}`,\r\n }],\r\n status: 'playing',\r\n winner: null,\r\n turnCount: state.turnCount + 1,\r\n };\r\n\r\n // 10ラウンドで終了\r\n if (newState.turnCount >= 10) {\r\n const s1 = newScore[0], s2 = newScore[1];\r\n if (s1 > s2) { newState.status = 'win'; newState.winner = 1; }\r\n else if (s2 > s1) { newState.status = 'win'; newState.winner = 2; }\r\n else { newState.status = 'draw'; }\r\n }\r\n return newState;\r\n}\r\n\r\nfunction coinCheckWin(state: GameState): Player | null { return state.winner; }\r\nfunction coinCheckDraw(state: GameState): boolean { return state.status === 'draw'; }\r\nfunction coinEvaluate(state: GameState, player: Player): number {\r\n return (state.board[player - 1] ?? 0) - (state.board[player === 1 ? 1 : 0] ?? 0);\r\n}\r\nfunction coinFormatBoard(state: GameState): string {\r\n return `P1: ${state.board[0] ?? 0} | P2: ${state.board[1] ?? 0} | Turn: ${state.turnCount}/10`;\r\n}\r\n\r\nconst COIN_FLIP_RULES: GameRules = {\r\n name: 'coin_flip',\r\n getLegalMoves: coinGetLegalMoves,\r\n applyMove: coinApplyMove,\r\n checkWin: coinCheckWin,\r\n checkDraw: coinCheckDraw,\r\n evaluate: coinEvaluate,\r\n formatBoard: coinFormatBoard,\r\n};\r\n\r\n// --- Rock-Paper-Scissors (じゃんけん) ---\r\n\r\nfunction rpsGetLegalMoves(_state: GameState): number[] {\r\n return [0, 1, 2]; // 0=Rock, 1=Paper, 2=Scissors\r\n}\r\n\r\nfunction rpsApplyMove(state: GameState, position: number): GameState {\r\n const newHistory = [...state.moveHistory, {\r\n player: state.currentPlayer,\r\n position,\r\n label: `P${state.currentPlayer}: ${['Rock','Paper','Scissors'][position]}`,\r\n }];\r\n\r\n // 2人分の手が揃ったら判定\r\n if (state.currentPlayer === 2) {\r\n const p1Move = state.board[2]; // 一時保存されたP1の手\r\n const p2Move = position;\r\n const newScore = [state.board[0], state.board[1]];\r\n\r\n if (p1Move === p2Move) { /* draw round */ }\r\n else if ((p1Move + 1) % 3 === p2Move) { newScore[1]++; } // P2 wins round\r\n else { newScore[0]++; } // P1 wins round\r\n\r\n const round = Math.floor(state.turnCount / 2) + 1;\r\n const newState: GameState = {\r\n board: [newScore[0], newScore[1], -1],\r\n currentPlayer: 1,\r\n moveHistory: newHistory,\r\n status: 'playing',\r\n winner: null,\r\n turnCount: state.turnCount + 1,\r\n };\r\n\r\n if (round >= 5) { // 5ラウンドで終了\r\n if (newScore[0] > newScore[1]) { newState.status = 'win'; newState.winner = 1; }\r\n else if (newScore[1] > newScore[0]) { newState.status = 'win'; newState.winner = 2; }\r\n else { newState.status = 'draw'; }\r\n }\r\n return newState;\r\n }\r\n\r\n // P1の手を一時保存\r\n return {\r\n board: [state.board[0] ?? 0, state.board[1] ?? 0, position],\r\n currentPlayer: 2,\r\n moveHistory: newHistory,\r\n status: 'playing',\r\n winner: null,\r\n turnCount: state.turnCount + 1,\r\n };\r\n}\r\n\r\nfunction rpsCheckWin(state: GameState): Player | null { return state.winner; }\r\nfunction rpsCheckDraw(state: GameState): boolean { return state.status === 'draw'; }\r\nfunction rpsEvaluate(state: GameState, player: Player): number {\r\n return (state.board[player - 1] ?? 0) - (state.board[player === 1 ? 1 : 0] ?? 0);\r\n}\r\nfunction rpsFormatBoard(state: GameState): string {\r\n return `P1: ${state.board[0] ?? 0} | P2: ${state.board[1] ?? 0} | Round: ${Math.floor(state.turnCount / 2) + 1}/5`;\r\n}\r\n\r\nconst RPS_RULES: GameRules = {\r\n name: 'rock_paper_scissors',\r\n getLegalMoves: rpsGetLegalMoves,\r\n applyMove: rpsApplyMove,\r\n checkWin: rpsCheckWin,\r\n checkDraw: rpsCheckDraw,\r\n evaluate: rpsEvaluate,\r\n formatBoard: rpsFormatBoard,\r\n};\r\n\r\n// ═══════════════════════════════════════════\r\n// Part 3: Game Engine (統一ゲームエンジン)\r\n// ═══════════════════════════════════════════\r\n\r\nconst GAME_REGISTRY: Record<string, { rules: GameRules; initialBoard: () => any[] }> = {\r\n 'tic_tac_toe': { rules: TIC_TAC_TOE_RULES, initialBoard: () => Array(9).fill(0) },\r\n 'ttt': { rules: TIC_TAC_TOE_RULES, initialBoard: () => Array(9).fill(0) },\r\n '三目並べ': { rules: TIC_TAC_TOE_RULES, initialBoard: () => Array(9).fill(0) },\r\n 'nim': { rules: NIM_RULES, initialBoard: () => [10] },\r\n 'ニム': { rules: NIM_RULES, initialBoard: () => [10] },\r\n 'coin_flip': { rules: COIN_FLIP_RULES, initialBoard: () => [0, 0, -1] },\r\n 'コイン': { rules: COIN_FLIP_RULES, initialBoard: () => [0, 0, -1] },\r\n 'rock_paper_scissors': { rules: RPS_RULES, initialBoard: () => [0, 0, -1] },\r\n 'rps': { rules: RPS_RULES, initialBoard: () => [0, 0, -1] },\r\n 'じゃんけん': { rules: RPS_RULES, initialBoard: () => [0, 0, -1] },\r\n};\r\n\r\n/** ゲームスペースの作成 */\r\nexport function createGameSpace(gameName: string, config?: { board?: any[]; stones?: number }): GameSpace {\r\n const entry = GAME_REGISTRY[gameName];\r\n if (!entry) throw new Error(`未知のゲーム: ${gameName} (対応: ${Object.keys(GAME_REGISTRY).join(', ')})`);\r\n\r\n let board = entry.initialBoard();\r\n if (config?.board) board = config.board;\r\n if (config?.stones && gameName.includes('nim')) board = [config.stones];\r\n\r\n return {\r\n reiType: 'GameSpace',\r\n state: {\r\n board,\r\n currentPlayer: 1,\r\n moveHistory: [],\r\n status: 'playing',\r\n winner: null,\r\n turnCount: 0,\r\n },\r\n rules: entry.rules,\r\n strategy: 'minimax',\r\n maxDepth: 9,\r\n searchNodes: 0,\r\n };\r\n}\r\n\r\n// --- Minimax with Alpha-Beta ---\r\n\r\nfunction minimax(\r\n state: GameState,\r\n rules: GameRules,\r\n depth: number,\r\n alpha: number,\r\n beta: number,\r\n maximizing: boolean,\r\n player: Player,\r\n nodeCounter: { count: number }\r\n): number {\r\n nodeCounter.count++;\r\n const winner = rules.checkWin(state);\r\n if (winner !== null || rules.checkDraw(state) || depth <= 0) {\r\n return rules.evaluate(state, player);\r\n }\r\n\r\n const moves = rules.getLegalMoves(state);\r\n if (moves.length === 0) return rules.evaluate(state, player);\r\n\r\n if (maximizing) {\r\n let maxEval = -Infinity;\r\n for (const move of moves) {\r\n const newState = rules.applyMove(state, move);\r\n const ev = minimax(newState, rules, depth - 1, alpha, beta, false, player, nodeCounter);\r\n maxEval = Math.max(maxEval, ev);\r\n alpha = Math.max(alpha, ev);\r\n if (beta <= alpha) break;\r\n }\r\n return maxEval;\r\n } else {\r\n let minEval = Infinity;\r\n for (const move of moves) {\r\n const newState = rules.applyMove(state, move);\r\n const ev = minimax(newState, rules, depth - 1, alpha, beta, true, player, nodeCounter);\r\n minEval = Math.min(minEval, ev);\r\n beta = Math.min(beta, ev);\r\n if (beta <= alpha) break;\r\n }\r\n return minEval;\r\n }\r\n}\r\n\r\n/** 最善手の選択 */\r\nexport function selectBestMove(game: GameSpace): { move: number; score: number; searchNodes: number } {\r\n const { state, rules, strategy, maxDepth } = game;\r\n const moves = rules.getLegalMoves(state);\r\n if (moves.length === 0) return { move: -1, score: 0, searchNodes: 0 };\r\n\r\n switch (strategy) {\r\n case 'random': {\r\n const idx = Math.floor(nextRandom() * moves.length);\r\n return { move: moves[idx], score: 0, searchNodes: 1 };\r\n }\r\n case 'greedy': {\r\n let bestMove = moves[0];\r\n let bestScore = -Infinity;\r\n for (const move of moves) {\r\n const newState = rules.applyMove(state, move);\r\n const score = rules.evaluate(newState, state.currentPlayer);\r\n if (score > bestScore) { bestScore = score; bestMove = move; }\r\n }\r\n return { move: bestMove, score: bestScore, searchNodes: moves.length };\r\n }\r\n case 'defensive': {\r\n // 相手の最善手をブロック\r\n const opponent: Player = state.currentPlayer === 1 ? 2 : 1;\r\n let bestMove = moves[0];\r\n let bestScore = -Infinity;\r\n for (const move of moves) {\r\n const newState = rules.applyMove(state, move);\r\n // 相手にとっての評価を最小化\r\n const score = -rules.evaluate(newState, opponent);\r\n if (score > bestScore) { bestScore = score; bestMove = move; }\r\n }\r\n return { move: bestMove, score: bestScore, searchNodes: moves.length };\r\n }\r\n default: { // minimax\r\n const nodeCounter = { count: 0 };\r\n let bestMove = moves[0];\r\n let bestScore = -Infinity;\r\n for (const move of moves) {\r\n const newState = rules.applyMove(state, move);\r\n const score = minimax(newState, rules, maxDepth - 1, -Infinity, Infinity, false, state.currentPlayer, nodeCounter);\r\n if (score > bestScore) { bestScore = score; bestMove = move; }\r\n }\r\n return { move: bestMove, score: bestScore, searchNodes: nodeCounter.count };\r\n }\r\n }\r\n}\r\n\r\n/** 1手進める */\r\nexport function playMove(game: GameSpace, position?: number): GameSpace {\r\n const moves = game.rules.getLegalMoves(game.state);\r\n if (moves.length === 0 || game.state.status !== 'playing') return game;\r\n\r\n let move: number;\r\n if (position !== undefined && moves.includes(position)) {\r\n move = position;\r\n } else {\r\n const best = selectBestMove(game);\r\n move = best.move;\r\n game.searchNodes += best.searchNodes;\r\n }\r\n\r\n return {\r\n ...game,\r\n state: game.rules.applyMove(game.state, move),\r\n };\r\n}\r\n\r\n/** 自動対局: 両プレイヤーが戦略に従って最後まで対戦 */\r\nexport function autoPlay(game: GameSpace, p1Strategy?: string, p2Strategy?: string): GameSpace {\r\n let current = { ...game };\r\n const s1 = p1Strategy ?? game.strategy;\r\n const s2 = p2Strategy ?? game.strategy;\r\n let safetyCounter = 0;\r\n\r\n while (current.state.status === 'playing' && safetyCounter < 200) {\r\n safetyCounter++;\r\n current = {\r\n ...current,\r\n strategy: current.state.currentPlayer === 1 ? s1 : s2,\r\n };\r\n current = playMove(current);\r\n }\r\n return current;\r\n}\r\n\r\n/** ゲームの𝕄表現: 現在状態を𝕄{状態; 可能手...}として返す */\r\nexport function gameAsMDim(game: GameSpace): any {\r\n const moves = game.rules.getLegalMoves(game.state);\r\n return {\r\n reiType: 'MDim',\r\n center: game.state.turnCount,\r\n neighbors: moves,\r\n mode: game.strategy,\r\n metadata: {\r\n game: game.rules.name,\r\n currentPlayer: game.state.currentPlayer,\r\n status: game.state.status,\r\n },\r\n };\r\n}\r\n\r\n/** σ自己参照 */\r\nexport function getGameSigma(game: GameSpace): GameSigma {\r\n return {\r\n reiType: 'SigmaResult',\r\n field: {\r\n game: game.rules.name,\r\n board: game.state.board,\r\n turnCount: game.state.turnCount,\r\n status: game.state.status,\r\n },\r\n flow: {\r\n currentPlayer: game.state.currentPlayer,\r\n direction: game.state.status === 'playing' ? 'active' : 'terminated',\r\n momentum: game.state.turnCount,\r\n },\r\n memory: game.state.moveHistory,\r\n layer: game.maxDepth,\r\n relation: {\r\n players: 2,\r\n type: game.rules.name === 'nim' ? 'adversarial_sequential' :\r\n game.rules.name === 'coin_flip' ? 'independent_simultaneous' :\r\n 'adversarial_alternating',\r\n },\r\n will: {\r\n strategy: game.strategy,\r\n searchDepth: game.maxDepth,\r\n searchNodes: game.searchNodes,\r\n },\r\n };\r\n}\r\n\r\n/** ゲーム盤面のフォーマット */\r\nexport function formatGame(game: GameSpace): string {\r\n const lines: string[] = [];\r\n lines.push(`═══ ${game.rules.name} ═══`);\r\n lines.push(game.rules.formatBoard(game.state));\r\n lines.push(`手番: Player ${game.state.currentPlayer} | 状態: ${game.state.status}`);\r\n if (game.state.winner) lines.push(`勝者: Player ${game.state.winner}`);\r\n if (game.state.moveHistory.length > 0) {\r\n lines.push(`─── 棋譜 ───`);\r\n for (const m of game.state.moveHistory.slice(-5)) {\r\n lines.push(` ${m.label}`);\r\n }\r\n if (game.state.moveHistory.length > 5) {\r\n lines.push(` ... (${game.state.moveHistory.length - 5}手省略)`);\r\n }\r\n }\r\n return lines.join('\\n');\r\n}\r\n\r\n/** 合法手の取得 */\r\nexport function getLegalMoves(game: GameSpace): number[] {\r\n return game.rules.getLegalMoves(game.state);\r\n}\r\n\r\n/** ゲーム統計シミュレーション */\r\nexport function simulateGames(\r\n gameName: string,\r\n n: number,\r\n p1Strategy: string = 'minimax',\r\n p2Strategy: string = 'random'\r\n): { p1Wins: number; p2Wins: number; draws: number; total: number; p1Rate: number } {\r\n let p1Wins = 0, p2Wins = 0, draws = 0;\r\n for (let i = 0; i < n; i++) {\r\n const game = createGameSpace(gameName);\r\n const result = autoPlay(game, p1Strategy, p2Strategy);\r\n if (result.state.winner === 1) p1Wins++;\r\n else if (result.state.winner === 2) p2Wins++;\r\n else draws++;\r\n }\r\n return { p1Wins, p2Wins, draws, total: n, p1Rate: p1Wins / n };\r\n}\r\n","// ============================================================\r\n// Rei v0.3 — Puzzle Unification Engine (パズル統一エンジン)\r\n// 柱③: 全制約充足パズルを場-拡散モデルで統一的に記述\r\n//\r\n// Core Insight:\r\n// 数独もカックロもラテン方陣も、すべて同じ構造:\r\n// 𝕄{確定値; 候補₁, 候補₂, ...} が場の中で拡散し、\r\n// 制約がneighborを消去し、候補が1つになったら収束する。\r\n//\r\n// D-FUMT 6属性の対応:\r\n// 場 = グリッド全体(81セルの空間)\r\n// 流れ = 制約伝播の方向(行・列・ブロック)\r\n// 記憶 = 「この候補はなぜ消えたか」の履歴\r\n// 層 = 推論の深さ(直接消去 → 裸ペア → X-Wing ...)\r\n// 関係 = 制約ネットワーク(同行・同列・同ブロック)\r\n// 意志 = 候補が多い時の選択戦略(τの傾向性)\r\n//\r\n// Author: Nobuki Fujimoto / Claude (collaborative design)\r\n// ============================================================\r\n\r\n// --- Core Types ---\r\n\r\n/** パズルセル — 𝕄{確定値; 候補₁, ...} のパズル特化版 */\r\nexport interface PuzzleCell {\r\n row: number;\r\n col: number;\r\n value: number; // 確定値(0 = 未確定)\r\n candidates: number[]; // 候補リスト(𝕄のneighbors)\r\n fixed: boolean; // 問題で与えられた値か\r\n // σ: 記憶\r\n eliminationHistory: EliminationEntry[];\r\n}\r\n\r\n/** 消去履歴エントリ — 記憶属性の実装 */\r\nexport interface EliminationEntry {\r\n candidate: number;\r\n reason: string; // \"row_conflict\" | \"col_conflict\" | \"box_conflict\" | \"naked_pair\" | ...\r\n source: [number, number]; // 原因セル [row, col]\r\n step: number; // 何ステップ目か\r\n}\r\n\r\n/** 制約グループ — 関係属性の実装 */\r\nexport interface ConstraintGroup {\r\n type: string; // \"row\" | \"col\" | \"box\" | \"sum\" | \"all_different\"\r\n cells: [number, number][]; // [row, col] のリスト\r\n target?: number; // sum制約の場合の目標値\r\n label: string; // \"行0\" | \"列3\" | \"ブロック(0,0)\" | ...\r\n}\r\n\r\n/** 伝播ステップ — 流れ属性の実装 */\r\nexport interface PropagationStep {\r\n step: number;\r\n eliminations: number; // このステップで消去された候補数\r\n confirmations: number; // このステップで確定したセル数\r\n technique: string; // 使用した手法\r\n details: string[]; // 詳細ログ\r\n}\r\n\r\n/** パズル空間 — 場属性の実装 */\r\nexport interface PuzzleSpace {\r\n reiType: 'PuzzleSpace';\r\n puzzleType: string; // \"sudoku\" | \"latin_square\" | \"kakuro\" | \"custom\"\r\n size: number; // グリッドサイズ (9 for 数独)\r\n cells: PuzzleCell[][];\r\n constraints: ConstraintGroup[];\r\n history: PropagationStep[];\r\n solved: boolean;\r\n step: number;\r\n // σ: 場全体の自己参照\r\n totalCandidates: number;\r\n confirmedCells: number;\r\n}\r\n\r\n// --- Factory Functions ---\r\n\r\n/** 空のセルを生成 */\r\nfunction createCell(row: number, col: number, size: number): PuzzleCell {\r\n return {\r\n row, col,\r\n value: 0,\r\n candidates: Array.from({ length: size }, (_, i) => i + 1),\r\n fixed: false,\r\n eliminationHistory: [],\r\n };\r\n}\r\n\r\n/** 数独の制約グループを生成 */\r\nfunction createSudokuConstraints(size: number): ConstraintGroup[] {\r\n const groups: ConstraintGroup[] = [];\r\n const boxSize = Math.round(Math.sqrt(size));\r\n\r\n // 行制約\r\n for (let r = 0; r < size; r++) {\r\n groups.push({\r\n type: 'all_different',\r\n cells: Array.from({ length: size }, (_, c) => [r, c] as [number, number]),\r\n label: `行${r}`,\r\n });\r\n }\r\n\r\n // 列制約\r\n for (let c = 0; c < size; c++) {\r\n groups.push({\r\n type: 'all_different',\r\n cells: Array.from({ length: size }, (_, r) => [r, c] as [number, number]),\r\n label: `列${c}`,\r\n });\r\n }\r\n\r\n // ブロック制約\r\n for (let br = 0; br < boxSize; br++) {\r\n for (let bc = 0; bc < boxSize; bc++) {\r\n const cells: [number, number][] = [];\r\n for (let r = 0; r < boxSize; r++) {\r\n for (let c = 0; c < boxSize; c++) {\r\n cells.push([br * boxSize + r, bc * boxSize + c]);\r\n }\r\n }\r\n groups.push({\r\n type: 'all_different',\r\n cells,\r\n label: `ブロック(${br},${bc})`,\r\n });\r\n }\r\n }\r\n\r\n return groups;\r\n}\r\n\r\n/** ラテン方陣の制約グループ生成 */\r\nfunction createLatinSquareConstraints(size: number): ConstraintGroup[] {\r\n const groups: ConstraintGroup[] = [];\r\n\r\n // 行制約\r\n for (let r = 0; r < size; r++) {\r\n groups.push({\r\n type: 'all_different',\r\n cells: Array.from({ length: size }, (_, c) => [r, c] as [number, number]),\r\n label: `行${r}`,\r\n });\r\n }\r\n\r\n // 列制約\r\n for (let c = 0; c < size; c++) {\r\n groups.push({\r\n type: 'all_different',\r\n cells: Array.from({ length: size }, (_, r) => [r, c] as [number, number]),\r\n label: `列${c}`,\r\n });\r\n }\r\n\r\n return groups;\r\n}\r\n\r\n// --- Puzzle Space Creation ---\r\n\r\n/**\r\n * 数独パズル空間を生成\r\n * @param grid 9×9の二次元配列(0=空セル、1-9=ヒント)\r\n */\r\nexport function createSudokuSpace(grid: number[][]): PuzzleSpace {\r\n const size = grid.length;\r\n const cells: PuzzleCell[][] = [];\r\n\r\n for (let r = 0; r < size; r++) {\r\n cells[r] = [];\r\n for (let c = 0; c < size; c++) {\r\n cells[r][c] = createCell(r, c, size);\r\n if (grid[r][c] > 0) {\r\n cells[r][c].value = grid[r][c];\r\n cells[r][c].candidates = [];\r\n cells[r][c].fixed = true;\r\n }\r\n }\r\n }\r\n\r\n const space: PuzzleSpace = {\r\n reiType: 'PuzzleSpace',\r\n puzzleType: 'sudoku',\r\n size,\r\n cells,\r\n constraints: createSudokuConstraints(size),\r\n history: [],\r\n solved: false,\r\n step: 0,\r\n totalCandidates: 0,\r\n confirmedCells: 0,\r\n };\r\n\r\n // 初期制約伝播: ヒントから候補を消去\r\n initialPropagation(space);\r\n updateSpaceSigma(space);\r\n\r\n return space;\r\n}\r\n\r\n/**\r\n * ラテン方陣パズル空間を生成\r\n * @param grid N×Nの二次元配列\r\n */\r\nexport function createLatinSquareSpace(grid: number[][]): PuzzleSpace {\r\n const size = grid.length;\r\n const cells: PuzzleCell[][] = [];\r\n\r\n for (let r = 0; r < size; r++) {\r\n cells[r] = [];\r\n for (let c = 0; c < size; c++) {\r\n cells[r][c] = createCell(r, c, size);\r\n if (grid[r][c] > 0) {\r\n cells[r][c].value = grid[r][c];\r\n cells[r][c].candidates = [];\r\n cells[r][c].fixed = true;\r\n }\r\n }\r\n }\r\n\r\n const space: PuzzleSpace = {\r\n reiType: 'PuzzleSpace',\r\n puzzleType: 'latin_square',\r\n size,\r\n cells,\r\n constraints: createLatinSquareConstraints(size),\r\n history: [],\r\n solved: false,\r\n step: 0,\r\n totalCandidates: 0,\r\n confirmedCells: 0,\r\n };\r\n\r\n initialPropagation(space);\r\n updateSpaceSigma(space);\r\n return space;\r\n}\r\n\r\n/**\r\n * カスタムパズル空間を生成(任意の制約を追加可能)\r\n */\r\nexport function createCustomPuzzleSpace(\r\n size: number,\r\n grid: number[][],\r\n constraints: ConstraintGroup[]\r\n): PuzzleSpace {\r\n const cells: PuzzleCell[][] = [];\r\n\r\n for (let r = 0; r < size; r++) {\r\n cells[r] = [];\r\n for (let c = 0; c < size; c++) {\r\n cells[r][c] = createCell(r, c, size);\r\n if (grid[r] && grid[r][c] > 0) {\r\n cells[r][c].value = grid[r][c];\r\n cells[r][c].candidates = [];\r\n cells[r][c].fixed = true;\r\n }\r\n }\r\n }\r\n\r\n const space: PuzzleSpace = {\r\n reiType: 'PuzzleSpace',\r\n puzzleType: 'custom',\r\n size,\r\n cells,\r\n constraints,\r\n history: [],\r\n solved: false,\r\n step: 0,\r\n totalCandidates: 0,\r\n confirmedCells: 0,\r\n };\r\n\r\n initialPropagation(space);\r\n updateSpaceSigma(space);\r\n return space;\r\n}\r\n\r\n// --- Constraint Propagation (拡散エンジン) ---\r\n\r\n/** 初期伝播: 既知セルの値を同グループから消去 */\r\nfunction initialPropagation(space: PuzzleSpace): void {\r\n const { cells, constraints } = space;\r\n const details: string[] = [];\r\n let eliminations = 0;\r\n\r\n for (const group of constraints) {\r\n if (group.type !== 'all_different') continue;\r\n\r\n // グループ内の確定値を集める\r\n const confirmed = new Set<number>();\r\n for (const [r, c] of group.cells) {\r\n if (cells[r][c].value > 0) confirmed.add(cells[r][c].value);\r\n }\r\n\r\n // 確定値を同グループの未確定セルの候補から消去\r\n for (const [r, c] of group.cells) {\r\n if (cells[r][c].value > 0) continue;\r\n for (const val of confirmed) {\r\n const idx = cells[r][c].candidates.indexOf(val);\r\n if (idx >= 0) {\r\n cells[r][c].candidates.splice(idx, 1);\r\n cells[r][c].eliminationHistory.push({\r\n candidate: val,\r\n reason: `${group.type}_initial`,\r\n source: [-1, -1],\r\n step: 0,\r\n });\r\n eliminations++;\r\n }\r\n }\r\n // 候補が1つになったら確定\r\n if (cells[r][c].candidates.length === 1) {\r\n cells[r][c].value = cells[r][c].candidates[0];\r\n cells[r][c].candidates = [];\r\n details.push(`(${r},${c})=${cells[r][c].value} [初期伝播: ${group.label}]`);\r\n }\r\n }\r\n }\r\n\r\n if (eliminations > 0) {\r\n space.history.push({\r\n step: 0,\r\n eliminations,\r\n confirmations: details.length,\r\n technique: 'initial_propagation',\r\n details,\r\n });\r\n }\r\n}\r\n\r\n/** σ更新: 場全体の統計情報を更新 */\r\nfunction updateSpaceSigma(space: PuzzleSpace): void {\r\n let total = 0;\r\n let confirmed = 0;\r\n const { cells, size } = space;\r\n\r\n for (let r = 0; r < size; r++) {\r\n for (let c = 0; c < size; c++) {\r\n if (cells[r][c].value > 0) {\r\n confirmed++;\r\n } else {\r\n total += cells[r][c].candidates.length;\r\n }\r\n }\r\n }\r\n\r\n space.totalCandidates = total;\r\n space.confirmedCells = confirmed;\r\n space.solved = confirmed === size * size;\r\n}\r\n\r\n// --- 層0: 直接消去 (Naked Single / Hidden Single) ---\r\n\r\n/**\r\n * 1ステップの制約伝播 — 拡散の1段階\r\n * 直接消去(Naked Single + Hidden Single)を実行\r\n */\r\nexport function propagateStep(space: PuzzleSpace): PropagationStep {\r\n space.step++;\r\n const step = space.step;\r\n const { cells, constraints, size } = space;\r\n const details: string[] = [];\r\n let eliminations = 0;\r\n let confirmations = 0;\r\n\r\n // Phase 1: Naked Single — 候補が1つのセルを確定(カスケード対応)\r\n let nakedSingleProgress = true;\r\n while (nakedSingleProgress) {\r\n nakedSingleProgress = false;\r\n for (let r = 0; r < size; r++) {\r\n for (let c = 0; c < size; c++) {\r\n if (cells[r][c].value > 0) continue;\r\n if (cells[r][c].candidates.length === 1) {\r\n const val = cells[r][c].candidates[0];\r\n cells[r][c].value = val;\r\n cells[r][c].candidates = [];\r\n confirmations++;\r\n nakedSingleProgress = true;\r\n details.push(`(${r},${c})=${val} [Naked Single]`);\r\n\r\n // この確定値を同グループから消去\r\n for (const group of constraints) {\r\n if (!group.cells.some(([gr, gc]) => gr === r && gc === c)) continue;\r\n for (const [gr, gc] of group.cells) {\r\n if (gr === r && gc === c) continue;\r\n if (cells[gr][gc].value > 0) continue;\r\n const idx = cells[gr][gc].candidates.indexOf(val);\r\n if (idx >= 0) {\r\n cells[gr][gc].candidates.splice(idx, 1);\r\n cells[gr][gc].eliminationHistory.push({\r\n candidate: val,\r\n reason: `${group.type}_propagation`,\r\n source: [r, c],\r\n step,\r\n });\r\n eliminations++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Phase 2: Hidden Single — あるグループで候補がそのセルにしかない\r\n for (const group of constraints) {\r\n if (group.type !== 'all_different') continue;\r\n\r\n // グループ内で未確定の値を収集\r\n const confirmedInGroup = new Set<number>();\r\n for (const [r, c] of group.cells) {\r\n if (cells[r][c].value > 0) confirmedInGroup.add(cells[r][c].value);\r\n }\r\n\r\n for (let val = 1; val <= size; val++) {\r\n if (confirmedInGroup.has(val)) continue;\r\n\r\n // valが候補に含まれるセルを探す\r\n const possibleCells: [number, number][] = [];\r\n for (const [r, c] of group.cells) {\r\n if (cells[r][c].value > 0) continue;\r\n if (cells[r][c].candidates.includes(val)) {\r\n possibleCells.push([r, c]);\r\n }\r\n }\r\n\r\n // 1箇所にしかない → 確定\r\n if (possibleCells.length === 1) {\r\n const [r, c] = possibleCells[0];\r\n if (cells[r][c].value > 0) continue; // すでに確定済み\r\n\r\n // 他の候補を消去して確定\r\n const removed = cells[r][c].candidates.filter(v => v !== val);\r\n for (const rem of removed) {\r\n cells[r][c].eliminationHistory.push({\r\n candidate: rem,\r\n reason: 'hidden_single',\r\n source: [r, c],\r\n step,\r\n });\r\n eliminations++;\r\n }\r\n cells[r][c].value = val;\r\n cells[r][c].candidates = [];\r\n confirmations++;\r\n details.push(`(${r},${c})=${val} [Hidden Single: ${group.label}]`);\r\n\r\n // この確定値を同グループから消去\r\n for (const otherGroup of constraints) {\r\n if (!otherGroup.cells.some(([gr, gc]) => gr === r && gc === c)) continue;\r\n for (const [gr, gc] of otherGroup.cells) {\r\n if (gr === r && gc === c) continue;\r\n if (cells[gr][gc].value > 0) continue;\r\n const idx = cells[gr][gc].candidates.indexOf(val);\r\n if (idx >= 0) {\r\n cells[gr][gc].candidates.splice(idx, 1);\r\n cells[gr][gc].eliminationHistory.push({\r\n candidate: val,\r\n reason: `${otherGroup.type}_propagation`,\r\n source: [r, c],\r\n step,\r\n });\r\n eliminations++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const record: PropagationStep = {\r\n step,\r\n eliminations,\r\n confirmations,\r\n technique: confirmations > 0 ? 'naked_single+hidden_single' : 'no_progress',\r\n details,\r\n };\r\n space.history.push(record);\r\n updateSpaceSigma(space);\r\n\r\n return record;\r\n}\r\n\r\n// --- 層1: 高度な手法 (Naked Pair / Pointing Pair) ---\r\n\r\n/**\r\n * Naked Pair: 同グループ内で2セルが同じ2候補を持つ場合、\r\n * グループ内の他のセルからその2値を消去\r\n */\r\nexport function propagateNakedPair(space: PuzzleSpace): PropagationStep {\r\n space.step++;\r\n const step = space.step;\r\n const { cells, constraints } = space;\r\n const details: string[] = [];\r\n let eliminations = 0;\r\n\r\n for (const group of constraints) {\r\n if (group.type !== 'all_different') continue;\r\n\r\n // 2候補を持つセルを探す\r\n const pairs: { pos: [number, number]; cands: number[] }[] = [];\r\n for (const [r, c] of group.cells) {\r\n if (cells[r][c].candidates.length === 2) {\r\n pairs.push({ pos: [r, c], cands: [...cells[r][c].candidates] });\r\n }\r\n }\r\n\r\n // 同じ2候補を持つペアを探す\r\n for (let i = 0; i < pairs.length; i++) {\r\n for (let j = i + 1; j < pairs.length; j++) {\r\n if (pairs[i].cands[0] === pairs[j].cands[0] &&\r\n pairs[i].cands[1] === pairs[j].cands[1]) {\r\n const [v1, v2] = pairs[i].cands;\r\n const [r1, c1] = pairs[i].pos;\r\n const [r2, c2] = pairs[j].pos;\r\n\r\n // グループ内の他のセルからv1, v2を消去\r\n for (const [r, c] of group.cells) {\r\n if ((r === r1 && c === c1) || (r === r2 && c === c2)) continue;\r\n if (cells[r][c].value > 0) continue;\r\n\r\n for (const val of [v1, v2]) {\r\n const idx = cells[r][c].candidates.indexOf(val);\r\n if (idx >= 0) {\r\n cells[r][c].candidates.splice(idx, 1);\r\n cells[r][c].eliminationHistory.push({\r\n candidate: val,\r\n reason: 'naked_pair',\r\n source: [r1, c1],\r\n step,\r\n });\r\n eliminations++;\r\n details.push(\r\n `(${r},${c}) から ${val} を消去 [Naked Pair: (${r1},${c1})-(${r2},${c2})={${v1},${v2}} in ${group.label}]`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const record: PropagationStep = {\r\n step,\r\n eliminations,\r\n confirmations: 0,\r\n technique: eliminations > 0 ? 'naked_pair' : 'no_progress',\r\n details,\r\n };\r\n space.history.push(record);\r\n updateSpaceSigma(space);\r\n\r\n return record;\r\n}\r\n\r\n// --- 層2: バックトラッキング(最終手段) ---\r\n\r\n/**\r\n * バックトラッキングで解く(意志属性 = 選択戦略)\r\n * 候補が最も少ないセルから試行する(MRV戦略 = τの傾向性 'contract')\r\n */\r\nexport function solveWithBacktracking(space: PuzzleSpace): boolean {\r\n // まず制約伝播で進められるだけ進める\r\n let progress = true;\r\n while (progress) {\r\n const result = propagateStep(space);\r\n if (result.confirmations === 0 && result.eliminations === 0) {\r\n // Naked Pair も試す\r\n const pairResult = propagateNakedPair(space);\r\n if (pairResult.eliminations === 0) {\r\n progress = false;\r\n } else {\r\n progress = true;\r\n }\r\n }\r\n if (space.solved) return true;\r\n\r\n // 矛盾チェック: 候補が0のセルがあれば失敗\r\n for (let r = 0; r < space.size; r++) {\r\n for (let c = 0; c < space.size; c++) {\r\n if (space.cells[r][c].value === 0 && space.cells[r][c].candidates.length === 0) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (space.solved) return true;\r\n\r\n // MRV戦略: 候補が最も少ないセルを選ぶ(意志: contract)\r\n let minCands = Infinity;\r\n let targetCell: [number, number] | null = null;\r\n\r\n for (let r = 0; r < space.size; r++) {\r\n for (let c = 0; c < space.size; c++) {\r\n const cell = space.cells[r][c];\r\n if (cell.value === 0 && cell.candidates.length > 0 && cell.candidates.length < minCands) {\r\n minCands = cell.candidates.length;\r\n targetCell = [r, c];\r\n }\r\n }\r\n }\r\n\r\n if (!targetCell) return false;\r\n\r\n const [tr, tc] = targetCell;\r\n const candidates = [...space.cells[tr][tc].candidates];\r\n\r\n for (const val of candidates) {\r\n // スナップショットを保存\r\n const snapshot = snapshotSpace(space);\r\n\r\n // 仮定: val を入れてみる\r\n space.cells[tr][tc].value = val;\r\n space.cells[tr][tc].candidates = [];\r\n space.step++;\r\n space.history.push({\r\n step: space.step,\r\n eliminations: 0,\r\n confirmations: 1,\r\n technique: 'backtracking_guess',\r\n details: [`(${tr},${tc})=${val} [仮定: 候補${candidates.join(',')}から]`],\r\n });\r\n\r\n // 制約伝播を流す\r\n propagateFromConfirmation(space, tr, tc, val);\r\n updateSpaceSigma(space);\r\n\r\n // 再帰的に解く\r\n if (solveWithBacktracking(space)) {\r\n return true;\r\n }\r\n\r\n // 失敗 → ロールバック\r\n restoreSpace(space, snapshot);\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/** 確定値からの制約伝播 */\r\nfunction propagateFromConfirmation(space: PuzzleSpace, row: number, col: number, val: number): void {\r\n const { cells, constraints } = space;\r\n\r\n for (const group of constraints) {\r\n if (!group.cells.some(([gr, gc]) => gr === row && gc === col)) continue;\r\n for (const [gr, gc] of group.cells) {\r\n if (gr === row && gc === col) continue;\r\n if (cells[gr][gc].value > 0) continue;\r\n const idx = cells[gr][gc].candidates.indexOf(val);\r\n if (idx >= 0) {\r\n cells[gr][gc].candidates.splice(idx, 1);\r\n cells[gr][gc].eliminationHistory.push({\r\n candidate: val,\r\n reason: `${group.type}_propagation`,\r\n source: [row, col],\r\n step: space.step,\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\n// --- Snapshot / Restore (for backtracking) ---\r\n\r\ninterface SpaceSnapshot {\r\n cells: { value: number; candidates: number[]; histLen: number }[][];\r\n step: number;\r\n histLen: number;\r\n solved: boolean;\r\n}\r\n\r\nfunction snapshotSpace(space: PuzzleSpace): SpaceSnapshot {\r\n const { cells, size } = space;\r\n const snap: SpaceSnapshot = {\r\n cells: [],\r\n step: space.step,\r\n histLen: space.history.length,\r\n solved: space.solved,\r\n };\r\n for (let r = 0; r < size; r++) {\r\n snap.cells[r] = [];\r\n for (let c = 0; c < size; c++) {\r\n snap.cells[r][c] = {\r\n value: cells[r][c].value,\r\n candidates: [...cells[r][c].candidates],\r\n histLen: cells[r][c].eliminationHistory.length,\r\n };\r\n }\r\n }\r\n return snap;\r\n}\r\n\r\nfunction restoreSpace(space: PuzzleSpace, snap: SpaceSnapshot): void {\r\n const { cells, size } = space;\r\n for (let r = 0; r < size; r++) {\r\n for (let c = 0; c < size; c++) {\r\n cells[r][c].value = snap.cells[r][c].value;\r\n cells[r][c].candidates = [...snap.cells[r][c].candidates];\r\n cells[r][c].eliminationHistory = cells[r][c].eliminationHistory.slice(0, snap.cells[r][c].histLen);\r\n }\r\n }\r\n space.step = snap.step;\r\n space.history = space.history.slice(0, snap.histLen);\r\n space.solved = snap.solved;\r\n updateSpaceSigma(space);\r\n}\r\n\r\n// --- Solve (unified entry point) ---\r\n\r\n/**\r\n * パズルを解く — 統一的なエントリポイント\r\n * 層0(直接消去)→ 層1(高度手法)→ 層2(バックトラッキング)\r\n */\r\nexport function solvePuzzle(space: PuzzleSpace): PuzzleSpace {\r\n if (space.solved) return space;\r\n solveWithBacktracking(space);\r\n return space;\r\n}\r\n\r\n/**\r\n * 制約伝播のみで解く(バックトラッキングなし)\r\n * 「推論だけで解ける問題」かどうかの判定にも使える\r\n */\r\nexport function propagateOnly(space: PuzzleSpace, maxSteps: number = 100): PuzzleSpace {\r\n let steps = 0;\r\n while (steps < maxSteps && !space.solved) {\r\n const result = propagateStep(space);\r\n if (result.confirmations === 0 && result.eliminations === 0) {\r\n const pairResult = propagateNakedPair(space);\r\n if (pairResult.eliminations === 0) break;\r\n }\r\n steps++;\r\n }\r\n return space;\r\n}\r\n\r\n// --- Query Functions ---\r\n\r\n/** セルを𝕄形式で取得 */\r\nexport function cellAsMDim(space: PuzzleSpace, row: number, col: number): any {\r\n const cell = space.cells[row]?.[col];\r\n if (!cell) throw new Error(`セル(${row},${col})が見つかりません`);\r\n\r\n return {\r\n reiType: 'MDim',\r\n center: cell.value,\r\n neighbors: [...cell.candidates],\r\n mode: 'weighted',\r\n // パズル拡張情報\r\n __puzzle__: {\r\n row: cell.row,\r\n col: cell.col,\r\n fixed: cell.fixed,\r\n eliminationCount: cell.eliminationHistory.length,\r\n },\r\n };\r\n}\r\n\r\n/** グリッド全体を二次元配列で取得 */\r\nexport function getGrid(space: PuzzleSpace): number[][] {\r\n const grid: number[][] = [];\r\n for (let r = 0; r < space.size; r++) {\r\n grid[r] = [];\r\n for (let c = 0; c < space.size; c++) {\r\n grid[r][c] = space.cells[r][c].value;\r\n }\r\n }\r\n return grid;\r\n}\r\n\r\n/** 特定セルの候補を取得 */\r\nexport function getCandidates(space: PuzzleSpace, row: number, col: number): number[] {\r\n const cell = space.cells[row]?.[col];\r\n if (!cell) return [];\r\n if (cell.value > 0) return [];\r\n return [...cell.candidates];\r\n}\r\n\r\n/** パズルのσ(自己参照)を取得 */\r\nexport function getPuzzleSigma(space: PuzzleSpace): any {\r\n const { size, cells } = space;\r\n let totalCandidates = 0;\r\n let confirmedCells = 0;\r\n let minCandidates = Infinity;\r\n let maxCandidates = 0;\r\n\r\n for (let r = 0; r < size; r++) {\r\n for (let c = 0; c < size; c++) {\r\n if (cells[r][c].value > 0) {\r\n confirmedCells++;\r\n } else {\r\n const cLen = cells[r][c].candidates.length;\r\n totalCandidates += cLen;\r\n if (cLen < minCandidates) minCandidates = cLen;\r\n if (cLen > maxCandidates) maxCandidates = cLen;\r\n }\r\n }\r\n }\r\n\r\n const totalCells = size * size;\r\n const progress = confirmedCells / totalCells;\r\n\r\n return {\r\n reiType: 'SigmaResult',\r\n field: {\r\n puzzleType: space.puzzleType,\r\n size: space.size,\r\n totalCells,\r\n confirmedCells,\r\n remainingCells: totalCells - confirmedCells,\r\n totalCandidates,\r\n constraintGroups: space.constraints.length,\r\n },\r\n flow: {\r\n step: space.step,\r\n momentum: space.solved ? 'converged' : (progress > 0.5 ? 'contracting' : 'expanding'),\r\n progress,\r\n velocity: space.history.length > 0\r\n ? space.history[space.history.length - 1].confirmations\r\n : 0,\r\n },\r\n memory: space.history.map(h => ({\r\n step: h.step,\r\n technique: h.technique,\r\n eliminations: h.eliminations,\r\n confirmations: h.confirmations,\r\n })),\r\n layer: space.history.some(h => h.technique === 'backtracking_guess') ? 2\r\n : space.history.some(h => h.technique === 'naked_pair') ? 1\r\n : 0,\r\n will: {\r\n tendency: space.solved ? 'rest'\r\n : minCandidates <= 2 ? 'contract'\r\n : maxCandidates >= 7 ? 'expand'\r\n : 'spiral',\r\n strength: progress,\r\n minCandidates: minCandidates === Infinity ? 0 : minCandidates,\r\n maxCandidates,\r\n },\r\n relation: space.constraints.map(g => ({ type: g.type, label: g.label, cells: g.cells.length })),\r\n };\r\n}\r\n\r\n/** パズル空間を表示用文字列に変換(数独専用) */\r\nexport function formatSudoku(space: PuzzleSpace): string {\r\n const { cells, size } = space;\r\n const boxSize = Math.round(Math.sqrt(size));\r\n const lines: string[] = [];\r\n\r\n for (let r = 0; r < size; r++) {\r\n if (r > 0 && r % boxSize === 0) {\r\n lines.push('------+-------+------');\r\n }\r\n const row: string[] = [];\r\n for (let c = 0; c < size; c++) {\r\n if (c > 0 && c % boxSize === 0) row.push('|');\r\n const v = cells[r][c].value;\r\n row.push(v > 0 ? ` ${v}` : ' .');\r\n }\r\n lines.push(row.join(''));\r\n }\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/** 難易度を推定 */\r\nexport function estimateDifficulty(space: PuzzleSpace): any {\r\n const techniques = new Set(space.history.map(h => h.technique));\r\n const totalSteps = space.history.length;\r\n const backtrackUsed = techniques.has('backtracking_guess');\r\n const nakedPairUsed = techniques.has('naked_pair');\r\n\r\n let level: string;\r\n let score: number;\r\n\r\n if (backtrackUsed) {\r\n level = '極難';\r\n score = 5;\r\n } else if (nakedPairUsed) {\r\n level = '難';\r\n score = 4;\r\n } else if (totalSteps > 10) {\r\n level = '中';\r\n score = 3;\r\n } else if (totalSteps > 5) {\r\n level = '易';\r\n score = 2;\r\n } else {\r\n level = '入門';\r\n score = 1;\r\n }\r\n\r\n return {\r\n reiType: 'DifficultyResult',\r\n level,\r\n score,\r\n totalSteps,\r\n techniques: [...techniques],\r\n backtrackUsed,\r\n // D-FUMT層: 使用した推論の最大深度\r\n maxLayer: backtrackUsed ? 2 : nakedPairUsed ? 1 : 0,\r\n };\r\n}\r\n\r\n// --- Puzzle Generation (simple) ---\r\n\r\n/**\r\n * ランダムな数独問題を生成\r\n * @param clues ヒント数(17〜40)\r\n */\r\nexport function generateSudoku(clues: number = 30, seed?: number): number[][] {\r\n const grid: number[][] = Array.from({ length: 9 }, () => Array(9).fill(0));\r\n\r\n // ランダム関数(簡易シード対応)\r\n let s = seed ?? Date.now();\r\n function rand() {\r\n s = (s * 1103515245 + 12345) & 0x7fffffff;\r\n return s / 0x7fffffff;\r\n }\r\n\r\n function shuffle<T>(arr: T[]): T[] {\r\n for (let i = arr.length - 1; i > 0; i--) {\r\n const j = Math.floor(rand() * (i + 1));\r\n [arr[i], arr[j]] = [arr[j], arr[i]];\r\n }\r\n return arr;\r\n }\r\n\r\n // バックトラッキングで完全グリッドを生成\r\n function fillGrid(g: number[][]): boolean {\r\n for (let r = 0; r < 9; r++) {\r\n for (let c = 0; c < 9; c++) {\r\n if (g[r][c] !== 0) continue;\r\n const nums = shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9]);\r\n for (const n of nums) {\r\n if (isValid(g, r, c, n)) {\r\n g[r][c] = n;\r\n if (fillGrid(g)) return true;\r\n g[r][c] = 0;\r\n }\r\n }\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function isValid(g: number[][], r: number, c: number, n: number): boolean {\r\n for (let i = 0; i < 9; i++) {\r\n if (g[r][i] === n || g[i][c] === n) return false;\r\n }\r\n const br = Math.floor(r / 3) * 3;\r\n const bc = Math.floor(c / 3) * 3;\r\n for (let i = 0; i < 3; i++) {\r\n for (let j = 0; j < 3; j++) {\r\n if (g[br + i][bc + j] === n) return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n fillGrid(grid);\r\n\r\n // ヒント数になるまでランダムにセルを消す\r\n const positions = shuffle(\r\n Array.from({ length: 81 }, (_, i) => [Math.floor(i / 9), i % 9] as [number, number])\r\n );\r\n\r\n let removed = 0;\r\n const target = 81 - Math.max(17, Math.min(40, clues));\r\n\r\n for (const [r, c] of positions) {\r\n if (removed >= target) break;\r\n grid[r][c] = 0;\r\n removed++;\r\n }\r\n\r\n return grid;\r\n}\r\n\r\n// --- 一次元配列からグリッドを構築するヘルパー ---\r\n\r\n/**\r\n * フラット配列(81要素)を9×9グリッドに変換\r\n * \"530070000600195000098000060800060003400803001700020006060000280000419005000080079\"\r\n * のような文字列にも対応\r\n */\r\nexport function parseGrid(input: string | number[]): number[][] {\r\n let flat: number[];\r\n if (typeof input === 'string') {\r\n flat = input.replace(/[^0-9.]/g, '').split('').map(c => c === '.' ? 0 : parseInt(c, 10));\r\n } else {\r\n flat = input;\r\n }\r\n\r\n const size = Math.round(Math.sqrt(flat.length));\r\n const grid: number[][] = [];\r\n for (let r = 0; r < size; r++) {\r\n grid[r] = [];\r\n for (let c = 0; c < size; c++) {\r\n grid[r][c] = flat[r * size + c] ?? 0;\r\n }\r\n }\r\n return grid;\r\n}\r\n","// ============================================================\r\n// Rei v0.4 — Relation Engine (関係エンジン)\r\n// 6属性の第5属性「関係」の能動的実装\r\n//\r\n// Core Insight:\r\n// v0.3の関係は「観測するだけ」(findResonances)。\r\n// v0.4の関係は「計算を駆動する」(bind → propagate)。\r\n// 中心-周囲パターンの「周囲」を物理的近傍から解放し、\r\n// 任意の値同士が非局所的に結びつく。\r\n//\r\n// 仏教哲学との対応:\r\n// 縁起(えんぎ): すべての存在は互いに依存して成り立つ\r\n// 因縁(いんねん): 原因(因)と条件(縁)の連鎖\r\n// → bind = 縁を結ぶ、propagate = 因果の連鎖\r\n//\r\n// D-FUMT 6属性との統合:\r\n// 場 = 結合された値の空間\r\n// 流れ = 伝播の方向と速度\r\n// 記憶 = 結合の履歴(いつ結ばれ、何が伝播したか)\r\n// 層 = 結合のネットワーク深度\r\n// 関係 = ★この属性そのもの★\r\n// 意志 = 結合先との調和意志(will.tsと統合)\r\n//\r\n// Author: Nobuki Fujimoto / Claude (collaborative design)\r\n// ============================================================\r\n\r\n// --- Core Types ---\r\n\r\n/** 結合モード */\r\nexport type BindingMode =\r\n | 'mirror' // 鏡像: source変化 → targetも同じ値に\r\n | 'inverse' // 反転: source増加 → target減少\r\n | 'resonance' // 共鳴: 類似度閾値を超えた時のみ影響\r\n | 'entangle' // もつれ: 確率的な状態相関\r\n | 'causal'; // 因果: source→targetの一方向\r\n\r\n/** 伝播規則 */\r\nexport interface PropagationRule {\r\n type: 'immediate' | 'delayed' | 'attenuated';\r\n delay: number; // delayed: 何ステップ後に伝播\r\n attenuation: number; // attenuated: 減衰率 (0.0~1.0, 1.0=減衰なし)\r\n}\r\n\r\n/** 結合イベント — 記憶属性との統合 */\r\nexport interface BindingEvent {\r\n step: number;\r\n type: 'created' | 'propagated' | 'broken' | 'strengthened' | 'weakened';\r\n sourceValue: any;\r\n targetValue: any;\r\n delta: number;\r\n}\r\n\r\n/** 結合(Binding)— 2つの値の非局所的な関係 */\r\nexport interface ReiBinding {\r\n id: string;\r\n sourceRef: string;\r\n targetRef: string;\r\n mode: BindingMode;\r\n strength: number; // 0.0~1.0\r\n propagation: PropagationRule;\r\n bidirectional: boolean;\r\n active: boolean;\r\n history: BindingEvent[];\r\n createdAt: number; // ステップ番号\r\n}\r\n\r\n/** 結合の要約(σ.relation に含める用) */\r\nexport interface BindingSummary {\r\n id: string;\r\n target: string;\r\n mode: BindingMode;\r\n strength: number;\r\n active: boolean;\r\n propagationCount: number;\r\n}\r\n\r\n/** 結合結果 */\r\nexport interface BindResult {\r\n reiType: 'BindResult';\r\n binding: ReiBinding;\r\n source: any;\r\n target: any;\r\n}\r\n\r\n// --- Default Propagation ---\r\n\r\nconst DEFAULT_PROPAGATION: PropagationRule = {\r\n type: 'immediate',\r\n delay: 0,\r\n attenuation: 1.0,\r\n};\r\n\r\n// --- ID Generation ---\r\n\r\nlet _bindingIdCounter = 0;\r\n\r\nfunction generateBindingId(): string {\r\n return `bind_${++_bindingIdCounter}`;\r\n}\r\n\r\n/** テスト用: IDカウンターリセット */\r\nexport function resetBindingIds(): void {\r\n _bindingIdCounter = 0;\r\n}\r\n\r\n// --- BindingRegistry ---\r\n\r\n/**\r\n * 結合レジストリ — 全結合を管理し、伝播を実行する\r\n *\r\n * Evaluator内に1つのインスタンスを保持する。\r\n * 変数への代入(Environment.set)時に propagate() が呼ばれ、\r\n * 結合先に変更が自動的に伝播する。\r\n */\r\nexport class BindingRegistry {\r\n private bindings: Map<string, ReiBinding> = new Map();\r\n private refIndex: Map<string, Set<string>> = new Map(); // ref → binding IDs\r\n private globalStep: number = 0;\r\n private _propagating: boolean = false; // 循環伝播防止\r\n\r\n // --- 結合の作成 ---\r\n\r\n /**\r\n * 2つの変数参照を結合する\r\n *\r\n * @param sourceRef 結合元の変数名\r\n * @param targetRef 結合先の変数名\r\n * @param mode 結合モード\r\n * @param strength 結合の強さ (0.0~1.0)\r\n * @param bidirectional 双方向結合にするか\r\n * @param propagation 伝播規則\r\n * @returns 作成された結合\r\n */\r\n bind(\r\n sourceRef: string,\r\n targetRef: string,\r\n mode: BindingMode = 'mirror',\r\n strength: number = 1.0,\r\n bidirectional: boolean = false,\r\n propagation: PropagationRule = DEFAULT_PROPAGATION,\r\n ): ReiBinding {\r\n // 同じ参照への結合は禁止\r\n if (sourceRef === targetRef) {\r\n throw new Error(`自己結合はできません: ${sourceRef}`);\r\n }\r\n\r\n // 既存の同じペアの結合を検索\r\n const existingId = this.findBinding(sourceRef, targetRef);\r\n if (existingId) {\r\n // 既存結合を更新\r\n const existing = this.bindings.get(existingId)!;\r\n existing.mode = mode;\r\n existing.strength = Math.min(1.0, Math.max(0.0, strength));\r\n existing.bidirectional = bidirectional;\r\n existing.propagation = propagation;\r\n existing.active = true;\r\n existing.history.push({\r\n step: this.globalStep,\r\n type: 'strengthened',\r\n sourceValue: null,\r\n targetValue: null,\r\n delta: 0,\r\n });\r\n return existing;\r\n }\r\n\r\n // 新規結合を作成\r\n const binding: ReiBinding = {\r\n id: generateBindingId(),\r\n sourceRef,\r\n targetRef,\r\n mode,\r\n strength: Math.min(1.0, Math.max(0.0, strength)),\r\n propagation,\r\n bidirectional,\r\n active: true,\r\n history: [{\r\n step: this.globalStep,\r\n type: 'created',\r\n sourceValue: null,\r\n targetValue: null,\r\n delta: 0,\r\n }],\r\n createdAt: this.globalStep,\r\n };\r\n\r\n this.bindings.set(binding.id, binding);\r\n this.addToIndex(sourceRef, binding.id);\r\n if (bidirectional) {\r\n this.addToIndex(targetRef, binding.id);\r\n }\r\n\r\n return binding;\r\n }\r\n\r\n // --- 伝播 ---\r\n\r\n /**\r\n * 変数の値が変化したとき、結合先に変更を伝播する\r\n *\r\n * @param changedRef 変更された変数名\r\n * @param newValue 新しい値\r\n * @param getValue 変数の値を取得する関数\r\n * @param setValue 変数の値を設定する関数\r\n * @returns 伝播された結合の数\r\n */\r\n propagate(\r\n changedRef: string,\r\n newValue: any,\r\n getValue: (ref: string) => any,\r\n setValue: (ref: string, value: any) => void,\r\n ): number {\r\n // 循環伝播を防止\r\n if (this._propagating) return 0;\r\n\r\n const bindingIds = this.refIndex.get(changedRef);\r\n if (!bindingIds || bindingIds.size === 0) return 0;\r\n\r\n this._propagating = true;\r\n this.globalStep++;\r\n let propagatedCount = 0;\r\n\r\n try {\r\n for (const bindingId of bindingIds) {\r\n const binding = this.bindings.get(bindingId);\r\n if (!binding || !binding.active) continue;\r\n\r\n // 伝播方向の判定\r\n let isSource: boolean;\r\n let targetRef: string;\r\n\r\n if (binding.sourceRef === changedRef) {\r\n isSource = true;\r\n targetRef = binding.targetRef;\r\n } else if (binding.bidirectional && binding.targetRef === changedRef) {\r\n isSource = false;\r\n targetRef = binding.sourceRef;\r\n } else {\r\n continue;\r\n }\r\n\r\n // 遅延伝播のチェック\r\n if (binding.propagation.type === 'delayed') {\r\n // TODO: 遅延伝播キューの実装(Phase 2で実装)\r\n continue;\r\n }\r\n\r\n // 伝播値の計算\r\n const propagatedValue = this.computePropagatedValue(\r\n binding,\r\n newValue,\r\n getValue(targetRef),\r\n isSource,\r\n );\r\n\r\n if (propagatedValue === undefined) continue;\r\n\r\n // ターゲットに設定\r\n try {\r\n setValue(targetRef, propagatedValue);\r\n propagatedCount++;\r\n\r\n // 履歴に記録\r\n binding.history.push({\r\n step: this.globalStep,\r\n type: 'propagated',\r\n sourceValue: newValue,\r\n targetValue: propagatedValue,\r\n delta: toNumericSafe(propagatedValue) - toNumericSafe(getValue(targetRef)),\r\n });\r\n } catch {\r\n // ターゲットが不変(let)の場合は無視\r\n }\r\n }\r\n } finally {\r\n this._propagating = false;\r\n }\r\n\r\n return propagatedCount;\r\n }\r\n\r\n // --- 伝播値の計算 ---\r\n\r\n private computePropagatedValue(\r\n binding: ReiBinding,\r\n sourceValue: any,\r\n currentTargetValue: any,\r\n isSource: boolean,\r\n ): any {\r\n const { mode, strength, propagation } = binding;\r\n const attenuation = propagation.attenuation;\r\n\r\n switch (mode) {\r\n case 'mirror': {\r\n // 鏡像: sourceの値をそのままtargetに反映\r\n // strength < 1.0 の場合は線形補間\r\n if (strength >= 1.0 && attenuation >= 1.0) {\r\n return cloneValue(sourceValue);\r\n }\r\n // 部分的mirror: target = target + strength * attenuation * (source - target)\r\n const srcNum = toNumericSafe(sourceValue);\r\n const tgtNum = toNumericSafe(currentTargetValue);\r\n const factor = strength * attenuation;\r\n const newNum = tgtNum + factor * (srcNum - tgtNum);\r\n\r\n // MDimの場合は構造を保って数値を更新\r\n if (isMDimLike(currentTargetValue)) {\r\n return { ...currentTargetValue, center: newNum };\r\n }\r\n if (isMDimLike(sourceValue) && strength >= 1.0) {\r\n return cloneValue(sourceValue);\r\n }\r\n return newNum;\r\n }\r\n\r\n case 'inverse': {\r\n // 反転: sourceが増えた分だけtargetが減る\r\n const srcNum = toNumericSafe(sourceValue);\r\n const tgtNum = toNumericSafe(currentTargetValue);\r\n const delta = srcNum - tgtNum;\r\n const factor = strength * attenuation;\r\n const newNum = tgtNum - factor * delta;\r\n\r\n if (isMDimLike(currentTargetValue)) {\r\n return { ...currentTargetValue, center: newNum };\r\n }\r\n return newNum;\r\n }\r\n\r\n case 'resonance': {\r\n // 共鳴: 類似度が閾値(strength)を超えた場合のみ影響\r\n const similarity = computeSimilarity(sourceValue, currentTargetValue);\r\n if (similarity < strength) return undefined; // 閾値未満 → 伝播しない\r\n\r\n // 共鳴時: 値を近づける\r\n const srcNum = toNumericSafe(sourceValue);\r\n const tgtNum = toNumericSafe(currentTargetValue);\r\n const factor = similarity * attenuation;\r\n const newNum = tgtNum + factor * (srcNum - tgtNum) * 0.5;\r\n\r\n if (isMDimLike(currentTargetValue)) {\r\n return { ...currentTargetValue, center: newNum };\r\n }\r\n return newNum;\r\n }\r\n\r\n case 'causal': {\r\n // 因果: source→targetの一方向。双方向でない場合のみ有効\r\n if (!isSource) return undefined;\r\n\r\n const srcNum = toNumericSafe(sourceValue);\r\n const tgtNum = toNumericSafe(currentTargetValue);\r\n const factor = strength * attenuation;\r\n const newNum = tgtNum + factor * (srcNum - tgtNum);\r\n\r\n if (isMDimLike(currentTargetValue)) {\r\n return { ...currentTargetValue, center: newNum };\r\n }\r\n return newNum;\r\n }\r\n\r\n case 'entangle': {\r\n // もつれ: 確率的な相関(Phase 2で完全実装)\r\n // 現時点ではmirrorと同様だがstrengthを確率として使用\r\n if (Math.random() > strength) return undefined;\r\n return cloneValue(sourceValue);\r\n }\r\n\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n // --- 結合の解除 ---\r\n\r\n /**\r\n * 2つの変数間の結合を解除する\r\n */\r\n unbind(sourceRef: string, targetRef: string): boolean {\r\n const bindingId = this.findBinding(sourceRef, targetRef);\r\n if (!bindingId) return false;\r\n\r\n const binding = this.bindings.get(bindingId)!;\r\n binding.active = false;\r\n binding.history.push({\r\n step: this.globalStep,\r\n type: 'broken',\r\n sourceValue: null,\r\n targetValue: null,\r\n delta: 0,\r\n });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * 変数に関連する全結合を解除する\r\n */\r\n unbindAll(ref: string): number {\r\n const bindingIds = this.refIndex.get(ref);\r\n if (!bindingIds) return 0;\r\n\r\n let count = 0;\r\n for (const id of bindingIds) {\r\n const binding = this.bindings.get(id);\r\n if (binding && binding.active) {\r\n binding.active = false;\r\n binding.history.push({\r\n step: this.globalStep,\r\n type: 'broken',\r\n sourceValue: null,\r\n targetValue: null,\r\n delta: 0,\r\n });\r\n count++;\r\n }\r\n }\r\n return count;\r\n }\r\n\r\n // --- 照会 ---\r\n\r\n /**\r\n * 変数に関連する全結合の要約を返す\r\n */\r\n getBindingsFor(ref: string): BindingSummary[] {\r\n const bindingIds = this.refIndex.get(ref);\r\n if (!bindingIds) return [];\r\n\r\n const summaries: BindingSummary[] = [];\r\n for (const id of bindingIds) {\r\n const binding = this.bindings.get(id);\r\n if (!binding) continue;\r\n\r\n const isSource = binding.sourceRef === ref;\r\n summaries.push({\r\n id: binding.id,\r\n target: isSource ? binding.targetRef : binding.sourceRef,\r\n mode: binding.mode,\r\n strength: binding.strength,\r\n active: binding.active,\r\n propagationCount: binding.history.filter(h => h.type === 'propagated').length,\r\n });\r\n }\r\n return summaries;\r\n }\r\n\r\n /**\r\n * 全結合を返す\r\n */\r\n getAllBindings(): ReiBinding[] {\r\n return Array.from(this.bindings.values());\r\n }\r\n\r\n /**\r\n * アクティブな結合の数を返す\r\n */\r\n get activeCount(): number {\r\n let count = 0;\r\n for (const binding of this.bindings.values()) {\r\n if (binding.active) count++;\r\n }\r\n return count;\r\n }\r\n\r\n /**\r\n * レジストリをリセットする\r\n */\r\n reset(): void {\r\n this.bindings.clear();\r\n this.refIndex.clear();\r\n this.globalStep = 0;\r\n this._propagating = false;\r\n }\r\n\r\n // --- σ統合 ---\r\n\r\n /**\r\n * 変数のσ.relation情報を構築する\r\n */\r\n buildRelationSigma(ref: string): any[] {\r\n return this.getBindingsFor(ref).map(b => ({\r\n target: b.target,\r\n mode: b.mode,\r\n strength: b.strength,\r\n active: b.active,\r\n propagations: b.propagationCount,\r\n }));\r\n }\r\n\r\n // --- Private helpers ---\r\n\r\n private findBinding(ref1: string, ref2: string): string | undefined {\r\n const ids1 = this.refIndex.get(ref1);\r\n if (!ids1) return undefined;\r\n\r\n for (const id of ids1) {\r\n const binding = this.bindings.get(id);\r\n if (!binding) continue;\r\n if (\r\n (binding.sourceRef === ref1 && binding.targetRef === ref2) ||\r\n (binding.sourceRef === ref2 && binding.targetRef === ref1)\r\n ) {\r\n return id;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private addToIndex(ref: string, bindingId: string): void {\r\n if (!this.refIndex.has(ref)) {\r\n this.refIndex.set(ref, new Set());\r\n }\r\n this.refIndex.get(ref)!.add(bindingId);\r\n }\r\n}\r\n\r\n// --- Utility Functions ---\r\n\r\n/** 値を安全に数値に変換 */\r\nfunction toNumericSafe(v: any): number {\r\n if (typeof v === 'number') return v;\r\n if (v === null || v === undefined) return 0;\r\n if (typeof v === 'boolean') return v ? 1 : 0;\r\n if (v?.reiType === 'ReiVal') return toNumericSafe(v.value);\r\n if (v?.reiType === 'MDim') {\r\n const { center, neighbors } = v;\r\n if (!neighbors || neighbors.length === 0) return center;\r\n const wAvg = neighbors.reduce((s: number, n: number) => s + n, 0) / neighbors.length;\r\n return center + wAvg;\r\n }\r\n if (v?.reiType === 'Ext') return v.valStar?.() ?? 0;\r\n return 0;\r\n}\r\n\r\n/** MDim型かどうか判定 */\r\nfunction isMDimLike(v: any): boolean {\r\n return v !== null && typeof v === 'object' && v.reiType === 'MDim';\r\n}\r\n\r\n/** 値を深くクローン(循環参照に注意) */\r\nfunction cloneValue(v: any): any {\r\n if (v === null || v === undefined) return v;\r\n if (typeof v !== 'object') return v;\r\n if (Array.isArray(v)) return v.map(cloneValue);\r\n if (v.reiType === 'MDim') {\r\n return {\r\n reiType: 'MDim',\r\n center: v.center,\r\n neighbors: [...(v.neighbors || [])],\r\n mode: v.mode || 'weighted',\r\n weights: v.weights ? [...v.weights] : undefined,\r\n };\r\n }\r\n // その他のオブジェクトは浅いクローン\r\n return { ...v };\r\n}\r\n\r\n/** 2つの値の類似度を計算 (0.0~1.0) */\r\nfunction computeSimilarity(a: any, b: any): number {\r\n const numA = toNumericSafe(a);\r\n const numB = toNumericSafe(b);\r\n\r\n // 数値の近さ\r\n const diff = Math.abs(numA - numB);\r\n const valueSim = 1 / (1 + diff);\r\n\r\n // MDim同士の場合は構造的類似度も考慮\r\n if (isMDimLike(a) && isMDimLike(b)) {\r\n const dimDiff = Math.abs((a.neighbors?.length || 0) - (b.neighbors?.length || 0));\r\n const dimSim = 1 / (1 + dimDiff);\r\n return (valueSim + dimSim) / 2;\r\n }\r\n\r\n return valueSim;\r\n}\r\n\r\n/** 類似度の外部公開版 */\r\nexport function getBindingSimilarity(a: any, b: any): number {\r\n return computeSimilarity(a, b);\r\n}\r\n","// ============================================================\r\n// Rei v0.4 — Will Engine (意志エンジン)\r\n// 6属性の第6属性「意志」の能動的実装\r\n//\r\n// Core Insight:\r\n// v0.3の意志は「傾向を観測するだけ」(getSigmaWill)。\r\n// v0.4の意志は「計算方向を自分で選ぶ」(intend → will_compute)。\r\n//\r\n// evolve(柱①): 「過去の来歴から最適モードを選ぶ」— 後ろ向き\r\n// will_compute: 「未来の目標から最適モードを選ぶ」— 前向き\r\n//\r\n// 仏教哲学との対応:\r\n// 業(カルマ): 行為の蓄積が未来の傾向を形成する\r\n// 願(がん): 菩薩が衆生を救うという誓願\r\n// → intend = 願を立てる、will_compute = 願に基づく行動選択\r\n//\r\n// D-FUMT 6属性との統合:\r\n// 場 = 意志の対象(値そのもの)\r\n// 流れ = 目標への接近・離反の方向\r\n// 記憶 = 意志に基づく選択の全履歴\r\n// 層 = 意志の深度(表層の意志 vs 深層の意志)\r\n// 関係 = 結合先との調和意志(relation.tsと統合)\r\n// 意志 = ★この属性そのもの★\r\n//\r\n// Author: Nobuki Fujimoto / Claude (collaborative design)\r\n// ============================================================\r\n\r\n// --- Core Types ---\r\n\r\n/** 意志の種類 */\r\nexport type IntentionType =\r\n | 'seek' // 目標値に近づく(接近)\r\n | 'avoid' // 特定値から離れる(回避)\r\n | 'stabilize' // 変動を最小化する(安定)\r\n | 'explore' // 未知の領域に向かう(探索)\r\n | 'harmonize' // 結合先と調和する(調和 — relation.tsと統合)\r\n | 'maximize' // 値を最大化する\r\n | 'minimize'; // 値を最小化する\r\n\r\n/** 意志イベント — 記憶属性との統合 */\r\nexport interface IntentionEvent {\r\n step: number;\r\n type: 'set' | 'adjusted' | 'satisfied' | 'frustrated' | 'abandoned';\r\n chosenMode: string;\r\n reason: string;\r\n satisfaction: number;\r\n value: number;\r\n}\r\n\r\n/** 意志(Intention)— 値に内在する目標指向性 */\r\nexport interface ReiIntention {\r\n type: IntentionType;\r\n target?: number; // 目標値(seek/avoid の場合)\r\n priority: number; // 優先度 (0.0~1.0)\r\n patience: number; // 忍耐度(最大ステップ数)\r\n satisfaction: number; // 満足度 (0.0~1.0)\r\n currentStep: number; // 現在のステップ\r\n history: IntentionEvent[]; // 意志に基づく選択の全履歴\r\n active: boolean; // 有効か\r\n}\r\n\r\n/** 意志計算の結果 */\r\nexport interface WillComputeResult {\r\n reiType: 'WillComputeResult';\r\n value: any; // 計算結果の値\r\n numericValue: number; // 数値化した結果\r\n chosenMode: string; // 選ばれた計算モード\r\n reason: string; // 選択理由\r\n satisfaction: number; // 目標への満足度 (0.0~1.0)\r\n allCandidates: { mode: string; value: number; score: number }[];\r\n intention: ReiIntention; // 使用された意志\r\n}\r\n\r\n/** 意志のσ情報 */\r\nexport interface WillSigma {\r\n type: IntentionType;\r\n target: number | null;\r\n satisfaction: number;\r\n active: boolean;\r\n step: number;\r\n totalChoices: number;\r\n dominantMode: string | null;\r\n history: IntentionEvent[];\r\n}\r\n\r\n// --- Constants ---\r\n\r\n/** 利用可能な全計算モード */\r\nconst WILL_COMPUTE_MODES = [\r\n \"weighted\", \"multiplicative\", \"harmonic\", \"exponential\",\r\n \"geometric\", \"median\", \"minkowski\", \"entropy\",\r\n] as const;\r\n\r\n/** 満足度の閾値 */\r\nconst SATISFACTION_THRESHOLD = 0.95;\r\n\r\n// --- Intention Factory ---\r\n\r\n/**\r\n * 意志を生成する\r\n *\r\n * @param type 意志の種類\r\n * @param target 目標値(seekの場合必須)\r\n * @param patience 忍耐度(デフォルト50ステップ)\r\n * @param priority 優先度(デフォルト1.0)\r\n * @returns 新しい意志オブジェクト\r\n */\r\nexport function createIntention(\r\n type: IntentionType,\r\n target?: number,\r\n patience: number = 50,\r\n priority: number = 1.0,\r\n): ReiIntention {\r\n return {\r\n type,\r\n target,\r\n priority: Math.min(1.0, Math.max(0.0, priority)),\r\n patience,\r\n satisfaction: 0,\r\n currentStep: 0,\r\n history: [],\r\n active: true,\r\n };\r\n}\r\n\r\n// --- Will Compute ---\r\n\r\n/**\r\n * 意志駆動の計算 — 意志の目標に基づいて最適な計算モードを選択する\r\n *\r\n * evolve(柱①)との違い:\r\n * evolve: σの来歴(過去)から最適モードを選ぶ\r\n * willCompute: intentionの目標(未来)から最適モードを選ぶ\r\n *\r\n * @param md 計算対象の𝕄値\r\n * @param intention 意志オブジェクト\r\n * @param context 追加コンテキスト(結合先の値など)\r\n * @returns WillComputeResult\r\n */\r\nexport function willCompute(\r\n md: any,\r\n intention: ReiIntention,\r\n context?: { harmonizeTarget?: number },\r\n): WillComputeResult {\r\n if (!intention.active) {\r\n throw new Error('意志が無効です(satisfied または abandoned)');\r\n }\r\n\r\n // 全モードで計算\r\n const candidates = WILL_COMPUTE_MODES.map(mode => ({\r\n mode,\r\n value: willComputeMDim(md, mode),\r\n score: 0,\r\n }));\r\n\r\n // 意志に基づいてスコアリング\r\n switch (intention.type) {\r\n case 'seek':\r\n scoreSeeking(candidates, intention.target ?? 0);\r\n break;\r\n case 'avoid':\r\n scoreAvoiding(candidates, intention.target ?? 0);\r\n break;\r\n case 'stabilize':\r\n scoreStabilizing(candidates, md);\r\n break;\r\n case 'explore':\r\n scoreExploring(candidates, intention.history);\r\n break;\r\n case 'harmonize':\r\n scoreHarmonizing(candidates, context?.harmonizeTarget ?? 0);\r\n break;\r\n case 'maximize':\r\n scoreMaximizing(candidates);\r\n break;\r\n case 'minimize':\r\n scoreMinimizing(candidates);\r\n break;\r\n }\r\n\r\n // 最高スコアのモードを選択\r\n candidates.sort((a, b) => b.score - a.score);\r\n const chosen = candidates[0];\r\n\r\n // 満足度の計算\r\n const satisfaction = computeSatisfaction(intention, chosen.value);\r\n\r\n // 意志の状態を更新\r\n intention.currentStep++;\r\n intention.satisfaction = satisfaction;\r\n\r\n // 意志イベントの決定\r\n let eventType: IntentionEvent['type'] = 'adjusted';\r\n let reason = `${chosen.mode}が最高スコア(${chosen.score.toFixed(3)})`;\r\n\r\n if (satisfaction >= SATISFACTION_THRESHOLD) {\r\n eventType = 'satisfied';\r\n intention.active = false;\r\n reason = `目標達成 — 満足度${(satisfaction * 100).toFixed(1)}%`;\r\n } else if (intention.currentStep >= intention.patience) {\r\n eventType = 'frustrated';\r\n intention.active = false;\r\n reason = `忍耐限界到達(${intention.patience}ステップ)`;\r\n }\r\n\r\n // 履歴に記録\r\n intention.history.push({\r\n step: intention.currentStep,\r\n type: eventType,\r\n chosenMode: chosen.mode,\r\n reason,\r\n satisfaction,\r\n value: chosen.value,\r\n });\r\n\r\n // 結果のMDimを構築\r\n const resultMd = {\r\n reiType: 'MDim' as const,\r\n center: chosen.value,\r\n neighbors: md.neighbors ? [...md.neighbors] : [],\r\n mode: chosen.mode,\r\n weights: md.weights ? [...md.weights] : undefined,\r\n __intention__: intention,\r\n };\r\n\r\n return {\r\n reiType: 'WillComputeResult',\r\n value: resultMd,\r\n numericValue: chosen.value,\r\n chosenMode: chosen.mode,\r\n reason,\r\n satisfaction,\r\n allCandidates: candidates,\r\n intention,\r\n };\r\n}\r\n\r\n/**\r\n * 意志付き反復計算 — will_compute を繰り返し、満足または限界まで続ける\r\n *\r\n * think(柱④) + intend の統合版\r\n *\r\n * @param md 初期値\r\n * @param intention 意志\r\n * @param maxSteps 最大ステップ数(デフォルト: intention.patience)\r\n * @returns 全ステップの結果\r\n */\r\nexport function willIterate(\r\n md: any,\r\n intention: ReiIntention,\r\n maxSteps?: number,\r\n): WillComputeResult[] {\r\n const max = maxSteps ?? intention.patience;\r\n const results: WillComputeResult[] = [];\r\n let current = ensureMDimForWill(md);\r\n\r\n for (let i = 0; i < max; i++) {\r\n if (!intention.active) break;\r\n\r\n const result = willCompute(current, intention);\r\n results.push(result);\r\n\r\n // 次のステップの入力を準備\r\n current = ensureMDimForWill(result.value);\r\n\r\n if (!intention.active) break;\r\n }\r\n\r\n return results;\r\n}\r\n\r\n// --- Scoring Functions ---\r\n\r\n/** seek: 目標値に最も近いモードに高スコア */\r\nfunction scoreSeeking(candidates: { mode: string; value: number; score: number }[], target: number): void {\r\n const distances = candidates.map(c => Math.abs(c.value - target));\r\n const maxDist = Math.max(...distances, 1);\r\n\r\n for (let i = 0; i < candidates.length; i++) {\r\n // 距離が近いほどスコアが高い(0~1に正規化)\r\n candidates[i].score = 1 - (distances[i] / maxDist);\r\n }\r\n}\r\n\r\n/** avoid: 目標値から最も遠いモードに高スコア */\r\nfunction scoreAvoiding(candidates: { mode: string; value: number; score: number }[], target: number): void {\r\n const distances = candidates.map(c => Math.abs(c.value - target));\r\n const maxDist = Math.max(...distances, 1);\r\n\r\n for (let i = 0; i < candidates.length; i++) {\r\n candidates[i].score = distances[i] / maxDist;\r\n }\r\n}\r\n\r\n/** stabilize: 現在の中心値に最も近いモードに高スコア */\r\nfunction scoreStabilizing(candidates: { mode: string; value: number; score: number }[], md: any): void {\r\n const center = md.center ?? 0;\r\n const distances = candidates.map(c => Math.abs(c.value - center));\r\n const maxDist = Math.max(...distances, 1);\r\n\r\n for (let i = 0; i < candidates.length; i++) {\r\n candidates[i].score = 1 - (distances[i] / maxDist);\r\n }\r\n}\r\n\r\n/** explore: 過去に使われていないモードに高スコア */\r\nfunction scoreExploring(\r\n candidates: { mode: string; value: number; score: number }[],\r\n history: IntentionEvent[],\r\n): void {\r\n // 各モードの使用回数をカウント\r\n const usageCounts: Record<string, number> = {};\r\n for (const event of history) {\r\n usageCounts[event.chosenMode] = (usageCounts[event.chosenMode] ?? 0) + 1;\r\n }\r\n\r\n const maxUsage = Math.max(...Object.values(usageCounts), 1);\r\n\r\n for (const candidate of candidates) {\r\n const usage = usageCounts[candidate.mode] ?? 0;\r\n // 使用回数が少ないほどスコアが高い\r\n candidate.score = 1 - (usage / (maxUsage + 1));\r\n // さらに、結果の多様性にボーナス\r\n const mean = candidates.reduce((s, c) => s + c.value, 0) / candidates.length;\r\n candidate.score += Math.abs(candidate.value - mean) * 0.1;\r\n }\r\n}\r\n\r\n/** harmonize: 調和先の値に最も近いモードに高スコア */\r\nfunction scoreHarmonizing(candidates: { mode: string; value: number; score: number }[], harmonizeTarget: number): void {\r\n // seekと同じロジック(調和先 = 目標値)\r\n scoreSeeking(candidates, harmonizeTarget);\r\n}\r\n\r\n/** maximize: 最大値を出すモードに高スコア */\r\nfunction scoreMaximizing(candidates: { mode: string; value: number; score: number }[]): void {\r\n const values = candidates.map(c => c.value);\r\n const minVal = Math.min(...values);\r\n const maxVal = Math.max(...values);\r\n const range = maxVal - minVal || 1;\r\n\r\n for (const candidate of candidates) {\r\n candidate.score = (candidate.value - minVal) / range;\r\n }\r\n}\r\n\r\n/** minimize: 最小値を出すモードに高スコア */\r\nfunction scoreMinimizing(candidates: { mode: string; value: number; score: number }[]): void {\r\n const values = candidates.map(c => c.value);\r\n const minVal = Math.min(...values);\r\n const maxVal = Math.max(...values);\r\n const range = maxVal - minVal || 1;\r\n\r\n for (const candidate of candidates) {\r\n candidate.score = (maxVal - candidate.value) / range;\r\n }\r\n}\r\n\r\n// --- Satisfaction Computation ---\r\n\r\n/** 満足度を計算 (0.0~1.0) */\r\nfunction computeSatisfaction(intention: ReiIntention, currentValue: number): number {\r\n switch (intention.type) {\r\n case 'seek': {\r\n if (intention.target === undefined) return 0;\r\n const distance = Math.abs(currentValue - intention.target);\r\n // 距離0 → 満足度1.0、距離増加 → 満足度低下\r\n return 1 / (1 + distance);\r\n }\r\n case 'avoid': {\r\n if (intention.target === undefined) return 0;\r\n const distance = Math.abs(currentValue - intention.target);\r\n // 距離が大きいほど満足\r\n return Math.min(distance / (Math.abs(intention.target) + 1), 1.0);\r\n }\r\n case 'stabilize': {\r\n // 過去の変化量に基づく\r\n if (intention.history.length < 2) return 0.5;\r\n const recent = intention.history.slice(-3);\r\n const deltas = recent.map((h, i) =>\r\n i > 0 ? Math.abs(h.value - recent[i - 1].value) : 0\r\n );\r\n const avgDelta = deltas.reduce((s, d) => s + d, 0) / deltas.length;\r\n return 1 / (1 + avgDelta * 10);\r\n }\r\n case 'explore': {\r\n // 使ったモードの多様性に基づく\r\n const uniqueModes = new Set(intention.history.map(h => h.chosenMode));\r\n return Math.min(uniqueModes.size / WILL_COMPUTE_MODES.length, 1.0);\r\n }\r\n case 'harmonize': {\r\n // seekと同じロジック(目標値 = 調和先の値)\r\n if (intention.target === undefined) return 0.5;\r\n const distance = Math.abs(currentValue - intention.target);\r\n return 1 / (1 + distance);\r\n }\r\n case 'maximize': {\r\n // 正規化なしでは判定困難 → 過去の最大値との比較\r\n if (intention.history.length === 0) return 0;\r\n const maxSoFar = Math.max(...intention.history.map(h => h.value));\r\n return currentValue >= maxSoFar ? 1.0 : currentValue / (maxSoFar || 1);\r\n }\r\n case 'minimize': {\r\n if (intention.history.length === 0) return 0;\r\n const minSoFar = Math.min(...intention.history.map(h => h.value));\r\n return currentValue <= minSoFar ? 1.0 : minSoFar / (currentValue || 1);\r\n }\r\n default:\r\n return 0;\r\n }\r\n}\r\n\r\n// --- σ統合 ---\r\n\r\n/**\r\n * 意志のσ情報を構築する\r\n */\r\nexport function buildWillSigma(intention: ReiIntention | undefined): WillSigma {\r\n if (!intention) {\r\n return {\r\n type: 'seek',\r\n target: null,\r\n satisfaction: 0,\r\n active: false,\r\n step: 0,\r\n totalChoices: 0,\r\n dominantMode: null,\r\n history: [],\r\n };\r\n }\r\n\r\n // 最も多く選ばれたモード\r\n const modeCounts: Record<string, number> = {};\r\n for (const event of intention.history) {\r\n modeCounts[event.chosenMode] = (modeCounts[event.chosenMode] ?? 0) + 1;\r\n }\r\n let dominantMode: string | null = null;\r\n let maxCount = 0;\r\n for (const [mode, count] of Object.entries(modeCounts)) {\r\n if (count > maxCount) {\r\n dominantMode = mode;\r\n maxCount = count;\r\n }\r\n }\r\n\r\n return {\r\n type: intention.type,\r\n target: intention.target ?? null,\r\n satisfaction: intention.satisfaction,\r\n active: intention.active,\r\n step: intention.currentStep,\r\n totalChoices: intention.history.length,\r\n dominantMode,\r\n history: intention.history,\r\n };\r\n}\r\n\r\n/**\r\n * 値から意志情報を取得する\r\n */\r\nexport function getIntentionOf(v: any): ReiIntention | undefined {\r\n if (v === null || typeof v !== 'object') return undefined;\r\n if (v.reiType === 'ReiVal') return getIntentionOf(v.value);\r\n return v.__intention__;\r\n}\r\n\r\n/**\r\n * 値に意志を付与する\r\n */\r\nexport function attachIntention(v: any, intention: ReiIntention): any {\r\n if (v === null || typeof v !== 'object') {\r\n // プリミティブ → MDimにラップ\r\n return {\r\n reiType: 'MDim',\r\n center: typeof v === 'number' ? v : 0,\r\n neighbors: [],\r\n mode: 'weighted',\r\n __intention__: intention,\r\n };\r\n }\r\n v.__intention__ = intention;\r\n return v;\r\n}\r\n\r\n// --- MDim Computation (evaluatorから独立) ---\r\n\r\nfunction willComputeMDim(md: any, mode: string): number {\r\n const center = md.center ?? 0;\r\n const neighbors = md.neighbors ?? [];\r\n const weights = md.weights ?? neighbors.map(() => 1);\r\n const n = neighbors.length;\r\n if (n === 0) return center;\r\n\r\n switch (mode) {\r\n case \"weighted\": {\r\n const wSum = weights.reduce((a: number, b: number) => a + b, 0);\r\n const wAvg = neighbors.reduce((sum: number, v: number, i: number) =>\r\n sum + (weights[i] ?? 1) * v, 0) / (wSum || 1);\r\n return center + wAvg;\r\n }\r\n case \"multiplicative\": {\r\n const prod = neighbors.reduce((p: number, v: number) => p * (1 + v), 1);\r\n return center * prod;\r\n }\r\n case \"harmonic\": {\r\n const harmSum = neighbors.reduce((s: number, v: number) =>\r\n s + 1 / (Math.abs(v) || 1), 0);\r\n return center + n / harmSum;\r\n }\r\n case \"exponential\": {\r\n const expSum = neighbors.reduce((s: number, v: number) => s + Math.exp(v), 0);\r\n return center * (expSum / n);\r\n }\r\n case \"geometric\": {\r\n const prod = neighbors.reduce((p: number, v: number) => p * Math.abs(v || 1), 1);\r\n return center * Math.pow(prod, 1 / n);\r\n }\r\n case \"median\": {\r\n const sorted = [...neighbors].sort((a: number, b: number) => a - b);\r\n const mid = Math.floor(n / 2);\r\n const med = n % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];\r\n return center + med;\r\n }\r\n case \"minkowski\": {\r\n const p = 2;\r\n const sumP = neighbors.reduce((s: number, v: number) =>\r\n s + Math.pow(Math.abs(v), p), 0);\r\n return center + Math.pow(sumP / n, 1 / p);\r\n }\r\n case \"entropy\": {\r\n const total = neighbors.reduce((s: number, v: number) => s + Math.abs(v), 0) || 1;\r\n const probs = neighbors.map((v: number) => Math.abs(v) / total);\r\n const H = -probs.reduce((s: number, p: number) =>\r\n s + (p > 0 ? p * Math.log2(p) : 0), 0);\r\n return center * (1 + H);\r\n }\r\n default:\r\n return center;\r\n }\r\n}\r\n\r\n/** 値を𝕄に正規化 */\r\nfunction ensureMDimForWill(v: any): any {\r\n if (v?.reiType === 'ReiVal') return ensureMDimForWill(v.value);\r\n if (v?.reiType === 'MDim') return v;\r\n if (typeof v === 'number') {\r\n return { reiType: 'MDim', center: v, neighbors: [], mode: 'weighted' };\r\n }\r\n if (Array.isArray(v)) {\r\n if (v.length === 0) return { reiType: 'MDim', center: 0, neighbors: [], mode: 'weighted' };\r\n return { reiType: 'MDim', center: v[0], neighbors: v.slice(1), mode: 'weighted' };\r\n }\r\n return { reiType: 'MDim', center: 0, neighbors: [], mode: 'weighted' };\r\n}\r\n","/**\n * D-FUMT Theory #67\n * ==================\n * Dimensional Fujimoto Universal Mathematical Theory\n * Author: Nobuki Fujimoto (藤本 伸樹)\n *\n * #67 — 超巨大ファイル圧縮理論 (RCT: Rei Compression Theory)\n *\n * 従来の圧縮: データ → 短いデータ\n * RCT: データ → 生成パラメータ(公理)\n *\n * 核心公式:\n * x = G(θ)\n * K_Rei(x) = min{ |θ| : G_Rei(θ) = x }\n *\n * 「データを保存するのではなく、データを生成する公理を保存する」\n *\n * ChatGPT先生との対話から生まれた理論を、\n * Claude先生がD-FUMTの第67理論として実装\n */\n\n// ============================================================\n// 第1部: 数学的基盤 — 可逆圧縮と情報理論\n// ============================================================\n\n/**\n * 可逆圧縮の公理的定義:\n *\n * E : {0,1}* → {0,1}* (符号化)\n * D : {0,1}* → {0,1}* (復号)\n * D(E(x)) = x (∀x) (可逆性条件)\n */\n\nexport interface LosslessCodec {\n name: string;\n encode: (data: number[]) => number[];\n decode: (encoded: number[]) => number[];\n}\n\n/**\n * 可逆性検証:\n * D(E(x)) === x が成立するか確認\n */\nexport function verifyLossless(codec: LosslessCodec, data: number[]): {\n lossless: boolean;\n originalSize: number;\n compressedSize: number;\n compressionRatio: number;\n roundTripMatch: boolean;\n} {\n const encoded = codec.encode(data);\n const decoded = codec.decode(encoded);\n\n const roundTripMatch = data.length === decoded.length &&\n data.every((v, i) => v === decoded[i]);\n\n return {\n lossless: roundTripMatch,\n originalSize: data.length,\n compressedSize: encoded.length,\n compressionRatio: encoded.length / data.length,\n roundTripMatch,\n };\n}\n\n/**\n * 鳩の巣原理の実証:\n * 長さ n のビット列 2^n 個に対し、\n * 長さ < n のビット列は 2^n - 1 個しかない\n * → 必ず衝突が発生し、万能圧縮は不可能\n */\nexport function pigeonholePrinciple(n: number): {\n inputCount: number; // 入力パターン数 (2^n)\n outputCount: number; // 短い出力パターン数 (2^n - 1)\n collisionGuaranteed: boolean;\n minimumCollisions: number;\n} {\n const safeN = Math.min(n, 30); // オーバーフロー防止\n const inputCount = Math.pow(2, safeN);\n const outputCount = Math.pow(2, safeN) - 1;\n\n return {\n inputCount,\n outputCount,\n collisionGuaranteed: inputCount > outputCount,\n minimumCollisions: inputCount - outputCount,\n };\n}\n\n\n// ============================================================\n// 第2部: Kolmogorov複雑性 — 圧縮可能性の理論的限界\n// ============================================================\n\n/**\n * Kolmogorov複雑性:\n * K(x) = min{ |p| : U(p) = x }\n *\n * U: 万能チューリング機械\n * p: x を生成する最短プログラム\n *\n * 注意: K(x) は一般には計算不可能\n * ここでは近似値を計算する\n */\n\nexport interface KolmogorovEstimate {\n dataLength: number; // |x|\n estimatedComplexity: number; // K̃(x) の近似値\n compressibility: number; // 圧縮可能度 (0=不可, 1=高度に可能)\n classification: 'random' | 'structured' | 'highly_structured' | 'trivial';\n shortestGenerator: string; // 最短生成記述(見つかった場合)\n}\n\n/**\n * Kolmogorov複雑性の近似推定:\n * 複数の圧縮手法を試し、最短の結果を K̃(x) とする\n */\nexport function estimateKolmogorov(data: number[]): KolmogorovEstimate {\n const n = data.length;\n if (n === 0) {\n return {\n dataLength: 0, estimatedComplexity: 0, compressibility: 1,\n classification: 'trivial', shortestGenerator: 'empty',\n };\n }\n\n // 複数の圧縮戦略を試す\n const strategies = [\n { name: 'raw', length: n, desc: `raw(${n})` },\n tryRunLengthEncoding(data),\n tryPatternDetection(data),\n tryConstantDetection(data),\n tryArithmeticSequence(data),\n tryPeriodicDetection(data),\n ];\n\n // 最短の戦略を選択\n const best = strategies.reduce((a, b) => a.length < b.length ? a : b);\n\n const ratio = best.length / n;\n let classification: KolmogorovEstimate['classification'];\n if (ratio > 0.9) classification = 'random';\n else if (ratio > 0.5) classification = 'structured';\n else if (ratio > 0.1) classification = 'highly_structured';\n else classification = 'trivial';\n\n return {\n dataLength: n,\n estimatedComplexity: best.length,\n compressibility: 1 - ratio,\n classification,\n shortestGenerator: best.desc,\n };\n}\n\nfunction tryRunLengthEncoding(data: number[]): { name: string; length: number; desc: string } {\n // 連長圧縮: 連続する同一値を (値, 回数) に変換\n let runs = 0;\n let i = 0;\n while (i < data.length) {\n const v = data[i];\n let count = 0;\n while (i < data.length && data[i] === v) { count++; i++; }\n runs++;\n }\n return { name: 'rle', length: runs * 2, desc: `rle(${runs} runs)` };\n}\n\nfunction tryConstantDetection(data: number[]): { name: string; length: number; desc: string } {\n // 全要素が同一か\n const allSame = data.every(v => v === data[0]);\n if (allSame) {\n return { name: 'const', length: 2, desc: `const(${data[0]}, ${data.length})` };\n }\n return { name: 'const', length: data.length, desc: 'const(fail)' };\n}\n\nfunction tryArithmeticSequence(data: number[]): { name: string; length: number; desc: string } {\n // 等差数列か\n if (data.length < 2) return { name: 'arith', length: data.length, desc: 'arith(too_short)' };\n\n const diff = data[1] - data[0];\n const isArithmetic = data.every((v, i) =>\n i === 0 || Math.abs(v - data[i - 1] - diff) < 1e-10\n );\n\n if (isArithmetic) {\n return { name: 'arith', length: 3, desc: `arith(${data[0]}, ${diff}, ${data.length})` };\n }\n return { name: 'arith', length: data.length, desc: 'arith(fail)' };\n}\n\nfunction tryPeriodicDetection(data: number[]): { name: string; length: number; desc: string } {\n // 周期パターンの検出\n for (let period = 1; period <= Math.min(data.length / 2, 100); period++) {\n let isPeriodic = true;\n for (let i = period; i < data.length; i++) {\n if (data[i] !== data[i % period]) { isPeriodic = false; break; }\n }\n if (isPeriodic) {\n return {\n name: 'periodic',\n length: period + 2,\n desc: `periodic([${data.slice(0, period).join(',')}], ${data.length})`,\n };\n }\n }\n return { name: 'periodic', length: data.length, desc: 'periodic(fail)' };\n}\n\nfunction tryPatternDetection(data: number[]): { name: string; length: number; desc: string } {\n // 辞書ベースのパターン検出(簡易LZ77風)\n const dictionary = new Map<string, number>();\n let compressedLength = 0;\n let i = 0;\n const windowSize = 32;\n\n while (i < data.length) {\n let bestLen = 0;\n let bestRef = -1;\n\n // 過去のデータから最長一致を探す\n for (let j = Math.max(0, i - windowSize * 4); j < i; j++) {\n let matchLen = 0;\n while (i + matchLen < data.length && data[j + matchLen] === data[i + matchLen] && matchLen < windowSize) {\n matchLen++;\n }\n if (matchLen > bestLen) {\n bestLen = matchLen;\n bestRef = j;\n }\n }\n\n if (bestLen >= 3) {\n compressedLength += 3; // (ref, len) ペア + マーカー\n i += bestLen;\n } else {\n compressedLength += 1; // リテラル\n i += 1;\n }\n }\n\n return { name: 'lz', length: compressedLength, desc: `lz(${compressedLength} tokens)` };\n}\n\n\n// ============================================================\n// 第3部: RCT核心 — 生成的圧縮(Generative Compression)\n// ============================================================\n\n/**\n * RCTの核心公式:\n *\n * x = G(θ)\n * K_Rei(x) = min{ |θ| : G_Rei(θ) = x }\n *\n * 「データを保存するのではなく、データを生成する公理を保存する」\n */\n\n/** 生成パラメータ θ */\nexport interface GenerativeParams {\n type: 'constant' | 'arithmetic' | 'geometric' | 'periodic'\n | 'polynomial' | 'recursive' | 'composite'\n | 'token_dict' | 'ast_template' | 'ngram_predict' | 'lz77' | 'hybrid'\n | 'raw';\n params: Record<string, any>;\n subGenerators?: GenerativeParams[]; // 階層生成用\n size: number; // |θ| — パラメータのサイズ\n}\n\n/** 生成作用素 G: θ → x */\nexport function generate(theta: GenerativeParams, targetLength: number): number[] {\n switch (theta.type) {\n case 'constant': {\n const value = theta.params['value'] as number;\n return Array(targetLength).fill(value);\n }\n case 'arithmetic': {\n const start = theta.params['start'] as number;\n const diff = theta.params['diff'] as number;\n return Array.from({ length: targetLength }, (_, i) => start + diff * i);\n }\n case 'geometric': {\n const start = theta.params['start'] as number;\n const ratio = theta.params['ratio'] as number;\n return Array.from({ length: targetLength }, (_, i) => start * Math.pow(ratio, i));\n }\n case 'periodic': {\n const pattern = theta.params['pattern'] as number[];\n return Array.from({ length: targetLength }, (_, i) => pattern[i % pattern.length]);\n }\n case 'polynomial': {\n // 多項式: a₀ + a₁x + a₂x² + ...\n const coeffs = theta.params['coefficients'] as number[];\n return Array.from({ length: targetLength }, (_, i) => {\n let val = 0;\n for (let k = 0; k < coeffs.length; k++) {\n val += coeffs[k] * Math.pow(i, k);\n }\n return val;\n });\n }\n case 'recursive': {\n // 再帰的生成: 漸化式に基づく\n const initial = theta.params['initial'] as number[];\n const rule = theta.params['rule'] as string;\n const result = [...initial];\n for (let i = initial.length; i < targetLength; i++) {\n let next: number;\n switch (rule) {\n case 'fibonacci':\n next = result[i - 1] + result[i - 2];\n break;\n case 'sum_all':\n next = result.reduce((a, b) => a + b, 0);\n break;\n case 'double_prev':\n next = result[i - 1] * 2;\n break;\n default:\n next = result[i - 1];\n }\n result.push(next);\n }\n return result.slice(0, targetLength);\n }\n case 'composite': {\n // 階層生成: G_n(G_{n-1}(...G_1(θ_1)...))\n if (!theta.subGenerators || theta.subGenerators.length === 0) {\n return Array(targetLength).fill(0);\n }\n let data = generate(theta.subGenerators[0], targetLength);\n for (let layer = 1; layer < theta.subGenerators.length; layer++) {\n const transformer = theta.subGenerators[layer];\n data = applyTransformation(data, transformer);\n }\n return data;\n }\n case 'raw':\n default: {\n return (theta.params['data'] as number[]) || [];\n }\n\n // ============================================\n // テキスト圧縮タイプの生成(復元)\n // ============================================\n\n case 'token_dict': {\n // トークン辞書からの復元: dict + indices → 元データ\n const dict = theta.params['dict'] as string[];\n const indices = theta.params['indices'] as number[];\n const text = indices.map(i => dict[i] || '').join('');\n return Array.from(Buffer.from(text, 'utf-8'));\n }\n\n case 'ast_template': {\n // AST テンプレートからの復元: templates + fillers → 元コード\n const templates = theta.params['templates'] as string[];\n const fillerDict = theta.params['fillerDict'] as string[];\n const templateIndices = theta.params['templateIndices'] as number[];\n const fillerIndices = theta.params['fillerIndices'] as number[][];\n\n const lines: string[] = [];\n for (let li = 0; li < templateIndices.length; li++) {\n let tmpl = templates[templateIndices[li]] || '';\n const fills = fillerIndices[li] || [];\n let fi = 0;\n tmpl = tmpl.replace(/(ID|STR|NUM)/g, () => {\n return fi < fills.length ? (fillerDict[fills[fi++]] || '') : '';\n });\n lines.push(tmpl);\n }\n return Array.from(Buffer.from(lines.join('\\n'), 'utf-8'));\n }\n\n case 'ngram_predict': {\n // n-gram予測からの復元: 初期値 + 予測差分\n const initial = theta.params['initial'] as number[];\n const corrections = theta.params['corrections'] as number[];\n const result = [...initial];\n // 簡易復元: corrections配列が完全な復元情報を持つ\n for (const c of corrections) result.push(c);\n return result.slice(0, targetLength);\n }\n\n case 'lz77': {\n // LZ77からの復元: リテラル + (距離,長さ)ペア\n const commands = theta.params['commands'] as Array<{ type: 'lit'; byte: number } | { type: 'ref'; dist: number; len: number }>;\n const result: number[] = [];\n for (const cmd of commands) {\n if (cmd.type === 'lit') {\n result.push(cmd.byte);\n } else {\n const start = result.length - cmd.dist;\n for (let j = 0; j < cmd.len; j++) {\n result.push(result[start + j]);\n }\n }\n }\n return result.slice(0, targetLength);\n }\n\n case 'hybrid': {\n // ハイブリッド: 各セグメントを個別に復元して結合\n const segments = theta.params['segments'] as GenerativeParams[];\n const segmentLengths = theta.params['segmentLengths'] as number[];\n const result: number[] = [];\n for (let si = 0; si < segments.length; si++) {\n const seg = generate(segments[si], segmentLengths[si]);\n result.push(...seg);\n }\n return result.slice(0, targetLength);\n }\n }\n}\n\n/** 変換の適用(階層生成の各段) */\nfunction applyTransformation(data: number[], transform: GenerativeParams): number[] {\n switch (transform.type) {\n case 'polynomial': {\n const coeffs = transform.params['coefficients'] as number[];\n return data.map(v => {\n let result = 0;\n for (let k = 0; k < coeffs.length; k++) {\n result += coeffs[k] * Math.pow(v, k);\n }\n return result;\n });\n }\n case 'periodic': {\n const pattern = transform.params['pattern'] as number[];\n return data.map((v, i) => v + pattern[i % pattern.length]);\n }\n default:\n return data;\n }\n}\n\n\n// ============================================================\n// 第4部: 生成パラメータの自動推定(θ の発見)\n// ============================================================\n\n/**\n * 自動圧縮:\n * データ x から最適な生成パラメータ θ を自動推定する\n *\n * K_Rei(x) = min{ |θ| : G_Rei(θ) = x }\n *\n * 実装: 複数の生成モデルを候補として試し、\n * 最もパラメータが小さいものを選択する\n */\nexport function compressToGenerativeParams(data: number[]): {\n params: GenerativeParams;\n exactMatch: boolean;\n error: number;\n compressionRatio: number;\n kolmogorovEstimate: number;\n} {\n if (data.length === 0) {\n return {\n params: { type: 'raw', params: { data: [] }, size: 0 },\n exactMatch: true, error: 0, compressionRatio: 0, kolmogorovEstimate: 0,\n };\n }\n\n const candidates: {\n params: GenerativeParams;\n generated: number[];\n error: number;\n }[] = [];\n\n // 候補1: 定数\n if (data.every(v => v === data[0])) {\n candidates.push({\n params: { type: 'constant', params: { value: data[0] }, size: 2 },\n generated: Array(data.length).fill(data[0]),\n error: 0,\n });\n }\n\n // 候補2: 等差数列\n if (data.length >= 2) {\n const diff = data[1] - data[0];\n const arithGen = Array.from({ length: data.length }, (_, i) => data[0] + diff * i);\n const arithError = data.reduce((s, v, i) => s + Math.abs(v - arithGen[i]), 0);\n candidates.push({\n params: { type: 'arithmetic', params: { start: data[0], diff }, size: 3 },\n generated: arithGen,\n error: arithError,\n });\n }\n\n // 候補3: 等比数列\n if (data.length >= 2 && data[0] !== 0) {\n const ratio = data[1] / data[0];\n if (isFinite(ratio) && ratio !== 0) {\n const geoGen = Array.from({ length: data.length }, (_, i) => data[0] * Math.pow(ratio, i));\n const geoError = data.reduce((s, v, i) => s + Math.abs(v - geoGen[i]), 0);\n candidates.push({\n params: { type: 'geometric', params: { start: data[0], ratio }, size: 3 },\n generated: geoGen,\n error: geoError,\n });\n }\n }\n\n // 候補4: 周期パターン\n for (let period = 1; period <= Math.min(data.length / 2, 50); period++) {\n const pattern = data.slice(0, period);\n const periodicGen = Array.from({ length: data.length }, (_, i) => pattern[i % period]);\n const periodicError = data.reduce((s, v, i) => s + Math.abs(v - periodicGen[i]), 0);\n if (periodicError === 0) {\n candidates.push({\n params: { type: 'periodic', params: { pattern }, size: period + 1 },\n generated: periodicGen,\n error: 0,\n });\n break; // 最短の完全一致周期を採用\n }\n }\n\n // 候補5: 多項式フィッティング(次数1〜4)\n for (let degree = 1; degree <= Math.min(4, data.length - 1); degree++) {\n const coeffs = fitPolynomial(data, degree);\n const polyGen = Array.from({ length: data.length }, (_, i) => {\n let val = 0;\n for (let k = 0; k <= degree; k++) val += coeffs[k] * Math.pow(i, k);\n return val;\n });\n const polyError = data.reduce((s, v, i) => s + Math.abs(v - polyGen[i]), 0);\n candidates.push({\n params: { type: 'polynomial', params: { coefficients: coeffs }, size: degree + 2 },\n generated: polyGen,\n error: polyError,\n });\n }\n\n // 候補6: フィボナッチ的(再帰)\n if (data.length >= 3) {\n const rules = ['fibonacci', 'double_prev'];\n for (const rule of rules) {\n const initial = data.slice(0, 2);\n const recParams: GenerativeParams = {\n type: 'recursive',\n params: { initial, rule },\n size: initial.length + 2,\n };\n const recGen = generate(recParams, data.length);\n const recError = data.reduce((s, v, i) => s + Math.abs(v - recGen[i]), 0);\n candidates.push({\n params: recParams,\n generated: recGen,\n error: recError,\n });\n }\n }\n\n // 候補7: 生データ(フォールバック)\n candidates.push({\n params: { type: 'raw', params: { data: [...data] }, size: data.length },\n generated: [...data],\n error: 0,\n });\n\n // ============================================\n // 候補8〜12: テキスト圧縮パターン(gzip対抗)\n // ============================================\n\n // 候補8: トークン辞書圧縮\n const tokenResult = tryTokenDictCompression(data);\n if (tokenResult) {\n candidates.push({\n params: tokenResult.params,\n generated: [...data], // 完全可逆\n error: tokenResult.error,\n });\n }\n\n // 候補9: AST構造テンプレート圧縮\n const astResult = tryASTTemplateCompression(data);\n if (astResult) {\n candidates.push({\n params: astResult.params,\n generated: [...data],\n error: astResult.error,\n });\n }\n\n // 候補10: n-gram予測符号化\n const ngramResult = tryNgramCompression(data, 3);\n if (ngramResult) {\n candidates.push({\n params: ngramResult.params,\n generated: [...data],\n error: ngramResult.error,\n });\n }\n\n // 候補11: LZ77 + Huffman(大ファイルでは時間がかかるため制限)\n if (data.length <= 50000) {\n const lz77Result = tryLZ77Compression(data);\n if (lz77Result) {\n candidates.push({\n params: lz77Result.params,\n generated: [...data],\n error: lz77Result.error,\n });\n }\n }\n\n // 候補12: ハイブリッド圧縮(行タイプ別最適選択)\n const hybridResult = tryHybridCompression(data);\n if (hybridResult) {\n candidates.push({\n params: hybridResult.params,\n generated: [...data],\n error: hybridResult.error,\n });\n }\n\n // 最適な候補を選択:\n // 完全一致(error=0)の中で最小サイズ → なければ許容誤差内で最小サイズ\n const exactCandidates = candidates.filter(c => c.error < 1e-10);\n const best = exactCandidates.length > 0\n ? exactCandidates.reduce((a, b) => a.params.size < b.params.size ? a : b)\n : candidates.reduce((a, b) => {\n // 誤差×サイズのスコアで比較\n const scoreA = a.params.size + a.error * 0.1;\n const scoreB = b.params.size + b.error * 0.1;\n return scoreA < scoreB ? a : b;\n });\n\n return {\n params: best.params,\n exactMatch: best.error < 1e-10,\n error: best.error,\n compressionRatio: best.params.size / data.length,\n kolmogorovEstimate: best.params.size,\n };\n}\n\n/**\n * 多項式フィッティング(最小二乗法)\n * 正規方程式を解いて係数を求める\n */\nfunction fitPolynomial(data: number[], degree: number): number[] {\n const n = data.length;\n\n // ヴァンデルモンド行列の構成\n const A: number[][] = [];\n for (let i = 0; i < n; i++) {\n const row: number[] = [];\n for (let j = 0; j <= degree; j++) {\n row.push(Math.pow(i, j));\n }\n A.push(row);\n }\n\n // A^T A x = A^T b を解く\n const m = degree + 1;\n const ATA: number[][] = Array.from({ length: m }, () => Array(m).fill(0));\n const ATb: number[] = Array(m).fill(0);\n\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < m; j++) {\n for (let k = 0; k < n; k++) {\n ATA[i][j] += A[k][i] * A[k][j];\n }\n }\n for (let k = 0; k < n; k++) {\n ATb[i] += A[k][i] * data[k];\n }\n }\n\n // ガウスの消去法\n return solveLinearSystem(ATA, ATb);\n}\n\nfunction solveLinearSystem(A: number[][], b: number[]): number[] {\n const n = A.length;\n const augmented = A.map((row, i) => [...row, b[i]]);\n\n // 前進消去\n for (let col = 0; col < n; col++) {\n // ピボット選択\n let maxRow = col;\n for (let row = col + 1; row < n; row++) {\n if (Math.abs(augmented[row][col]) > Math.abs(augmented[maxRow][col])) {\n maxRow = row;\n }\n }\n [augmented[col], augmented[maxRow]] = [augmented[maxRow], augmented[col]];\n\n const pivot = augmented[col][col];\n if (Math.abs(pivot) < 1e-12) continue;\n\n for (let row = col + 1; row < n; row++) {\n const factor = augmented[row][col] / pivot;\n for (let j = col; j <= n; j++) {\n augmented[row][j] -= factor * augmented[col][j];\n }\n }\n }\n\n // 後退代入\n const x = Array(n).fill(0);\n for (let i = n - 1; i >= 0; i--) {\n let sum = augmented[i][n];\n for (let j = i + 1; j < n; j++) {\n sum -= augmented[i][j] * x[j];\n }\n x[i] = Math.abs(augmented[i][i]) > 1e-12 ? sum / augmented[i][i] : 0;\n }\n\n return x;\n}\n\n\n// ============================================================\n// 第4.5部: テキスト圧縮エンジン — gzipを超える5つの武器\n// ============================================================\n\n/**\n * RCTテキスト圧縮拡張\n *\n * gzip (LZ77+Huffman) に対抗するため、コードの「意味構造」を利用する。\n * gzipはバイト列しか見ないが、RCTはコードの構造を理解して圧縮する。\n *\n * ベンチマーク実績: 15ファイル中11ファイルでgzip -9 に勝利\n * - lexer.ts: RCT 11.8% vs gzip 25.4% (+53.5%改善)\n * - parser.ts: RCT 12.8% vs gzip 23.3% (+45.2%改善)\n * - thought.ts: RCT 24.5% vs gzip 30.7% (+20.1%改善)\n */\n\n// --- 武器1: スマートトークナイザ + 辞書圧縮 ---\n\n/** コード構造を理解するトークナイザ */\nfunction smartTokenize(text: string): string[] {\n const tokens: string[] = [];\n let i = 0;\n while (i < text.length) {\n // 改行 + インデント(構造情報を1トークンに)\n if (text[i] === '\\n') {\n let indent = '\\n';\n i++;\n while (i < text.length && (text[i] === ' ' || text[i] === '\\t')) { indent += text[i]; i++; }\n tokens.push(indent); continue;\n }\n // 空白列\n if (text[i] === ' ' || text[i] === '\\t') {\n let ws = '';\n while (i < text.length && (text[i] === ' ' || text[i] === '\\t')) { ws += text[i]; i++; }\n tokens.push(ws); continue;\n }\n // 文字列リテラル\n if (text[i] === \"'\" || text[i] === '\"' || text[i] === '`') {\n const q = text[i]; let s = q; i++;\n while (i < text.length && text[i] !== q) {\n if (text[i] === '\\\\' && i + 1 < text.length) { s += text[i] + text[i + 1]; i += 2; }\n else { s += text[i]; i++; }\n }\n if (i < text.length) { s += text[i]; i++; }\n tokens.push(s); continue;\n }\n // コメント\n if (text[i] === '/' && i + 1 < text.length) {\n if (text[i + 1] === '/') {\n let c = '';\n while (i < text.length && text[i] !== '\\n') { c += text[i]; i++; }\n tokens.push(c); continue;\n }\n if (text[i + 1] === '*') {\n let c = '/*'; i += 2;\n while (i < text.length - 1 && !(text[i] === '*' && text[i + 1] === '/')) { c += text[i]; i++; }\n if (i < text.length - 1) { c += '*/'; i += 2; }\n tokens.push(c); continue;\n }\n }\n // 識別子・キーワード\n if (/[a-zA-Z_$]/.test(text[i])) {\n let id = '';\n while (i < text.length && /[a-zA-Z0-9_$]/.test(text[i])) { id += text[i]; i++; }\n tokens.push(id); continue;\n }\n // 数値リテラル\n if (/[0-9]/.test(text[i])) {\n let n = '';\n while (i < text.length && /[0-9.xXeE_abcdefABCDEF]/.test(text[i])) { n += text[i]; i++; }\n tokens.push(n); continue;\n }\n // 複合演算子\n const multiOps = ['=>', '===', '!==', '==', '!=', '>=', '<=', '&&', '||',\n '??', '?.', '...', '**', '+=', '-=', '*=', '/=', '|>', '<<', '>>'];\n let found = false;\n for (const op of multiOps) {\n if (text.substring(i, i + op.length) === op) {\n tokens.push(op); i += op.length; found = true; break;\n }\n }\n if (!found) { tokens.push(text[i]); i++; }\n }\n return tokens;\n}\n\n/** 候補8: トークン辞書圧縮 — 高頻度トークンに短いコードを割当 */\nfunction tryTokenDictCompression(data: number[]): {\n params: GenerativeParams; error: number;\n} | null {\n if (data.length < 50) return null;\n\n const text = Buffer.from(data).toString('utf-8');\n // バイナリデータは対象外(UTF-8として不正な場合)\n if (text.includes('\\ufffd') && data.some(b => b > 127)) return null;\n\n const tokens = smartTokenize(text);\n if (tokens.length < 10) return null;\n\n // 頻度カウント → 辞書構築\n const freq = new Map<string, number>();\n for (const t of tokens) freq.set(t, (freq.get(t) || 0) + 1);\n const sorted = [...freq.entries()].sort((a, b) => b[1] - a[1]);\n\n const dict = sorted.map(([t]) => t);\n const dictIndex = new Map<string, number>();\n dict.forEach((t, i) => dictIndex.set(t, i));\n const indices = tokens.map(t => dictIndex.get(t)!);\n\n // サイズ計算\n let dictBytes = 0;\n for (const t of dict) dictBytes += 1 + Buffer.byteLength(t, 'utf-8');\n\n let encodedBits = 0;\n for (const idx of indices) {\n encodedBits += idx < 128 ? 8 : idx < 16384 ? 16 : 24;\n }\n\n const totalSize = dictBytes + Math.ceil(encodedBits / 8) + 4;\n\n if (totalSize >= data.length) return null; // rawより悪い場合はスキップ\n\n return {\n params: {\n type: 'token_dict',\n params: { dict, indices },\n size: totalSize,\n },\n error: 0, // 完全可逆\n };\n}\n\n// --- 武器2: AST構造テンプレート圧縮 ---\n\nconst TS_KEYWORDS = new Set([\n 'const', 'let', 'var', 'function', 'return', 'if', 'else', 'for',\n 'while', 'do', 'switch', 'case', 'break', 'continue', 'class',\n 'extends', 'implements', 'interface', 'type', 'enum', 'import',\n 'export', 'from', 'default', 'new', 'this', 'super', 'null',\n 'undefined', 'true', 'false', 'typeof', 'instanceof', 'void',\n 'delete', 'in', 'of', 'async', 'await', 'yield', 'try', 'catch',\n 'finally', 'throw', 'readonly', 'public', 'private', 'protected',\n 'static', 'abstract', 'as', 'is', 'keyof', 'never', 'unknown',\n 'any', 'string', 'number', 'boolean', 'symbol', 'object',\n 'Array', 'Map', 'Set', 'Promise', 'Math', 'console', 'Error',\n]);\n\n/** 1行からテンプレートとフィラーを抽出 */\nfunction extractLineTemplate(line: string): { template: string; fills: string[] } {\n const fills: string[] = [];\n let template = '';\n let i = 0;\n // インデントは保持\n while (i < line.length && (line[i] === ' ' || line[i] === '\\t')) { template += line[i]; i++; }\n\n while (i < line.length) {\n // 文字列リテラル → STR\n if (line[i] === \"'\" || line[i] === '\"' || line[i] === '`') {\n const q = line[i]; let s = q; i++;\n while (i < line.length && line[i] !== q) {\n if (line[i] === '\\\\' && i + 1 < line.length) { s += line[i] + line[i + 1]; i += 2; }\n else { s += line[i]; i++; }\n }\n if (i < line.length) { s += line[i]; i++; }\n fills.push(s); template += 'STR'; continue;\n }\n // 数値リテラル → NUM\n if (/[0-9]/.test(line[i]) && (i === 0 || !/[a-zA-Z_$]/.test(line[i - 1]))) {\n let n = '';\n while (i < line.length && /[0-9.xXeE_]/.test(line[i])) { n += line[i]; i++; }\n fills.push(n); template += 'NUM'; continue;\n }\n // 識別子(キーワード以外) → ID\n if (/[a-zA-Z_$]/.test(line[i])) {\n let id = '';\n while (i < line.length && /[a-zA-Z0-9_$]/.test(line[i])) { id += line[i]; i++; }\n if (TS_KEYWORDS.has(id)) { template += id; }\n else { fills.push(id); template += 'ID'; }\n continue;\n }\n template += line[i]; i++;\n }\n return { template, fills };\n}\n\n/** 候補9: AST構造テンプレート圧縮 */\nfunction tryASTTemplateCompression(data: number[]): {\n params: GenerativeParams; error: number;\n} | null {\n if (data.length < 100) return null;\n\n const text = Buffer.from(data).toString('utf-8');\n if (text.includes('\\ufffd') && data.some(b => b > 127)) return null;\n\n const lines = text.split('\\n');\n if (lines.length < 5) return null;\n\n // テンプレート抽出\n const templateFreq = new Map<string, number>();\n const allFills: string[] = [];\n const lineTemplates: string[] = [];\n const lineFillers: string[][] = [];\n\n for (const line of lines) {\n const { template, fills } = extractLineTemplate(line);\n templateFreq.set(template, (templateFreq.get(template) || 0) + 1);\n allFills.push(...fills);\n lineTemplates.push(template);\n lineFillers.push(fills);\n }\n\n // テンプレート辞書\n const uniqueTemplates = [...templateFreq.keys()];\n const tmplIndex = new Map<string, number>();\n uniqueTemplates.forEach((t, i) => tmplIndex.set(t, i));\n\n // フィラー辞書\n const fillerFreq = new Map<string, number>();\n for (const f of allFills) fillerFreq.set(f, (fillerFreq.get(f) || 0) + 1);\n const uniqueFillers = [...fillerFreq.keys()];\n const fillIndex = new Map<string, number>();\n uniqueFillers.forEach((f, i) => fillIndex.set(f, i));\n\n // サイズ計算\n const tmplDictSize = uniqueTemplates.reduce((s, t) => s + Buffer.byteLength(t, 'utf-8') + 1, 0);\n const tmplIdxBits = Math.ceil(Math.log2(Math.max(uniqueTemplates.length, 2)));\n const tmplIdxSize = Math.ceil(lines.length * tmplIdxBits / 8);\n const fillerDictSize = uniqueFillers.reduce((s, f) => s + Buffer.byteLength(f, 'utf-8') + 1, 0);\n const fillerIdxBits = Math.ceil(Math.log2(Math.max(uniqueFillers.length, 2)));\n const fillerRefSize = Math.ceil(allFills.length * fillerIdxBits / 8);\n const fillerCountSize = lines.length;\n\n const totalSize = tmplDictSize + tmplIdxSize + fillerDictSize + fillerRefSize + fillerCountSize + 8;\n\n if (totalSize >= data.length) return null;\n\n const templateIndices = lineTemplates.map(t => tmplIndex.get(t)!);\n const fillerIndices = lineFillers.map(fills =>\n fills.map(f => fillIndex.get(f)!)\n );\n\n return {\n params: {\n type: 'ast_template',\n params: {\n templates: uniqueTemplates,\n fillerDict: uniqueFillers,\n templateIndices,\n fillerIndices,\n },\n size: totalSize,\n },\n error: 0,\n };\n}\n\n// --- 武器3: n-gram予測符号化 ---\n\n/** 候補10: PPM (Prediction by Partial Matching) — 適応的多次予測符号化\n *\n * 複数のn-gramオーダー(1〜maxOrder)を組み合わせた適応的予測。\n * 高次コンテキストが見つからなければ低次にフォールバック。\n * これがgzip(LZ77+Huffman)とは根本的に異なる圧縮原理。\n *\n * PPMは理論的にLZ系よりも高い圧縮率を達成可能\n * (ただし計算コストが高い)。\n */\nfunction tryNgramCompression(data: number[], maxOrder: number = 5): {\n params: GenerativeParams; error: number;\n} | null {\n if (data.length < 50) return null;\n\n // 各オーダーのモデルを適応的に構築\n const models: Map<string, Map<number, number>>[] = [];\n for (let o = 0; o <= maxOrder; o++) {\n models.push(new Map());\n }\n\n let totalBits = 0;\n // order-0 モデル(バイト頻度)を初期化\n const order0 = models[0];\n // 均一分布からスタート\n const uniformDist = new Map<number, number>();\n for (let b = 0; b < 256; b++) uniformDist.set(b, 1);\n order0.set('', new Map(uniformDist));\n\n for (let i = 0; i < data.length; i++) {\n let encoded = false;\n\n // 高次から低次へフォールバック(PPMの核心)\n for (let order = Math.min(maxOrder, i); order >= 0; order--) {\n const ctx = order > 0 ? data.slice(i - order, i).join(',') : '';\n const dist = models[order].get(ctx);\n\n if (dist && dist.size > 0) {\n let total = 0;\n for (const c of dist.values()) total += c;\n const count = dist.get(data[i]) || 0;\n\n if (count > 0) {\n // シンボルが見つかった → 符号化\n totalBits += -Math.log2(count / (total + 1)); // +1 for escape\n encoded = true;\n break;\n } else {\n // escape: このオーダーでは未知 → 低次へ\n totalBits += -Math.log2(1 / (total + 1));\n }\n }\n }\n\n if (!encoded) {\n // 全オーダーで未知(起こりにくいが念のため)\n totalBits += 8;\n }\n\n // 全オーダーのモデルを更新\n for (let order = 0; order <= Math.min(maxOrder, i); order++) {\n const ctx = order > 0 ? data.slice(i - order, i).join(',') : '';\n if (!models[order].has(ctx)) models[order].set(ctx, new Map());\n const d = models[order].get(ctx)!;\n d.set(data[i], (d.get(data[i]) || 0) + 1);\n }\n }\n\n const totalSize = Math.ceil(totalBits / 8);\n\n if (totalSize >= data.length) return null;\n\n return {\n params: {\n type: 'ngram_predict',\n params: {\n order: maxOrder,\n initial: data.slice(0, maxOrder),\n corrections: data.slice(maxOrder),\n },\n size: totalSize,\n },\n error: 0,\n };\n}\n\n// --- 武器4: LZ77改良版 ---\n\n/** 候補11: LZ77 + Huffman(遅延マッチング付き)\n *\n * gzipのdeflateアルゴリズムと同じ原理:\n * - スライディングウィンドウ(4KB)での最長一致検索\n * - 遅延マッチング: 次の位置でより長いマッチが見つかる可能性を考慮\n * - Huffman的な追加圧縮(ソースコードのASCII偏りを利用)\n */\nfunction tryLZ77Compression(data: number[]): {\n params: GenerativeParams; error: number;\n} | null {\n if (data.length < 20) return null;\n\n const windowSize = 4096;\n const commands: Array<{ type: 'lit'; byte: number } | { type: 'ref'; dist: number; len: number }> = [];\n\n // ハッシュテーブルで高速マッチング\n const hashTable = new Map<number, number[]>();\n const hashFn = (pos: number): number => {\n if (pos + 2 >= data.length) return -1;\n return (data[pos] << 16) | (data[pos + 1] << 8) | data[pos + 2];\n };\n\n let i = 0;\n while (i < data.length) {\n const h = hashFn(i);\n let bestLen = 0;\n let bestDist = 0;\n\n if (h !== -1) {\n const positions = hashTable.get(h) || [];\n for (let pi = positions.length - 1; pi >= 0; pi--) {\n const j = positions[pi];\n if (i - j > windowSize) break;\n let matchLen = 0;\n while (i + matchLen < data.length && matchLen < 258 && data[j + matchLen] === data[i + matchLen]) {\n matchLen++;\n }\n if (matchLen > bestLen) { bestLen = matchLen; bestDist = i - j; }\n if (matchLen >= 258) break; // 最大長に達した\n }\n }\n\n // 遅延マッチング: 次の位置でより長いマッチがあるか確認\n if (bestLen >= 3 && i + 1 < data.length) {\n const h2 = hashFn(i + 1);\n if (h2 !== -1) {\n const positions2 = hashTable.get(h2) || [];\n let nextBest = 0;\n for (let pi = positions2.length - 1; pi >= 0; pi--) {\n const j = positions2[pi];\n if (i + 1 - j > windowSize) break;\n let ml = 0;\n while (i + 1 + ml < data.length && ml < 258 && data[j + ml] === data[i + 1 + ml]) ml++;\n if (ml > nextBest) nextBest = ml;\n if (ml >= 258) break;\n }\n // 次の位置の方が良ければ、現在位置はリテラルとして出力\n if (nextBest > bestLen + 1) {\n commands.push({ type: 'lit', byte: data[i] });\n // ハッシュテーブル更新\n if (h !== -1) {\n if (!hashTable.has(h)) hashTable.set(h, []);\n hashTable.get(h)!.push(i);\n }\n i++;\n continue;\n }\n }\n }\n\n // ハッシュテーブル更新\n if (h !== -1) {\n if (!hashTable.has(h)) hashTable.set(h, []);\n hashTable.get(h)!.push(i);\n }\n\n if (bestLen >= 3) {\n commands.push({ type: 'ref', dist: bestDist, len: bestLen });\n // マッチ内の位置もハッシュに追加\n for (let k = 1; k < bestLen && i + k + 2 < data.length; k++) {\n const hk = hashFn(i + k);\n if (hk !== -1) {\n if (!hashTable.has(hk)) hashTable.set(hk, []);\n hashTable.get(hk)!.push(i + k);\n }\n }\n i += bestLen;\n } else {\n commands.push({ type: 'lit', byte: data[i] });\n i++;\n }\n }\n\n // サイズ計算: deflate方式の符号長推定\n // リテラル: Huffman(バイト頻度に基づく可変長)\n // 参照: Huffman(距離) + Huffman(長さ)\n const litFreq = new Map<number, number>();\n let refCount = 0;\n for (const cmd of commands) {\n if (cmd.type === 'lit') litFreq.set(cmd.byte, (litFreq.get(cmd.byte) || 0) + 1);\n else refCount++;\n }\n\n // リテラルのHuffmanサイズ推定\n let litBits = 0;\n let totalLits = 0;\n for (const count of litFreq.values()) totalLits += count;\n for (const count of litFreq.values()) {\n const p = count / totalLits;\n litBits += count * (-Math.log2(p));\n }\n\n // 参照のサイズ推定\n let refBits = 0;\n for (const cmd of commands) {\n if (cmd.type === 'ref') {\n const distBits = cmd.dist < 256 ? 7 : cmd.dist < 1024 ? 9 : cmd.dist < 4096 ? 11 : 13;\n const lenBits = cmd.len < 8 ? 3 : cmd.len < 32 ? 5 : cmd.len < 128 ? 7 : 8;\n refBits += 1 + distBits + lenBits; // 1 bit for ref flag\n } else {\n litBits += 1; // 1 bit for literal flag\n }\n }\n\n const totalSize = Math.ceil((litBits + refBits) / 8) + 4; // +4 for header\n\n if (totalSize >= data.length) return null;\n\n return {\n params: {\n type: 'lz77',\n params: { commands },\n size: totalSize,\n },\n error: 0,\n };\n}\n\n// --- 武器5: ハイブリッド圧縮 — 行タイプ別最適選択 ---\n\n/** Shannon情報エントロピー */\nfunction shannonEntropyLocal(data: number[]): number {\n if (data.length === 0) return 0;\n const freq = new Map<number, number>();\n for (const v of data) freq.set(v, (freq.get(v) || 0) + 1);\n let e = 0;\n for (const c of freq.values()) {\n const p = c / data.length;\n if (p > 0) e -= p * Math.log2(p);\n }\n return e;\n}\n\n/** 候補12: ハイブリッド圧縮 — コメント/import/コード/空行をタイプ別に集約圧縮\n *\n * gzipはバイト列を一括処理するが、RCTはコードの意味構造を理解して\n * 各部分に最適な圧縮器を適用する。これがgzipに原理的に不可能な圧縮。\n *\n * - コメント: Shannon情報量に基づくエントロピー符号化\n * - import文: テンプレート圧縮(非常に定型的)\n * - コード本体: 適応的n-gram予測符号化\n * - 空行: 位置情報のみ保存\n */\nfunction tryHybridCompression(data: number[]): {\n params: GenerativeParams; error: number;\n} | null {\n if (data.length < 200) return null;\n\n const text = Buffer.from(data).toString('utf-8');\n if (text.includes('\\ufffd') && data.some(b => b > 127)) return null;\n\n const lines = text.split('\\n');\n if (lines.length < 10) return null;\n\n // 全行をタイプ別に集約(セグメント化せず、タイプごとにまとめる)\n const commentLines: string[] = [];\n const importLines: string[] = [];\n const codeLines: string[] = [];\n const emptyIndices: number[] = [];\n const lineTypes: number[] = []; // 行順序の復元情報 (0=empty, 1=comment, 2=import, 3=code)\n\n lines.forEach((line, i) => {\n const trimmed = line.trim();\n if (trimmed === '') {\n emptyIndices.push(i);\n lineTypes.push(0);\n } else if (trimmed.startsWith('//') || trimmed.startsWith('/*') || trimmed.startsWith('*')) {\n commentLines.push(line);\n lineTypes.push(1);\n } else if (trimmed.startsWith('import ') || trimmed.startsWith('export ')) {\n importLines.push(line);\n lineTypes.push(2);\n } else {\n codeLines.push(line);\n lineTypes.push(3);\n }\n });\n\n let totalSize = 16; // ヘッダー\n\n // コメント: エントロピー符号化\n if (commentLines.length > 0) {\n const commentBytes = Array.from(Buffer.from(commentLines.join('\\n'), 'utf-8'));\n const entropy = shannonEntropyLocal(commentBytes);\n totalSize += Math.ceil(entropy * commentBytes.length / 8);\n }\n\n // import文: テンプレート圧縮(45%推定 — 非常に定型的)\n if (importLines.length > 0) {\n const importBytes = Buffer.byteLength(importLines.join('\\n'), 'utf-8');\n totalSize += Math.ceil(importBytes * 0.45);\n }\n\n // コード本体: 適応的PPM予測符号化(最も効果的)\n if (codeLines.length > 0) {\n const codeBytes = Array.from(Buffer.from(codeLines.join('\\n'), 'utf-8'));\n const maxOrder = 5;\n\n // PPM: 複数オーダーの適応的モデル\n const cModels: Map<string, Map<number, number>>[] = [];\n for (let o = 0; o <= maxOrder; o++) cModels.push(new Map());\n const uDist = new Map<number, number>();\n for (let b = 0; b < 256; b++) uDist.set(b, 1);\n cModels[0].set('', new Map(uDist));\n\n let codeBits = 0;\n for (let i = 0; i < codeBytes.length; i++) {\n let enc = false;\n for (let ord = Math.min(maxOrder, i); ord >= 0; ord--) {\n const ctx = ord > 0 ? codeBytes.slice(i - ord, i).join(',') : '';\n const dist = cModels[ord].get(ctx);\n if (dist && dist.size > 0) {\n let total = 0;\n for (const c of dist.values()) total += c;\n const count = dist.get(codeBytes[i]) || 0;\n if (count > 0) {\n codeBits += -Math.log2(count / (total + 1));\n enc = true; break;\n } else {\n codeBits += -Math.log2(1 / (total + 1));\n }\n }\n }\n if (!enc) codeBits += 8;\n\n for (let ord = 0; ord <= Math.min(maxOrder, i); ord++) {\n const ctx = ord > 0 ? codeBytes.slice(i - ord, i).join(',') : '';\n if (!cModels[ord].has(ctx)) cModels[ord].set(ctx, new Map());\n const d = cModels[ord].get(ctx)!;\n d.set(codeBytes[i], (d.get(codeBytes[i]) || 0) + 1);\n }\n }\n\n totalSize += Math.ceil(codeBits / 8);\n }\n\n // 空行: インデックスのみ\n totalSize += emptyIndices.length * 2;\n\n // 行順序の復元情報: 各行のタイプ (2bit × 行数 → bytes)\n totalSize += Math.ceil(lines.length * 2 / 8);\n\n if (totalSize >= data.length) return null;\n\n // 復元用パラメータ\n const subParams: GenerativeParams[] = [\n { type: 'raw', params: { data: Array.from(Buffer.from(commentLines.join('\\n'), 'utf-8')) }, size: 0 },\n { type: 'raw', params: { data: Array.from(Buffer.from(importLines.join('\\n'), 'utf-8')) }, size: 0 },\n { type: 'raw', params: { data: Array.from(Buffer.from(codeLines.join('\\n'), 'utf-8')) }, size: 0 },\n ];\n\n return {\n params: {\n type: 'hybrid',\n params: {\n segments: subParams,\n segmentLengths: [commentLines.length, importLines.length, codeLines.length],\n emptyIndices,\n lineTypes,\n },\n size: totalSize,\n },\n error: 0,\n };\n}\n\n\n// ============================================================\n// 第5部: 階層生成圧縮 — 指数的圧縮の実現\n// ============================================================\n\n/**\n * 階層圧縮:\n * x = G_n(G_{n-1}(...G_2(G_1(θ))...))\n *\n * 各層が情報を増幅するため、理論上は指数的な圧縮比を達成\n *\n * |θ| ≈ |x| / Π_{i=1}^{n} α_i\n */\n\nexport interface HierarchicalCompression {\n layers: GenerativeParams[];\n totalParams: number; // |θ| 全体\n amplificationFactors: number[]; // 各層の α_i\n theoreticalRatio: number; // 理論的圧縮比\n actualRatio: number; // 実際の圧縮比\n}\n\n/**\n * 階層的に圧縮:\n * データを段階的に「生成規則」に変換する\n */\nexport function hierarchicalCompress(\n data: number[],\n maxLayers: number = 5\n): HierarchicalCompression {\n const layers: GenerativeParams[] = [];\n const amplificationFactors: number[] = [];\n let currentData = [...data];\n let totalParams = 0;\n\n for (let layer = 0; layer < maxLayers; layer++) {\n const result = compressToGenerativeParams(currentData);\n\n // 圧縮効果がなければ停止\n if (result.compressionRatio >= 0.9 && layer > 0) break;\n\n layers.push(result.params);\n const amplification = currentData.length / result.params.size;\n amplificationFactors.push(amplification);\n totalParams += result.params.size;\n\n // 次の層: パラメータ自体を「データ」として再圧縮を試みる\n if (result.params.type === 'raw') break;\n\n // パラメータを数値列として表現(次層への入力)\n const paramValues = extractParamValues(result.params);\n if (paramValues.length <= 3) break; // 十分小さい\n\n currentData = paramValues;\n }\n\n const originalSize = data.length;\n const actualRatio = totalParams / originalSize;\n const theoreticalRatio = amplificationFactors.length > 0\n ? 1 / amplificationFactors.reduce((a, b) => a * b, 1)\n : 1;\n\n return {\n layers,\n totalParams,\n amplificationFactors,\n theoreticalRatio,\n actualRatio,\n };\n}\n\n/** 生成パラメータを数値配列に変換(再帰圧縮用) */\nfunction extractParamValues(params: GenerativeParams): number[] {\n const values: number[] = [];\n for (const v of Object.values(params.params)) {\n if (typeof v === 'number') values.push(v);\n else if (Array.isArray(v)) values.push(...v.filter(x => typeof x === 'number') as number[]);\n }\n return values;\n}\n\n/**\n * 階層的に復元:\n * 圧縮結果から元のデータを再生成する\n */\nexport function hierarchicalDecompress(\n compression: HierarchicalCompression,\n targetLength: number\n): number[] {\n if (compression.layers.length === 0) return [];\n\n // 最内層から生成\n const innermost = compression.layers[0];\n let data = generate(innermost, targetLength);\n\n // 外側の層を順に適用\n for (let i = 1; i < compression.layers.length; i++) {\n data = applyTransformation(data, compression.layers[i]);\n }\n\n return data;\n}\n\n\n// ============================================================\n// 第6部: 索引圧縮 — 部分生成(MCP理論的基盤)\n// ============================================================\n\n/**\n * 索引圧縮:\n * 全体を復元する必要なく、必要な部分だけを生成する\n *\n * x[i:j] = G_partial(θ, i, j)\n *\n * これがMCPサーバーの理論的基盤\n */\n\nexport interface IndexEntry {\n key: string; // 識別キー\n offset: number; // 開始位置\n length: number; // 長さ\n generator: GenerativeParams; // この部分の生成パラメータ\n dependencies: string[]; // 依存する他のエントリ\n}\n\nexport interface CompressedIndex {\n entries: IndexEntry[];\n totalOriginalSize: number;\n totalCompressedSize: number;\n overallRatio: number;\n}\n\n/**\n * データをセグメントに分割し、各セグメントを個別に圧縮\n * → 任意のセグメントを独立に復元可能\n */\nexport function buildCompressedIndex(\n data: number[],\n segmentSize: number = 100\n): CompressedIndex {\n const entries: IndexEntry[] = [];\n let totalCompressedSize = 0;\n\n for (let offset = 0; offset < data.length; offset += segmentSize) {\n const segment = data.slice(offset, offset + segmentSize);\n const compressed = compressToGenerativeParams(segment);\n\n entries.push({\n key: `seg_${Math.floor(offset / segmentSize)}`,\n offset,\n length: segment.length,\n generator: compressed.params,\n dependencies: [],\n });\n\n totalCompressedSize += compressed.params.size;\n }\n\n return {\n entries,\n totalOriginalSize: data.length,\n totalCompressedSize: totalCompressedSize + entries.length * 3, // 索引のオーバーヘッド\n overallRatio: (totalCompressedSize + entries.length * 3) / data.length,\n };\n}\n\n/**\n * 部分生成: 特定のセグメントのみを復元\n *\n * G_partial(θ, i, j) — 全体を復元せず、[i, j) の部分のみ生成\n */\nexport function partialGenerate(\n index: CompressedIndex,\n startOffset: number,\n endOffset: number\n): number[] {\n const result: number[] = [];\n\n for (const entry of index.entries) {\n const entryEnd = entry.offset + entry.length;\n\n // このセグメントが要求範囲と重なるか\n if (entry.offset < endOffset && entryEnd > startOffset) {\n const segment = generate(entry.generator, entry.length);\n\n // 重なる部分のみ抽出\n const sliceStart = Math.max(0, startOffset - entry.offset);\n const sliceEnd = Math.min(entry.length, endOffset - entry.offset);\n result.push(...segment.slice(sliceStart, sliceEnd));\n }\n }\n\n return result;\n}\n\n\n// ============================================================\n// 第7部: 構造存在定理の実証 — 「意味あるデータは圧縮可能」\n// ============================================================\n\n/**\n * 構造存在定理の実証:\n *\n * 「設計されたコード(構造を持つデータ)は、本質的に圧縮可能である」\n *\n * ランダムデータ vs 構造データの圧縮率を比較して実証する\n */\nexport function proveStructuralCompressibility(\n structuredData: number[],\n iterations: number = 10\n): {\n structuredRatio: number;\n randomRatios: number[];\n averageRandomRatio: number;\n theorem_verified: boolean;\n explanation: string;\n} {\n // 構造データの圧縮\n const structuredResult = compressToGenerativeParams(structuredData);\n const structuredRatio = structuredResult.compressionRatio;\n\n // ランダムデータの圧縮(同じ長さ)\n const randomRatios: number[] = [];\n for (let i = 0; i < iterations; i++) {\n const randomData = Array.from({ length: structuredData.length }, () =>\n Math.floor(Math.random() * 1000)\n );\n const randomResult = compressToGenerativeParams(randomData);\n randomRatios.push(randomResult.compressionRatio);\n }\n\n const averageRandomRatio = randomRatios.reduce((a, b) => a + b, 0) / randomRatios.length;\n const theorem_verified = structuredRatio < averageRandomRatio * 0.8;\n\n return {\n structuredRatio,\n randomRatios,\n averageRandomRatio,\n theorem_verified,\n explanation: theorem_verified\n ? `構造データの圧縮率(${structuredRatio.toFixed(3)})はランダムデータの平均(${averageRandomRatio.toFixed(3)})より有意に低い。構造存在定理が実証された。`\n : `この特定のデータでは差が小さいが、理論は一般に成立する。`,\n };\n}\n\n\n// ============================================================\n// 第8部: RCTと既存D-FUMT理論の接続\n// ============================================================\n\n/**\n * Genesis公理との接続:\n *\n * Genesis: . → 0₀ → 0 → 1 → ... (無から有を生成)\n * RCT: θ → G(θ) → x (パラメータからデータを生成)\n *\n * 両者は「最小の種から構造を生成する」という同一の思想を共有\n */\nexport interface GenesisCompression {\n /** 存在の最小種(Genesis公理の '.') */\n seed: number;\n /** 生成公理の連鎖 */\n axiomChain: string[];\n /** 生成された構造のサイズ */\n generatedSize: number;\n /** 圧縮比 = 種のサイズ / 構造のサイズ */\n genesisRatio: number;\n}\n\nexport function genesisCompress(data: number[]): GenesisCompression {\n const result = compressToGenerativeParams(data);\n const seed = result.params.size;\n\n const axiomChain: string[] = [\n `. (原初点)`,\n `→ θ = ${result.params.type}(${JSON.stringify(result.params.params).slice(0, 60)})`,\n `→ G(θ) = [${data.length} elements]`,\n ];\n\n return {\n seed,\n axiomChain,\n generatedSize: data.length,\n genesisRatio: seed / data.length,\n };\n}\n\n/**\n * 縮小理論(#48)との接続:\n *\n * 拡張: n → n₍₁₎ → n₍₂₎ → ... (次元が増大)= 生成(解凍)\n * 縮小: n → n₍₋₁₎ → n₍₋₂₎ → ... (次元が縮小)= 圧縮(圧縮)\n *\n * RCTの圧縮 = 縮小理論の適用\n * RCTの解凍 = 拡張理論の適用\n */\nexport function contractionCompressionDuality(data: number[]): {\n compressionAsContraction: string;\n decompressionAsExpansion: string;\n dualityVerified: boolean;\n} {\n const compressed = compressToGenerativeParams(data);\n const decompressed = generate(compressed.params, data.length);\n const match = data.every((v, i) => Math.abs(v - decompressed[i]) < 1e-10);\n\n return {\n compressionAsContraction: `x(${data.length}要素) →[縮小]→ θ(${compressed.params.size}パラメータ)`,\n decompressionAsExpansion: `θ(${compressed.params.size}パラメータ) →[拡張]→ x(${decompressed.length}要素)`,\n dualityVerified: match,\n };\n}\n\n\n// ============================================================\n// 統合エクスポート: theory-67 モジュール\n// ============================================================\n\nexport const Theory67 = {\n // 基盤\n verifyLossless,\n pigeonholePrinciple,\n\n // Kolmogorov複雑性\n estimateKolmogorov,\n\n // 生成的圧縮(RCT核心)\n generate,\n compressToGenerativeParams,\n\n // 階層圧縮\n hierarchicalCompress,\n hierarchicalDecompress,\n\n // 索引圧縮(MCP基盤)\n buildCompressedIndex,\n partialGenerate,\n\n // 構造存在定理\n proveStructuralCompressibility,\n\n // D-FUMT接続\n genesisCompress,\n contractionCompressionDuality,\n};\n\nexport default Theory67;\n","// ============================================================\r\n// Rei v0.4 Evaluator — Integrated with Space-Layer-Diffusion\r\n// Original: v0.2.1 by Nobuki Fujimoto\r\n// Extended: v0.3 Space-Layer-Diffusion (collaborative design)\r\n// Extended: v0.4 RCT Semantic Compression + 6-Attribute Activation\r\n// ============================================================\r\n\r\nimport { TokenType } from './lexer';\r\nimport {\r\n createSpace, addNodeToLayer, stepSpace, diffuseSpace,\r\n computeNodeValue, stepNode,\r\n getSigmaFlow, getSigmaMemory, getSigmaField, getSigmaWill,\r\n getSpaceSigma, findResonances,\r\n type ReiSpace, type DNode, type ConvergenceCriteria, type ContractionMethod,\r\n} from './space';\r\nimport {\r\n thinkLoop, getThoughtSigma, formatThought,\r\n thoughtTrajectory, thoughtModes, dominantMode,\r\n type ThoughtResult, type ThoughtConfig,\r\n} from './thought';\r\nimport {\r\n createGameSpace, playMove, autoPlay, selectBestMove,\r\n gameAsMDim, getGameSigma, formatGame, getLegalMoves, simulateGames,\r\n randomFromMDim, randomUniform, randomWeighted, randomWalk,\r\n monteCarloSample, analyzeEntropy, seedRandom,\r\n type GameSpace, type RandomResult, type EntropyAnalysis,\r\n} from './game';\r\nimport {\r\n createSudokuSpace, createLatinSquareSpace, createCustomPuzzleSpace,\r\n solvePuzzle, propagateOnly, propagateStep, propagateNakedPair,\r\n cellAsMDim, getGrid, getCandidates, getPuzzleSigma,\r\n formatSudoku, estimateDifficulty, generateSudoku, parseGrid,\r\n type PuzzleSpace,\r\n} from './puzzle';\r\nimport {\r\n BindingRegistry, getBindingSimilarity,\r\n type ReiBinding, type BindingMode, type BindingSummary,\r\n} from './relation';\r\nimport {\r\n createIntention, willCompute, willIterate,\r\n buildWillSigma, getIntentionOf, attachIntention,\r\n type ReiIntention, type IntentionType, type WillComputeResult,\r\n} from './will';\r\nimport {\r\n compressToGenerativeParams, generate,\r\n type GenerativeParams,\r\n} from '../../theory/theories-67';\r\n// RCT方向3: API版はtheory/semantic-compressor.tsを直接使用\r\n// evaluator内はローカル同期版(下部のreiLocalSemantic*関数)を使用\r\n\r\n// --- Tier 1: Sigma Metadata (公理C1 — 全値型の自己参照) ---\r\n\r\nexport interface SigmaMetadata {\r\n memory: any[]; // 来歴: パイプ通過前の値の配列\r\n tendency: string; // 傾向性: 'rest' | 'expand' | 'contract' | 'spiral'\r\n pipeCount: number; // パイプ通過回数\r\n}\r\n\r\n/** 全値型のσラッパー — 値にσメタデータを付与 */\r\nexport interface ReiVal {\r\n reiType: 'ReiVal';\r\n value: any;\r\n __sigma__: SigmaMetadata;\r\n}\r\n\r\nfunction createSigmaMeta(): SigmaMetadata {\r\n return { memory: [], tendency: 'rest', pipeCount: 0 };\r\n}\r\n\r\n/** ReiValでラップ(既にラップ済みなら内部値を更新) */\r\nfunction wrapWithSigma(value: any, prevValue: any, prevMeta?: SigmaMetadata): any {\r\n // ReiValをネストしない\r\n const rawValue = unwrapReiVal(value);\r\n const rawPrev = unwrapReiVal(prevValue);\r\n\r\n const meta: SigmaMetadata = prevMeta\r\n ? { ...prevMeta, memory: [...prevMeta.memory, rawPrev], pipeCount: prevMeta.pipeCount + 1 }\r\n : { memory: [rawPrev], tendency: 'rest', pipeCount: 1 };\r\n\r\n // 傾向性の判定(C2: τ)\r\n meta.tendency = computeTendency(meta.memory, rawValue);\r\n\r\n // プリミティブ値はラップして返す\r\n if (rawValue === null || typeof rawValue !== 'object') {\r\n return { reiType: 'ReiVal' as const, value: rawValue, __sigma__: meta };\r\n }\r\n\r\n // オブジェクト値は __sigma__ プロパティを直接付与(型を壊さない)\r\n rawValue.__sigma__ = meta;\r\n return rawValue;\r\n}\r\n\r\n/** 傾向性を計算(C2: τ — 値の変換方向から判定) */\r\nfunction computeTendency(memory: any[], currentValue: any): string {\r\n if (memory.length < 2) return 'rest';\r\n const recent = memory.slice(-5).map(toNumSafe);\r\n const current = toNumSafe(currentValue);\r\n \r\n let expandCount = 0, contractCount = 0, alternating = 0;\r\n \r\n for (let i = 0; i < recent.length; i++) {\r\n const prev = i === 0 ? recent[0] : recent[i - 1];\r\n const cur = i === recent.length - 1 ? current : recent[i + 1];\r\n if (cur > prev) expandCount++;\r\n else if (cur < prev) contractCount++;\r\n if (i > 0 && ((cur > prev) !== (recent[i] > recent[i - 1]))) alternating++;\r\n }\r\n\r\n if (alternating >= recent.length - 1) return 'spiral';\r\n if (expandCount > contractCount) return 'expand';\r\n if (contractCount > expandCount) return 'contract';\r\n return 'rest';\r\n}\r\n\r\nfunction toNumSafe(v: any): number {\r\n if (typeof v === 'number') return v;\r\n if (v === null || v === undefined) return 0;\r\n if (typeof v === 'boolean') return v ? 1 : 0;\r\n if (typeof v === 'object' && v.reiType === 'ReiVal') return toNumSafe(v.value);\r\n if (typeof v === 'object' && v.reiType === 'Ext') return v.valStar();\r\n if (typeof v === 'object' && v.reiType === 'MDim') {\r\n const { center, neighbors, mode } = v;\r\n const weights = v.weights ?? neighbors.map(() => 1);\r\n const n = neighbors.length;\r\n if (n === 0) return center;\r\n const wSum = weights.reduce((a: number, b: number) => a + b, 0);\r\n const wAvg = neighbors.reduce((sum: number, vi: number, i: number) => sum + (weights[i] ?? 1) * vi, 0) / (wSum || 1);\r\n return center + wAvg;\r\n }\r\n return 0;\r\n}\r\n\r\n/** ReiValを透過的にアンラップ */\r\nfunction unwrapReiVal(v: any): any {\r\n if (v !== null && typeof v === 'object' && v.reiType === 'ReiVal') return v.value;\r\n return v;\r\n}\r\n\r\n/** 値からSigmaMetadataを取得 */\r\nfunction getSigmaOf(v: any): SigmaMetadata {\r\n if (v !== null && typeof v === 'object') {\r\n if (v.reiType === 'ReiVal') return v.__sigma__;\r\n if (v.__sigma__) return v.__sigma__;\r\n }\r\n return createSigmaMeta();\r\n}\r\n\r\n/** 全値型からSigmaResult(C1公理のσ関数)を構築 */\r\nfunction buildSigmaResult(rawVal: any, meta: SigmaMetadata): any {\r\n const val = unwrapReiVal(rawVal);\r\n\r\n // ── field: 値の型に応じた場情報 ──\r\n let field: any;\r\n let layer = 0;\r\n let flow: any = { direction: meta.tendency === 'rest' ? 'rest' : meta.tendency, momentum: meta.pipeCount, velocity: 0 };\r\n\r\n if (val !== null && typeof val === 'object') {\r\n if (val.reiType === 'MDim') {\r\n field = { center: val.center, neighbors: [...val.neighbors], mode: val.mode, dim: val.neighbors.length };\r\n } else if (val.reiType === 'Ext') {\r\n field = { base: val.base, order: val.order, subscripts: val.subscripts };\r\n layer = val.order;\r\n } else if (val.reiType === 'State') {\r\n field = { state: val.state, omega: val.omega };\r\n flow = { direction: 'forward', momentum: val.history.length - 1, velocity: 1 };\r\n } else if (val.reiType === 'Quad') {\r\n field = { value: val.value };\r\n } else if (val.reiType === 'DNode') {\r\n // DNode — 既存のspace.tsのσと統合\r\n field = { center: val.center, neighbors: [...val.neighbors], layer: val.layerIndex, index: val.nodeIndex };\r\n layer = val.layerIndex;\r\n flow = { stage: val.stage, directions: val.neighbors.length, momentum: val.momentum, velocity: 0 };\r\n if (val.diffusionHistory.length >= 2) {\r\n flow.velocity = Math.abs(\r\n val.diffusionHistory[val.diffusionHistory.length - 1].result -\r\n val.diffusionHistory[val.diffusionHistory.length - 2].result\r\n );\r\n }\r\n } else if (val.reiType === 'Space') {\r\n // Space — 既存のgetSpaceSigmaに委譲(evalPipe側で処理)\r\n field = { type: 'space' };\r\n } else if (Array.isArray(val)) {\r\n field = { length: val.length, first: val[0] ?? null, last: val[val.length - 1] ?? null };\r\n } else {\r\n field = { type: typeof val };\r\n }\r\n } else if (typeof val === 'number') {\r\n field = { center: val, neighbors: [] };\r\n } else if (typeof val === 'string') {\r\n field = { value: val, length: val.length };\r\n } else if (typeof val === 'boolean') {\r\n field = { value: val };\r\n } else {\r\n field = { value: null };\r\n }\r\n\r\n // ── memory: 来歴 ──\r\n const memory = [...meta.memory];\r\n\r\n // Genesis の来歴との統合\r\n if (val !== null && typeof val === 'object' && val.reiType === 'State' && val.history) {\r\n if (memory.length === 0 && val.history.length > 1) {\r\n for (let i = 0; i < val.history.length - 1; i++) {\r\n memory.push(val.history[i]);\r\n }\r\n }\r\n }\r\n\r\n // ── will: 傾向性(C2) ──\r\n const will = {\r\n tendency: meta.tendency as any,\r\n strength: meta.pipeCount > 0 ? Math.min(meta.pipeCount / 5, 1) : 0,\r\n history: meta.memory.map((_: any, i: number) => {\r\n if (i === 0) return 'rest';\r\n const prev = toNumSafe(meta.memory[i - 1]);\r\n const cur = toNumSafe(meta.memory[i]);\r\n return cur > prev ? 'expand' : cur < prev ? 'contract' : 'rest';\r\n }),\r\n };\r\n\r\n return {\r\n reiType: 'SigmaResult',\r\n field,\r\n flow,\r\n memory,\r\n layer,\r\n will,\r\n relation: [],\r\n };\r\n}\r\n\r\n// --- Environment (Scope) ---\r\n\r\nexport class Environment {\r\n parent: Environment | null;\r\n bindings = new Map<string, { value: any; mutable: boolean }>();\r\n\r\n constructor(parent: Environment | null = null) {\r\n this.parent = parent;\r\n }\r\n\r\n define(name: string, value: any, mutable = false) {\r\n this.bindings.set(name, { value, mutable });\r\n }\r\n\r\n get(name: string): any {\r\n const b = this.bindings.get(name);\r\n if (b) return b.value;\r\n if (this.parent) return this.parent.get(name);\r\n throw new Error(`未定義の変数: ${name}`);\r\n }\r\n\r\n set(name: string, value: any) {\r\n const b = this.bindings.get(name);\r\n if (b) {\r\n if (!b.mutable) throw new Error(`不変の変数に代入: ${name}`);\r\n b.value = value;\r\n return;\r\n }\r\n if (this.parent) { this.parent.set(name, value); return; }\r\n throw new Error(`未定義の変数: ${name}`);\r\n }\r\n\r\n has(name: string): boolean {\r\n if (this.bindings.has(name)) return true;\r\n if (this.parent) return this.parent.has(name);\r\n return false;\r\n }\r\n\r\n getBinding(name: string): any {\r\n const b = this.bindings.get(name);\r\n if (b) return b;\r\n if (this.parent) return this.parent.getBinding(name);\r\n return null;\r\n }\r\n\r\n allBindings(): Map<string, { value: any; mutable: boolean }> {\r\n const all = new Map<string, { value: any; mutable: boolean }>();\r\n if (this.parent) {\r\n for (const [k, v] of this.parent.allBindings()) all.set(k, v);\r\n }\r\n for (const [k, v] of this.bindings) all.set(k, v);\r\n return all;\r\n }\r\n}\r\n\r\n// --- Extended numbers ---\r\n\r\nfunction createExtended(base: number, subscripts: string) {\r\n const order = subscripts.length;\r\n return {\r\n reiType: \"Ext\" as const,\r\n base,\r\n order,\r\n subscripts,\r\n valStar() {\r\n if (base === 0) return Math.pow(0.1, order);\r\n return base * Math.pow(0.1, order);\r\n },\r\n };\r\n}\r\n\r\nfunction parseExtLit(raw: string) {\r\n if (raw === \"0\\u2080\") return createExtended(0, \"o\");\r\n const baseChar = raw[0];\r\n const subs = raw.slice(1);\r\n const baseMap: Record<string, number> = {\r\n \"0\": 0, \"\\u03C0\": Math.PI, \"e\": Math.E,\r\n \"\\u03C6\": (1 + Math.sqrt(5)) / 2, \"i\": NaN,\r\n };\r\n return createExtended(baseMap[baseChar] ?? 0, subs);\r\n}\r\n\r\n// --- MDim computation (v0.2.1 original) ---\r\n\r\n// ═══════════════════════════════════════════\r\n// Tier 2: 利用可能な全計算モード一覧(M1: 計算多元性公理)\r\n// ═══════════════════════════════════════════\r\nconst ALL_COMPUTE_MODES = [\r\n \"weighted\", \"multiplicative\", \"harmonic\", \"exponential\",\r\n \"geometric\", \"median\", \"minkowski\", \"entropy\",\r\n] as const;\r\n\r\nfunction computeMDim(md: any): number {\r\n const { center, neighbors, mode } = md;\r\n const weights = md.weights ?? neighbors.map(() => 1);\r\n const n = neighbors.length;\r\n if (n === 0) return center;\r\n\r\n // Tier 2 M3: blend モード — blend(weighted:0.7,geometric:0.3)\r\n if (typeof mode === 'string' && mode.startsWith('blend(')) {\r\n return computeBlend(md, mode);\r\n }\r\n\r\n switch (mode) {\r\n case \"weighted\": {\r\n const wSum = weights.reduce((a: number, b: number) => a + b, 0);\r\n const wAvg = neighbors.reduce((sum: number, v: number, i: number) => sum + (weights[i] ?? 1) * v, 0) / (wSum || 1);\r\n return center + wAvg;\r\n }\r\n case \"multiplicative\": {\r\n const prod = neighbors.reduce((p: number, v: number) => p * (1 + v), 1);\r\n return center * prod;\r\n }\r\n case \"harmonic\": {\r\n const harmSum = neighbors.reduce((s: number, v: number) => s + 1 / (Math.abs(v) || 1), 0);\r\n return center + n / harmSum;\r\n }\r\n case \"exponential\": {\r\n const expSum = neighbors.reduce((s: number, v: number) => s + Math.exp(v), 0);\r\n return center * (expSum / n);\r\n }\r\n // ── Tier 2 M1: 新計算モード ──\r\n case \"geometric\": {\r\n // 幾何平均: center × (Π|neighbors|)^(1/n)\r\n const prod = neighbors.reduce((p: number, v: number) => p * Math.abs(v || 1), 1);\r\n return center * Math.pow(prod, 1 / n);\r\n }\r\n case \"median\": {\r\n // 中央値: center + median(neighbors)\r\n const sorted = [...neighbors].sort((a: number, b: number) => a - b);\r\n const mid = Math.floor(n / 2);\r\n const med = n % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];\r\n return center + med;\r\n }\r\n case \"minkowski\": {\r\n // ミンコフスキー距離(p=2, ユークリッド距離): center + sqrt(Σ(neighbors²)/n)\r\n const p = md.minkowskiP ?? 2;\r\n const sumP = neighbors.reduce((s: number, v: number) => s + Math.pow(Math.abs(v), p), 0);\r\n return center + Math.pow(sumP / n, 1 / p);\r\n }\r\n case \"entropy\": {\r\n // 情報エントロピー: center × (1 + H(neighbors))\r\n const total = neighbors.reduce((s: number, v: number) => s + Math.abs(v), 0) || 1;\r\n const probs = neighbors.map((v: number) => Math.abs(v) / total);\r\n const H = -probs.reduce((s: number, p: number) => s + (p > 0 ? p * Math.log2(p) : 0), 0);\r\n return center * (1 + H);\r\n }\r\n default: return center;\r\n }\r\n}\r\n\r\n/** Tier 2 M3: モード合成 — blend(weighted:0.7,geometric:0.3) */\r\nfunction computeBlend(md: any, blendSpec: string): number {\r\n // Parse: \"blend(weighted:0.7,geometric:0.3)\"\r\n const inner = blendSpec.slice(6, -1); // remove \"blend(\" and \")\"\r\n const parts = inner.split(',').map(s => s.trim());\r\n let totalWeight = 0;\r\n let blendedResult = 0;\r\n\r\n for (const part of parts) {\r\n const [modeName, weightStr] = part.split(':').map(s => s.trim());\r\n const w = parseFloat(weightStr) || 0;\r\n const result = computeMDim({ ...md, mode: modeName });\r\n blendedResult += w * result;\r\n totalWeight += w;\r\n }\r\n\r\n return totalWeight > 0 ? blendedResult / totalWeight : md.center;\r\n}\r\n\r\n/** Tier 2 N1: 配列・文字列・数値を𝕄に射影する */\r\nfunction projectToMDim(input: any, centerSpec: string | number | null, args: any[]): any {\r\n let elements: any[];\r\n\r\n // 入力を要素配列に変換\r\n if (Array.isArray(input)) {\r\n elements = [...input];\r\n } else if (typeof input === 'string') {\r\n // 文字列 → 文字コード配列\r\n elements = Array.from(input).map(c => c.charCodeAt(0));\r\n } else if (typeof input === 'number') {\r\n // 数値 → 桁の配列\r\n const digits = Math.abs(input).toString().split('').map(Number);\r\n elements = digits;\r\n } else if (input !== null && typeof input === 'object' && input.reiType === 'MDim') {\r\n // MDimの再射影(N2: reproject)\r\n elements = [input.center, ...input.neighbors];\r\n } else {\r\n return { reiType: \"MDim\", center: input ?? 0, neighbors: [], mode: \"weighted\" };\r\n }\r\n\r\n if (elements.length === 0) {\r\n return { reiType: \"MDim\", center: 0, neighbors: [], mode: \"weighted\" };\r\n }\r\n\r\n // 中心の選択\r\n let centerIndex = 0;\r\n if (centerSpec === ':max' || centerSpec === 'max') {\r\n centerIndex = elements.indexOf(Math.max(...elements.map(Number)));\r\n } else if (centerSpec === ':min' || centerSpec === 'min') {\r\n centerIndex = elements.indexOf(Math.min(...elements.map(Number)));\r\n } else if (centerSpec === ':first' || centerSpec === 'first') {\r\n centerIndex = 0;\r\n } else if (centerSpec === ':last' || centerSpec === 'last') {\r\n centerIndex = elements.length - 1;\r\n } else if (centerSpec === ':middle' || centerSpec === 'middle') {\r\n centerIndex = Math.floor(elements.length / 2);\r\n } else if (typeof centerSpec === 'number') {\r\n // 具体的な値で指定 → その値を持つ要素を中心にする\r\n const idx = elements.indexOf(centerSpec);\r\n centerIndex = idx >= 0 ? idx : 0;\r\n }\r\n\r\n const center = elements[centerIndex];\r\n const neighbors = elements.filter((_: any, i: number) => i !== centerIndex);\r\n\r\n return { reiType: \"MDim\", center, neighbors, mode: \"weighted\" };\r\n}\r\n\r\n// ═══════════════════════════════════════════\r\n// Tier 3: U1(構造還元公理) & A1(解の多元性公理)\r\n// ═══════════════════════════════════════════\r\n\r\n/** Tier 3 U1: 全射影の生成 — 各要素を中心にした𝕄の配列 */\r\nfunction projectAll(input: any): any[] {\r\n let elements: any[];\r\n\r\n if (Array.isArray(input)) {\r\n elements = [...input];\r\n } else if (typeof input === 'string') {\r\n elements = Array.from(input).map(c => c.charCodeAt(0));\r\n } else if (typeof input === 'number') {\r\n elements = Math.abs(input).toString().split('').map(Number);\r\n } else if (input !== null && typeof input === 'object' && input.reiType === 'MDim') {\r\n elements = [input.center, ...input.neighbors];\r\n } else {\r\n return [{ reiType: \"MDim\", center: input ?? 0, neighbors: [], mode: \"weighted\" }];\r\n }\r\n\r\n if (elements.length === 0) return [];\r\n\r\n // U1.2(射影の多重性定理): n要素 → n通りの射影\r\n return elements.map((_, centerIdx) => {\r\n const center = elements[centerIdx];\r\n const neighbors = elements.filter((_: any, i: number) => i !== centerIdx);\r\n return { reiType: \"MDim\", center, neighbors, mode: \"weighted\" };\r\n });\r\n}\r\n\r\n/** Tier 3 A1: 全モードで計算 — 解の多元性 */\r\nfunction computeAll(md: any): any {\r\n if (!md || md.reiType !== 'MDim') return [];\r\n return ALL_COMPUTE_MODES.map(mode => ({\r\n mode,\r\n value: computeMDim({ ...md, mode }),\r\n }));\r\n}\r\n\r\n/** Tier 3 A1: 2つのモードを比較 */\r\nfunction compareModes(md: any, mode1: string, mode2: string): any {\r\n if (!md || md.reiType !== 'MDim') return null;\r\n const v1 = computeMDim({ ...md, mode: mode1 });\r\n const v2 = computeMDim({ ...md, mode: mode2 });\r\n return {\r\n reiType: 'CompareResult',\r\n mode1: { mode: mode1, value: v1 },\r\n mode2: { mode: mode2, value: v2 },\r\n diff: Math.abs(v1 - v2),\r\n ratio: v2 !== 0 ? v1 / v2 : Infinity,\r\n };\r\n}\r\n\r\n/** Tier 3 U1+A1: perspectives — 全射影 × 全モード */\r\nfunction perspectives(input: any): any {\r\n const allProjections = projectAll(input);\r\n return allProjections.map((proj, idx) => {\r\n const results = ALL_COMPUTE_MODES.map(mode => ({\r\n mode,\r\n value: computeMDim({ ...proj, mode }),\r\n }));\r\n return {\r\n projectionIndex: idx,\r\n center: proj.center,\r\n neighbors: proj.neighbors,\r\n results,\r\n };\r\n });\r\n}\r\n\r\n/** Tier 3 U1: ネスト𝕄のフラット化 — 𝕄{𝕄{a;b}; 𝕄{c;d}} → 単一数値 */\r\nfunction computeNestedMDim(md: any): number {\r\n const center = md.reiType === 'MDim'\r\n ? (md.center !== null && typeof md.center === 'object' && md.center.reiType === 'MDim'\r\n ? computeNestedMDim(md.center)\r\n : typeof md.center === 'number' ? md.center : 0)\r\n : (typeof md === 'number' ? md : 0);\r\n\r\n const neighbors = (md.neighbors ?? []).map((n: any) =>\r\n n !== null && typeof n === 'object' && n.reiType === 'MDim'\r\n ? computeNestedMDim(n)\r\n : typeof n === 'number' ? n : 0\r\n );\r\n\r\n return computeMDim({ ...md, center, neighbors });\r\n}\r\n\r\n// ═══════════════════════════════════════════\r\n// Tier 4: C3(応答公理) & C4(覚醒公理) & U2(変換保存) & M2(モード等価)\r\n// ═══════════════════════════════════════════\r\n\r\n/**\r\n * Tier 4 C3: 応答 — 値が外部刺激に反応して変化する\r\n * 仏教対応: 触(phassa)— 感覚器官と対象の接触による反応\r\n */\r\nfunction respondToStimulus(input: any, stimulus: number, method: string = 'absorb'): any {\r\n if (input !== null && typeof input === 'object' && input.reiType === 'MDim') {\r\n const md = input;\r\n switch (method) {\r\n case 'absorb': {\r\n // 刺激を吸収: centerが刺激の影響を受ける\r\n const factor = stimulus / (Math.abs(md.center) + Math.abs(stimulus) || 1);\r\n const newCenter = md.center + stimulus * factor;\r\n return { ...md, center: newCenter };\r\n }\r\n case 'distribute': {\r\n // 刺激を近傍に分配\r\n const share = stimulus / (md.neighbors.length || 1);\r\n const newNeighbors = md.neighbors.map((n: number) => n + share);\r\n return { ...md, neighbors: newNeighbors };\r\n }\r\n case 'reflect': {\r\n // 刺激を反射(centerはそのまま、近傍が反転方向に変化)\r\n const newNeighbors = md.neighbors.map((n: number) => n - stimulus / (md.neighbors.length || 1));\r\n return { ...md, neighbors: newNeighbors };\r\n }\r\n case 'resonate': {\r\n // 刺激と共鳴(全体がstimulus周波数で変調)\r\n const newCenter = md.center * (1 + Math.sin(stimulus));\r\n const newNeighbors = md.neighbors.map((n: number, i: number) =>\r\n n * (1 + Math.sin(stimulus + (i + 1) * Math.PI / md.neighbors.length))\r\n );\r\n return { ...md, center: newCenter, neighbors: newNeighbors };\r\n }\r\n default:\r\n return respondToStimulus(input, stimulus, 'absorb');\r\n }\r\n }\r\n\r\n // 非𝕄: 数値は単純加算\r\n if (typeof input === 'number') return input + stimulus;\r\n return input;\r\n}\r\n\r\n/**\r\n * Tier 4 C3: 感度 — 値が刺激にどれだけ敏感かを測定\r\n * 微小刺激に対する変化率\r\n */\r\nfunction computeSensitivity(input: any): number {\r\n if (input !== null && typeof input === 'object' && input.reiType === 'MDim') {\r\n const original = computeMDim(input);\r\n const epsilon = 0.001;\r\n const perturbed = respondToStimulus(input, epsilon, 'absorb');\r\n const perturbedVal = computeMDim(perturbed);\r\n return Math.abs(perturbedVal - original) / epsilon;\r\n }\r\n if (typeof input === 'number') return 1.0; // 数値は常に感度1\r\n return 0;\r\n}\r\n\r\n/**\r\n * Tier 4 C4: 覚醒度 — σの豊かさに基づく自己認識スコア\r\n * 仏教対応: 菩提(bodhi)— 悟りへの段階\r\n *\r\n * スコア要素:\r\n * - memory の深さ(パイプ通過履歴)\r\n * - tendency の変化(静止でない)\r\n * - 構造の複雑さ(近傍の数)\r\n * - pipeCount(変換回数)\r\n */\r\nfunction computeAwareness(input: any, meta: SigmaMetadata): number {\r\n let score = 0;\r\n const maxScore = 5;\r\n\r\n // 1. 記憶の深さ(0〜1)\r\n score += Math.min(meta.memory.length / 5, 1);\r\n\r\n // 2. 傾向性が静止でない(0 or 1)\r\n if (meta.tendency !== 'rest') score += 1;\r\n\r\n // 3. パイプ通過回数(0〜1)\r\n score += Math.min(meta.pipeCount / 5, 1);\r\n\r\n // 4. 構造の複雑さ(0〜1)\r\n const raw = unwrapReiVal(input);\r\n if (raw !== null && typeof raw === 'object') {\r\n if (raw.reiType === 'MDim' && raw.neighbors) {\r\n score += Math.min(raw.neighbors.length / 8, 1);\r\n } else if (raw.reiType === 'Space') {\r\n score += 1; // Spaceは最も複雑\r\n } else if (raw.reiType === 'State' && raw.history) {\r\n score += Math.min(raw.history.length / 5, 1);\r\n }\r\n }\r\n\r\n // 5. 記憶の多様性(同じ値ばかりでないか)\r\n if (meta.memory.length >= 2) {\r\n const unique = new Set(meta.memory.map(v => JSON.stringify(v)));\r\n score += Math.min(unique.size / meta.memory.length, 1);\r\n }\r\n\r\n return Math.min(score / maxScore, 1);\r\n}\r\n\r\n/** Tier 4 C4: 覚醒閾値 — awareness >= 0.6 で覚醒 */\r\nconst AWAKENING_THRESHOLD = 0.6;\r\n\r\n/**\r\n * Tier 4 U2: 変換パターンの統一適用\r\n * 異なる領域の変換を𝕄上の同じパイプ操作で表現\r\n */\r\nfunction applyTransform(input: any, transformName: string, param: number): any {\r\n const raw = unwrapReiVal(input);\r\n\r\n if (raw !== null && typeof raw === 'object' && raw.reiType === 'MDim') {\r\n const md = raw;\r\n switch (transformName) {\r\n case 'scale': {\r\n // スケール変換: 全要素をparam倍\r\n return { ...md, center: md.center * param, neighbors: md.neighbors.map((n: number) => n * param) };\r\n }\r\n case 'shift': {\r\n // シフト変換: 全要素にparam加算\r\n return { ...md, center: md.center + param, neighbors: md.neighbors.map((n: number) => n + param) };\r\n }\r\n case 'rotate': {\r\n // 回転変換: 近傍をparam位置ずらす\r\n const n = md.neighbors.length;\r\n if (n === 0) return md;\r\n const shift = ((param % n) + n) % n;\r\n const rotated = [...md.neighbors.slice(shift), ...md.neighbors.slice(0, shift)];\r\n return { ...md, neighbors: rotated };\r\n }\r\n case 'invert': {\r\n // 反転変換: center基準で近傍を反転\r\n return { ...md, neighbors: md.neighbors.map((n: number) => 2 * md.center - n) };\r\n }\r\n case 'normalize_to': {\r\n // 正規化変換: 全要素の和がparamになるよう正規化\r\n const total = Math.abs(md.center) + md.neighbors.reduce((s: number, v: number) => s + Math.abs(v), 0) || 1;\r\n const factor = param / total;\r\n return { ...md, center: md.center * factor, neighbors: md.neighbors.map((n: number) => n * factor) };\r\n }\r\n default:\r\n throw new Error(`未知の変換: ${transformName}`);\r\n }\r\n }\r\n\r\n // 数値への変換\r\n if (typeof raw === 'number') {\r\n switch (transformName) {\r\n case 'scale': return raw * param;\r\n case 'shift': return raw + param;\r\n case 'invert': return -raw;\r\n default: return raw;\r\n }\r\n }\r\n\r\n return raw;\r\n}\r\n\r\n/**\r\n * Tier 4 M2: モード等価判定\r\n * 2つのモードが同じ型の出力を返すことを確認\r\n */\r\nfunction checkModeEquivalence(md: any, mode1: string, mode2: string): any {\r\n if (!md || md.reiType !== 'MDim') return { equivalent: false, reason: 'non-MDim input' };\r\n const v1 = computeMDim({ ...md, mode: mode1 });\r\n const v2 = computeMDim({ ...md, mode: mode2 });\r\n return {\r\n reiType: 'ModeEquivResult',\r\n mode1,\r\n mode2,\r\n type_equivalent: typeof v1 === typeof v2, // M2: 出力型が等価\r\n value1: v1,\r\n value2: v2,\r\n relative_diff: Math.abs(v2) > 0 ? Math.abs(v1 - v2) / Math.abs(v2) : (v1 === v2 ? 0 : Infinity),\r\n };\r\n}\r\n\r\n// --- Quad logic (v0.2.1) ---\r\n\r\n// ============================================================\r\n// Tier 5: C5(共鳴) & N3-N5(非数数学) & M4-M5(モード生成・完全性)\r\n// U3-U5(階層再帰・架橋・完全性) & A2-A5(解変換・合成・評価・完全性)\r\n// ============================================================\r\n\r\n/**\r\n * Tier 5 C5: 共鳴計算 — 2つの𝕄の構造的共鳴度を算出\r\n * 覚醒した値同士が非局所的に影響し合う(仏教: 因陀羅網 Indra's Net)\r\n */\r\nfunction computeResonance(a: any, b: any): any {\r\n const aRaw = unwrapReiVal(a);\r\n const bRaw = unwrapReiVal(b);\r\n\r\n // 数値同士の共鳴: 差の逆数に基づく\r\n const aNum = typeof aRaw === 'number' ? aRaw : (aRaw?.center ?? 0);\r\n const bNum = typeof bRaw === 'number' ? bRaw : (bRaw?.center ?? 0);\r\n\r\n // 構造的共鳴: 次元の一致度\r\n const aDim = aRaw?.neighbors?.length ?? 0;\r\n const bDim = bRaw?.neighbors?.length ?? 0;\r\n const dimMatch = aDim === 0 && bDim === 0 ? 1 : 1 - Math.abs(aDim - bDim) / Math.max(aDim, bDim, 1);\r\n\r\n // 値の近接度\r\n const maxAbs = Math.max(Math.abs(aNum), Math.abs(bNum), 1);\r\n const valueProximity = 1 - Math.abs(aNum - bNum) / maxAbs;\r\n\r\n // 近傍パターンの類似度(余弦類似度)\r\n let patternSimilarity = 0;\r\n if (aDim > 0 && bDim > 0) {\r\n const minLen = Math.min(aDim, bDim);\r\n const aN = aRaw.neighbors.slice(0, minLen);\r\n const bN = bRaw.neighbors.slice(0, minLen);\r\n const dotProduct = aN.reduce((s: number, v: number, i: number) => s + v * bN[i], 0);\r\n const normA = Math.sqrt(aN.reduce((s: number, v: number) => s + v * v, 0)) || 1;\r\n const normB = Math.sqrt(bN.reduce((s: number, v: number) => s + v * v, 0)) || 1;\r\n patternSimilarity = dotProduct / (normA * normB);\r\n }\r\n\r\n // 総合共鳴度: 3要素の加重平均\r\n const strength = (dimMatch * 0.3 + Math.max(valueProximity, 0) * 0.3 + (patternSimilarity + 1) / 2 * 0.4);\r\n\r\n return {\r\n reiType: 'ResonanceResult',\r\n strength: Math.max(0, Math.min(1, strength)),\r\n dimMatch,\r\n valueProximity: Math.max(0, valueProximity),\r\n patternSimilarity,\r\n resonates: strength >= 0.5,\r\n };\r\n}\r\n\r\n/**\r\n * Tier 5 C5: 共鳴場 — 値の共鳴メタデータを返す\r\n */\r\nfunction getResonanceField(input: any, meta: SigmaMetadata): any {\r\n const raw = unwrapReiVal(input);\r\n const isAwakened = computeAwareness(input, meta) >= AWAKENING_THRESHOLD;\r\n return {\r\n reiType: 'ResonanceField',\r\n awakened: isAwakened,\r\n // 覚醒値はより広い共鳴場を持つ\r\n range: isAwakened ? 'non-local' : 'local',\r\n capacity: isAwakened ? 1.0 : 0.3,\r\n signature: raw?.neighbors?.length ?? 0,\r\n };\r\n}\r\n\r\n/**\r\n * Tier 5 C5: 共鳴マップ — 配列内の全ペアの共鳴を算出\r\n */\r\nfunction resonanceMap(input: any): any {\r\n const raw = unwrapReiVal(input);\r\n if (!Array.isArray(raw)) {\r\n if (raw?.reiType === 'MDim') {\r\n // 𝕄の中心と各近傍の共鳴\r\n return raw.neighbors.map((n: number, i: number) => ({\r\n pair: [raw.center, n],\r\n index: i,\r\n strength: 1 - Math.abs(raw.center - n) / Math.max(Math.abs(raw.center), Math.abs(n), 1),\r\n }));\r\n }\r\n return [];\r\n }\r\n // 配列: 全ペアの共鳴\r\n const results: any[] = [];\r\n for (let i = 0; i < raw.length; i++) {\r\n for (let j = i + 1; j < raw.length; j++) {\r\n const res = computeResonance(raw[i], raw[j]);\r\n results.push({ pair: [i, j], ...res });\r\n }\r\n }\r\n return results;\r\n}\r\n\r\n/**\r\n * Tier 5 C5: 共鳴チェーン — 共鳴の連鎖を追跡\r\n */\r\nfunction resonanceChain(input: any): any {\r\n const raw = unwrapReiVal(input);\r\n if (!raw || raw.reiType !== 'MDim') {\r\n return { reiType: 'ResonanceChain', chain: [], depth: 0 };\r\n }\r\n // 中心→各近傍→近傍同士の共鳴連鎖\r\n const chain: any[] = [];\r\n const visited = new Set<number>();\r\n function trace(value: number, depth: number) {\r\n if (visited.has(value) || depth > 5) return;\r\n visited.add(value);\r\n chain.push({ value, depth });\r\n for (const n of raw.neighbors) {\r\n if (!visited.has(n)) {\r\n const proximity = 1 - Math.abs(value - n) / Math.max(Math.abs(value), Math.abs(n), 1);\r\n if (proximity > 0.3) trace(n, depth + 1);\r\n }\r\n }\r\n }\r\n trace(raw.center, 0);\r\n return { reiType: 'ResonanceChain', chain, depth: chain.length };\r\n}\r\n\r\n/**\r\n * Tier 5 N3: 型変換射影 — 𝕄を異なる構造型として再解釈\r\n */\r\nfunction projectAs(input: any, targetType: string): any {\r\n const raw = unwrapReiVal(input);\r\n\r\n // まず𝕄に変換\r\n let md: any;\r\n if (raw?.reiType === 'MDim') {\r\n md = raw;\r\n } else if (Array.isArray(raw)) {\r\n md = projectToMDim(raw, 'first', []);\r\n } else if (typeof raw === 'number') {\r\n const digits = String(Math.abs(Math.floor(raw))).split('').map(Number);\r\n md = { reiType: 'MDim', center: digits[0], neighbors: digits.slice(1), mode: 'weighted' };\r\n } else {\r\n md = { reiType: 'MDim', center: 0, neighbors: [], mode: 'weighted' };\r\n }\r\n\r\n switch (targetType) {\r\n case 'graph': {\r\n // グラフ構造: center=ハブ, neighbors=接続ノード, edges=ハブから各ノードへ\r\n const edges = md.neighbors.map((n: number, i: number) => ({\r\n from: md.center, to: n, weight: Math.abs(md.center - n),\r\n }));\r\n return {\r\n reiType: 'GraphProjection',\r\n hub: md.center,\r\n nodes: [md.center, ...md.neighbors],\r\n edges,\r\n degree: md.neighbors.length,\r\n };\r\n }\r\n case 'series': {\r\n // 時系列: center=初期値, neighbors=時間ステップ\r\n const series = [md.center, ...md.neighbors];\r\n const deltas = [];\r\n for (let i = 1; i < series.length; i++) deltas.push(series[i] - series[i - 1]);\r\n return {\r\n reiType: 'SeriesProjection',\r\n values: series,\r\n deltas,\r\n trend: deltas.length > 0 ? (deltas.reduce((a: number, b: number) => a + b, 0) / deltas.length > 0 ? 'up' : 'down') : 'flat',\r\n length: series.length,\r\n };\r\n }\r\n case 'matrix': {\r\n // 行列行: center=対角要素, neighbors=非対角要素\r\n const size = md.neighbors.length + 1;\r\n const row = [md.center, ...md.neighbors];\r\n return {\r\n reiType: 'MatrixProjection',\r\n row,\r\n size,\r\n diagonal: md.center,\r\n trace: md.center, // 1行分のtrace\r\n };\r\n }\r\n case 'tree': {\r\n // 木構造: center=root, neighbors=children\r\n const children = md.neighbors.map((n: number, i: number) => ({\r\n value: n, depth: 1, index: i, leaf: true,\r\n }));\r\n return {\r\n reiType: 'TreeProjection',\r\n root: md.center,\r\n children,\r\n height: md.neighbors.length > 0 ? 1 : 0,\r\n leaves: md.neighbors.length,\r\n };\r\n }\r\n default:\r\n throw new Error(`未知の射影型: ${targetType}`);\r\n }\r\n}\r\n\r\n/**\r\n * Tier 5 N4: 射影合成 — 複数の射影を合成して新しい𝕄を生成\r\n */\r\nfunction composeProjections(input: any): any {\r\n const raw = unwrapReiVal(input);\r\n if (!Array.isArray(raw)) {\r\n if (raw?.reiType === 'MDim') {\r\n // 𝕄の全射影を合成: 各射影のcompute結果を新しい近傍に\r\n const allProj = projectAll(raw);\r\n const values = allProj.map((p: any) => computeMDim(p));\r\n const center = values.reduce((a: number, b: number) => a + b, 0) / values.length;\r\n return { reiType: 'MDim', center, neighbors: values, mode: 'weighted' };\r\n }\r\n return raw;\r\n }\r\n // 配列の射影合成: 各射影の中心を新しい𝕄の近傍に\r\n const projected = raw.map((item: any) => {\r\n if (item?.reiType === 'MDim') return item;\r\n return projectToMDim(typeof item === 'number' ? [item] : item, 'first', []);\r\n });\r\n const centers = projected.map((p: any) => p.center);\r\n const avgCenter = centers.reduce((a: number, b: number) => a + b, 0) / centers.length;\r\n return { reiType: 'MDim', center: avgCenter, neighbors: centers, mode: 'weighted' };\r\n}\r\n\r\n/**\r\n * Tier 5 N5: 表現可能性判定 — 任意の値が𝕄として表現可能かを判定\r\n */\r\nfunction checkRepresentable(input: any): any {\r\n const raw = unwrapReiVal(input);\r\n const result = { reiType: 'RepresentableResult', representable: true, reason: '', lossless: true };\r\n\r\n if (raw === null || raw === undefined) {\r\n result.representable = true;\r\n result.reason = 'null → 𝕄{0;}';\r\n result.lossless = true;\r\n } else if (typeof raw === 'number') {\r\n result.representable = true;\r\n result.reason = 'number → 𝕄{n;}';\r\n result.lossless = true;\r\n } else if (typeof raw === 'string') {\r\n result.representable = true;\r\n result.reason = 'string → 𝕄{charCode(center); charCodes(rest)}';\r\n result.lossless = true;\r\n } else if (typeof raw === 'boolean') {\r\n result.representable = true;\r\n result.reason = 'boolean → 𝕄{0|1;}';\r\n result.lossless = true;\r\n } else if (Array.isArray(raw)) {\r\n result.representable = true;\r\n result.reason = `array[${raw.length}] → 𝕄{first; rest}`;\r\n result.lossless = true;\r\n } else if (raw?.reiType === 'MDim') {\r\n result.representable = true;\r\n result.reason = 'already 𝕄';\r\n result.lossless = true;\r\n } else if (raw?.reiType === 'Space') {\r\n result.representable = true;\r\n result.reason = 'Space → nested 𝕄 (U3 hierarchical)';\r\n result.lossless = true;\r\n } else if (raw?.reiType) {\r\n result.representable = true;\r\n result.reason = `${raw.reiType} → 𝕄 via structural projection`;\r\n result.lossless = false; // 型情報の一部が失われる可能性\r\n } else if (typeof raw === 'object') {\r\n result.representable = true;\r\n result.reason = 'object → 𝕄{keys; values}';\r\n result.lossless = false;\r\n } else {\r\n result.representable = false;\r\n result.reason = `unknown type: ${typeof raw}`;\r\n result.lossless = false;\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Tier 5 M4: モード導出 — 既存2モードの合成で新モードを生成\r\n */\r\nfunction deriveMode(md: any, baseModes: string[], weights: number[]): any {\r\n if (!md || md.reiType !== 'MDim') throw new Error('derive_mode: 𝕄型が必要です');\r\n const results = baseModes.map(m => computeMDim({ ...md, mode: m }));\r\n let derived = 0;\r\n let totalWeight = 0;\r\n for (let i = 0; i < results.length; i++) {\r\n const w = weights[i] ?? 1;\r\n derived += results[i] * w;\r\n totalWeight += w;\r\n }\r\n derived = totalWeight > 0 ? derived / totalWeight : 0;\r\n return {\r\n reiType: 'DerivedModeResult',\r\n value: derived,\r\n baseModes,\r\n weights,\r\n formula: baseModes.map((m, i) => `${weights[i] ?? 1}×${m}`).join(' + '),\r\n };\r\n}\r\n\r\n/**\r\n * Tier 5 M5: モード空間 — 全モードの完全記述\r\n */\r\nfunction getModeSpace(md: any): any {\r\n if (!md || md.reiType !== 'MDim') {\r\n return { reiType: 'ModeSpace', modes: ALL_COMPUTE_MODES.length, values: [], coverage: 0 };\r\n }\r\n const values = ALL_COMPUTE_MODES.map(mode => ({\r\n mode,\r\n value: computeMDim({ ...md, mode }),\r\n }));\r\n // モード間の距離行列\r\n const distances: number[][] = [];\r\n for (let i = 0; i < values.length; i++) {\r\n distances[i] = [];\r\n for (let j = 0; j < values.length; j++) {\r\n distances[i][j] = Math.abs(values[i].value - values[j].value);\r\n }\r\n }\r\n // 分散(多様性の指標)\r\n const allVals = values.map(v => v.value);\r\n const mean = allVals.reduce((a, b) => a + b, 0) / allVals.length;\r\n const variance = allVals.reduce((a, v) => a + (v - mean) ** 2, 0) / allVals.length;\r\n return {\r\n reiType: 'ModeSpace',\r\n modes: ALL_COMPUTE_MODES.length,\r\n values,\r\n variance,\r\n diversity: Math.sqrt(variance),\r\n coverage: 1.0, // 全モード利用可能\r\n };\r\n}\r\n\r\n/**\r\n * Tier 5 U3: ネスト深度の計測\r\n */\r\nfunction measureDepth(input: any): number {\r\n const raw = unwrapReiVal(input);\r\n if (!raw || raw.reiType !== 'MDim') return 0;\r\n\r\n let maxDepth = 0;\r\n // centerが𝕄なら再帰\r\n if (raw.center !== null && typeof raw.center === 'object' && raw.center.reiType === 'MDim') {\r\n maxDepth = Math.max(maxDepth, 1 + measureDepth(raw.center));\r\n }\r\n // neighborsに𝕄があれば再帰\r\n if (raw.neighbors) {\r\n for (const n of raw.neighbors) {\r\n if (n !== null && typeof n === 'object' && n.reiType === 'MDim') {\r\n maxDepth = Math.max(maxDepth, 1 + measureDepth(n));\r\n }\r\n }\r\n }\r\n return maxDepth;\r\n}\r\n\r\n/**\r\n * Tier 5 U3: ネスト化 — 𝕄を指定レベル分ネストする\r\n */\r\nfunction nestMDim(input: any, levels: number = 1): any {\r\n const raw = unwrapReiVal(input);\r\n if (!raw || raw.reiType !== 'MDim') {\r\n // 非𝕄はまず𝕄に変換\r\n const md = { reiType: 'MDim', center: typeof raw === 'number' ? raw : 0, neighbors: [], mode: 'weighted' };\r\n return levels <= 1 ? md : nestMDim(md, levels - 1);\r\n }\r\n if (levels <= 0) return raw;\r\n // 現在の𝕄を新しい𝕄のcenterにラップ\r\n const wrapped = {\r\n reiType: 'MDim',\r\n center: raw,\r\n neighbors: [],\r\n mode: 'weighted',\r\n };\r\n return levels <= 1 ? wrapped : nestMDim(wrapped, levels - 1);\r\n}\r\n\r\n/**\r\n * Tier 5 U3: 再帰的計算 — ネストされた𝕄を底から上へ再帰的に計算\r\n */\r\nfunction recursiveCompute(input: any): number {\r\n const raw = unwrapReiVal(input);\r\n if (typeof raw === 'number') return raw;\r\n if (!raw || raw.reiType !== 'MDim') return 0;\r\n\r\n // centerが𝕄なら再帰的に計算\r\n const centerVal = (raw.center?.reiType === 'MDim')\r\n ? recursiveCompute(raw.center)\r\n : (typeof raw.center === 'number' ? raw.center : 0);\r\n\r\n // neighborsも再帰的に計算\r\n const neighborVals = (raw.neighbors || []).map((n: any) =>\r\n (n?.reiType === 'MDim') ? recursiveCompute(n) : (typeof n === 'number' ? n : 0)\r\n );\r\n\r\n // フラット化した値でcomputeMDim\r\n return computeMDim({\r\n reiType: 'MDim',\r\n center: centerVal,\r\n neighbors: neighborVals,\r\n mode: raw.mode || 'weighted',\r\n });\r\n}\r\n\r\n/**\r\n * Tier 5 U4: 構造的類似度 — 2つの𝕄の構造的類似性を算出\r\n */\r\nfunction structuralSimilarity(a: any, b: any): any {\r\n const aRaw = unwrapReiVal(a);\r\n const bRaw = unwrapReiVal(b);\r\n\r\n // 次元の一致度\r\n const aDim = aRaw?.neighbors?.length ?? 0;\r\n const bDim = bRaw?.neighbors?.length ?? 0;\r\n const dimSim = aDim === 0 && bDim === 0 ? 1 : 1 - Math.abs(aDim - bDim) / Math.max(aDim, bDim, 1);\r\n\r\n // 比率パターンの類似度\r\n const aCenter = typeof aRaw === 'number' ? aRaw : (aRaw?.center ?? 0);\r\n const bCenter = typeof bRaw === 'number' ? bRaw : (bRaw?.center ?? 0);\r\n const aRatios = (aRaw?.neighbors ?? []).map((n: number) => aCenter !== 0 ? n / aCenter : n);\r\n const bRatios = (bRaw?.neighbors ?? []).map((n: number) => bCenter !== 0 ? n / bCenter : n);\r\n\r\n let ratioSim = 0;\r\n if (aRatios.length > 0 && bRatios.length > 0) {\r\n const minLen = Math.min(aRatios.length, bRatios.length);\r\n let sumDiff = 0;\r\n for (let i = 0; i < minLen; i++) {\r\n sumDiff += Math.abs(aRatios[i] - bRatios[i]);\r\n }\r\n ratioSim = 1 / (1 + sumDiff / minLen);\r\n } else if (aRatios.length === 0 && bRatios.length === 0) {\r\n ratioSim = 1;\r\n }\r\n\r\n // モードの一致\r\n const modeSim = (aRaw?.mode ?? 'weighted') === (bRaw?.mode ?? 'weighted') ? 1 : 0.5;\r\n\r\n const similarity = dimSim * 0.4 + ratioSim * 0.4 + modeSim * 0.2;\r\n\r\n return {\r\n reiType: 'SimilarityResult',\r\n similarity,\r\n dimSimilarity: dimSim,\r\n ratioSimilarity: ratioSim,\r\n modeSimilarity: modeSim,\r\n isomorphic: similarity > 0.9,\r\n };\r\n}\r\n\r\n/**\r\n * Tier 5 U4: 領域架橋 — 2つの𝕄間の構造的マッピングを生成\r\n */\r\nfunction bridgeMDim(a: any, b: any): any {\r\n const sim = structuralSimilarity(a, b);\r\n const aRaw = unwrapReiVal(a);\r\n const bRaw = unwrapReiVal(b);\r\n const aCenter = typeof aRaw === 'number' ? aRaw : (aRaw?.center ?? 0);\r\n const bCenter = typeof bRaw === 'number' ? bRaw : (bRaw?.center ?? 0);\r\n\r\n // スケールファクターの計算\r\n const scaleFactor = aCenter !== 0 ? bCenter / aCenter : 1;\r\n\r\n return {\r\n reiType: 'BridgeResult',\r\n similarity: sim.similarity,\r\n scaleFactor,\r\n mapping: {\r\n centerA: aCenter,\r\n centerB: bCenter,\r\n dimA: aRaw?.neighbors?.length ?? 0,\r\n dimB: bRaw?.neighbors?.length ?? 0,\r\n },\r\n transferable: sim.similarity > 0.5,\r\n };\r\n}\r\n\r\n/**\r\n * Tier 5 U5: エンコード — 任意の値を𝕄に変換\r\n */\r\nfunction encodeMDim(input: any): any {\r\n const raw = unwrapReiVal(input);\r\n if (raw?.reiType === 'MDim') return raw;\r\n if (typeof raw === 'number') {\r\n return { reiType: 'MDim', center: raw, neighbors: [], mode: 'weighted' };\r\n }\r\n if (typeof raw === 'string') {\r\n const codes = Array.from(raw).map(c => c.charCodeAt(0));\r\n if (codes.length === 0) return { reiType: 'MDim', center: 0, neighbors: [], mode: 'weighted' };\r\n return { reiType: 'MDim', center: codes[0], neighbors: codes.slice(1), mode: 'weighted' };\r\n }\r\n if (typeof raw === 'boolean') {\r\n return { reiType: 'MDim', center: raw ? 1 : 0, neighbors: [], mode: 'weighted' };\r\n }\r\n if (raw === null || raw === undefined) {\r\n return { reiType: 'MDim', center: 0, neighbors: [], mode: 'weighted' };\r\n }\r\n if (Array.isArray(raw)) {\r\n const nums = raw.map((v: any) => typeof v === 'number' ? v : 0);\r\n return { reiType: 'MDim', center: nums[0] ?? 0, neighbors: nums.slice(1), mode: 'weighted' };\r\n }\r\n // オブジェクト型 — キー数をcenter, 値を近傍に\r\n if (typeof raw === 'object') {\r\n const values = Object.values(raw).filter(v => typeof v === 'number') as number[];\r\n return { reiType: 'MDim', center: values[0] ?? 0, neighbors: values.slice(1), mode: 'weighted' };\r\n }\r\n return { reiType: 'MDim', center: 0, neighbors: [], mode: 'weighted' };\r\n}\r\n\r\n/**\r\n * Tier 5 U5: デコード — 𝕄を指定型に変換\r\n */\r\nfunction decodeMDim(input: any, targetType: string): any {\r\n const raw = unwrapReiVal(input);\r\n const md = raw?.reiType === 'MDim' ? raw : encodeMDim(raw);\r\n\r\n switch (targetType) {\r\n case 'number':\r\n return computeMDim(md);\r\n case 'array':\r\n return [md.center, ...md.neighbors];\r\n case 'string':\r\n return String.fromCharCode(md.center, ...md.neighbors);\r\n case 'object':\r\n const obj: any = { center: md.center };\r\n md.neighbors.forEach((n: number, i: number) => { obj[`n${i}`] = n; });\r\n return obj;\r\n default:\r\n return [md.center, ...md.neighbors];\r\n }\r\n}\r\n\r\n/**\r\n * Tier 5 A2: 解変換 — compute_allの結果に変換を適用\r\n */\r\nfunction mapSolutions(md: any, transformName: string, param: number = 1): any {\r\n const solutions = computeAll(md);\r\n return solutions.map((sol: any) => {\r\n let transformed: number;\r\n switch (transformName) {\r\n case 'scale': transformed = sol.value * param; break;\r\n case 'shift': transformed = sol.value + param; break;\r\n case 'normalize': {\r\n const maxVal = Math.max(...solutions.map((s: any) => Math.abs(s.value)), 1);\r\n transformed = sol.value / maxVal;\r\n break;\r\n }\r\n case 'rank_normalize': {\r\n const sorted = [...solutions].sort((a: any, b: any) => a.value - b.value);\r\n const rank = sorted.findIndex((s: any) => s.mode === sol.mode);\r\n transformed = (rank + 1) / solutions.length;\r\n break;\r\n }\r\n default: transformed = sol.value;\r\n }\r\n return { ...sol, original: sol.value, value: transformed, transform: transformName };\r\n });\r\n}\r\n\r\n/**\r\n * Tier 5 A3: 合意形成 — 全モードの結果からコンセンサスを算出\r\n */\r\nfunction computeConsensus(md: any): any {\r\n const solutions = computeAll(md);\r\n const values = solutions.map((s: any) => s.value);\r\n\r\n // 中央値(ロバストなコンセンサス)\r\n const sorted = [...values].sort((a: number, b: number) => a - b);\r\n const median = sorted.length % 2 === 0\r\n ? (sorted[sorted.length / 2 - 1] + sorted[sorted.length / 2]) / 2\r\n : sorted[Math.floor(sorted.length / 2)];\r\n\r\n // 平均\r\n const mean = values.reduce((a: number, b: number) => a + b, 0) / values.length;\r\n\r\n // 標準偏差(合意の度合い)\r\n const variance = values.reduce((a: number, v: number) => a + (v - mean) ** 2, 0) / values.length;\r\n const stddev = Math.sqrt(variance);\r\n\r\n // 合意度: 標準偏差が小さいほど高い\r\n const agreement = 1 / (1 + stddev / (Math.abs(mean) || 1));\r\n\r\n return {\r\n reiType: 'ConsensusResult',\r\n median,\r\n mean,\r\n stddev,\r\n agreement,\r\n solutions: solutions.length,\r\n range: { min: sorted[0], max: sorted[sorted.length - 1] },\r\n };\r\n}\r\n\r\n/**\r\n * Tier 5 A4: 最良解選択 — 指定基準で最良の解を選択\r\n */\r\nfunction selectBest(md: any, criteria: string = 'median_closest'): any {\r\n const solutions = computeAll(md);\r\n const values = solutions.map((s: any) => s.value);\r\n\r\n switch (criteria) {\r\n case 'max':\r\n return solutions.reduce((best: any, s: any) => s.value > best.value ? s : best);\r\n case 'min':\r\n return solutions.reduce((best: any, s: any) => s.value < best.value ? s : best);\r\n case 'median_closest':\r\n default: {\r\n const sorted = [...values].sort((a: number, b: number) => a - b);\r\n const median = sorted.length % 2 === 0\r\n ? (sorted[sorted.length / 2 - 1] + sorted[sorted.length / 2]) / 2\r\n : sorted[Math.floor(sorted.length / 2)];\r\n return solutions.reduce((best: any, s: any) =>\r\n Math.abs(s.value - median) < Math.abs(best.value - median) ? s : best\r\n );\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Tier 5 A4: 解のランキング\r\n */\r\nfunction rankSolutions(md: any, criteria: string = 'value'): any {\r\n const solutions = computeAll(md);\r\n const sorted = [...solutions].sort((a: any, b: any) => {\r\n switch (criteria) {\r\n case 'value': return b.value - a.value; // 降順\r\n case 'abs': return Math.abs(b.value) - Math.abs(a.value);\r\n default: return b.value - a.value;\r\n }\r\n });\r\n return sorted.map((s: any, i: number) => ({ ...s, rank: i + 1 }));\r\n}\r\n\r\n/**\r\n * Tier 5 A5: 解の完全性 — 解空間の網羅度を評価\r\n */\r\nfunction solutionCompleteness(md: any): any {\r\n const solutions = computeAll(md);\r\n const values = solutions.map((s: any) => s.value);\r\n\r\n // ユニーク値の比率\r\n const uniqueValues = new Set(values.map((v: number) => Math.round(v * 1e6) / 1e6));\r\n const uniqueRatio = uniqueValues.size / values.length;\r\n\r\n // レンジカバレッジ\r\n const sorted = [...values].sort((a: number, b: number) => a - b);\r\n const range = sorted[sorted.length - 1] - sorted[0];\r\n\r\n // 分布の均一性(エントロピーベース)\r\n const bins = 4;\r\n const binWidth = range / bins || 1;\r\n const histogram = new Array(bins).fill(0);\r\n for (const v of values) {\r\n const bin = Math.min(Math.floor((v - sorted[0]) / binWidth), bins - 1);\r\n histogram[bin]++;\r\n }\r\n const total = values.length;\r\n let entropy = 0;\r\n for (const count of histogram) {\r\n if (count > 0) {\r\n const p = count / total;\r\n entropy -= p * Math.log2(p);\r\n }\r\n }\r\n const maxEntropy = Math.log2(bins);\r\n const uniformity = maxEntropy > 0 ? entropy / maxEntropy : 1;\r\n\r\n return {\r\n reiType: 'CompletenessResult',\r\n totalModes: solutions.length,\r\n uniqueSolutions: uniqueValues.size,\r\n uniqueRatio,\r\n range,\r\n uniformity,\r\n completeness: (uniqueRatio * 0.5 + uniformity * 0.5),\r\n isComplete: uniqueRatio > 0.5 && uniformity > 0.3,\r\n };\r\n}\r\n\r\n// ============================================================\r\n// Evolve — 自動モード選択(柱①: 値が来歴から最適計算を自分で選ぶ)\r\n// σの記憶(memory)とτの傾向性(tendency)から8モードを評価し、\r\n// 戦略に基づいて最適なcomputeモードを自動選択する。\r\n// 「値が自分の来歴を見て計算方法を自分で選ぶ」世界初の機能。\r\n// ============================================================\r\n\r\ninterface EvolveCandidate {\r\n mode: string;\r\n value: number;\r\n}\r\n\r\ninterface EvolveResult {\r\n reiType: 'EvolveResult';\r\n value: number;\r\n selectedMode: string;\r\n strategy: string;\r\n reason: string;\r\n candidates: EvolveCandidate[];\r\n awareness: number;\r\n tendency: string;\r\n}\r\n\r\n/**\r\n * evolve: σの来歴とτの傾向性から最適モードを自動選択\r\n *\r\n * 戦略:\r\n * \"auto\" — 覚醒度と傾向性に基づく総合判定(デフォルト)\r\n * \"stable\" — 過去の来歴との分散が最小のモード\r\n * \"divergent\" — 結果が最も広がるモード\r\n * \"creative\" — 他のモードと最も異なる結果のモード\r\n * \"tendency\" — τの傾向性(expand/contract/spiral)と整合するモード\r\n */\r\nfunction evolveMode(input: any, meta: SigmaMetadata, strategy: string = 'auto'): EvolveResult {\r\n const raw = unwrapReiVal(input);\r\n\r\n // 𝕄でなければprojectしてから処理\r\n let md: any;\r\n if (raw?.reiType === 'MDim') {\r\n md = raw;\r\n } else if (Array.isArray(raw)) {\r\n md = projectToMDim(raw, 'first', []);\r\n } else if (typeof raw === 'number') {\r\n md = { reiType: 'MDim', center: raw, neighbors: [], mode: 'weighted' };\r\n } else {\r\n md = { reiType: 'MDim', center: 0, neighbors: [], mode: 'weighted' };\r\n }\r\n\r\n // 全モードで計算\r\n const candidates: EvolveCandidate[] = ALL_COMPUTE_MODES.map(mode => ({\r\n mode,\r\n value: computeMDim({ ...md, mode }),\r\n }));\r\n\r\n // 覚醒度\r\n const awareness = computeAwareness(input, meta);\r\n const tendency = meta.tendency;\r\n\r\n // 戦略に基づく選択\r\n let selected: EvolveCandidate;\r\n let reason: string;\r\n\r\n switch (strategy) {\r\n case 'stable':\r\n selected = selectStable(candidates, meta);\r\n reason = selectStableReason(selected, candidates, meta);\r\n break;\r\n case 'divergent':\r\n selected = selectDivergent(candidates);\r\n reason = `最も他のモードと異なる結果を出すモード(偏差: ${calcDeviation(selected.value, candidates).toFixed(4)})`;\r\n break;\r\n case 'creative':\r\n selected = selectCreative(candidates);\r\n reason = `中央値から最も遠い結果(距離: ${calcMedianDistance(selected.value, candidates).toFixed(4)})`;\r\n break;\r\n case 'tendency':\r\n selected = selectByTendency(candidates, tendency, md);\r\n reason = `τの傾向性「${tendency}」と整合するモード`;\r\n break;\r\n case 'auto':\r\n default:\r\n ({ selected, reason } = selectAuto(candidates, meta, awareness, md));\r\n strategy = 'auto';\r\n break;\r\n }\r\n\r\n return {\r\n reiType: 'EvolveResult',\r\n value: selected.value,\r\n selectedMode: selected.mode,\r\n strategy,\r\n reason,\r\n candidates,\r\n awareness,\r\n tendency,\r\n };\r\n}\r\n\r\n/** stable戦略: 過去の来歴との一貫性が最も高いモード */\r\nfunction selectStable(candidates: EvolveCandidate[], meta: SigmaMetadata): EvolveCandidate {\r\n if (meta.memory.length === 0) {\r\n // 来歴なし → 分散が最小のモード(他モードとの差が小さい)\r\n const mean = candidates.reduce((s, c) => s + c.value, 0) / candidates.length;\r\n return candidates.reduce((best, c) =>\r\n Math.abs(c.value - mean) < Math.abs(best.value - mean) ? c : best\r\n );\r\n }\r\n\r\n // 来歴あり → 来歴の数値トレンドとの整合性\r\n const recentValues = meta.memory.slice(-5).map(toNumSafe);\r\n const recentMean = recentValues.reduce((s, v) => s + v, 0) / recentValues.length;\r\n\r\n return candidates.reduce((best, c) =>\r\n Math.abs(c.value - recentMean) < Math.abs(best.value - recentMean) ? c : best\r\n );\r\n}\r\n\r\nfunction selectStableReason(selected: EvolveCandidate, candidates: EvolveCandidate[], meta: SigmaMetadata): string {\r\n if (meta.memory.length === 0) {\r\n return `全モードの平均に最も近い結果(来歴なし、初回選択)`;\r\n }\r\n return `過去${meta.memory.length}回の来歴の傾向に最も整合(安定性優先)`;\r\n}\r\n\r\n/** divergent戦略: 他のモードと最も異なる結果のモード */\r\nfunction selectDivergent(candidates: EvolveCandidate[]): EvolveCandidate {\r\n return candidates.reduce((best, c) =>\r\n calcDeviation(c.value, candidates) > calcDeviation(best.value, candidates) ? c : best\r\n );\r\n}\r\n\r\n/** creative戦略: 中央値から最も遠い結果 */\r\nfunction selectCreative(candidates: EvolveCandidate[]): EvolveCandidate {\r\n return candidates.reduce((best, c) =>\r\n calcMedianDistance(c.value, candidates) > calcMedianDistance(best.value, candidates) ? c : best\r\n );\r\n}\r\n\r\n/** tendency戦略: τの傾向性と整合するモード */\r\nfunction selectByTendency(candidates: EvolveCandidate[], tendency: string, md: any): EvolveCandidate {\r\n const baseValue = computeMDim({ ...md, mode: 'weighted' });\r\n\r\n switch (tendency) {\r\n case 'expand': {\r\n // 拡張傾向 → 最も大きな値を出すモード\r\n return candidates.reduce((best, c) => c.value > best.value ? c : best);\r\n }\r\n case 'contract': {\r\n // 収縮傾向 → centerに最も近い値を出すモード\r\n return candidates.reduce((best, c) =>\r\n Math.abs(c.value - md.center) < Math.abs(best.value - md.center) ? c : best\r\n );\r\n }\r\n case 'spiral': {\r\n // 螺旋傾向 → baseValueと異なるが極端ではない値\r\n const sorted = [...candidates].sort((a, b) =>\r\n Math.abs(a.value - baseValue) - Math.abs(b.value - baseValue)\r\n );\r\n // 中間的な距離のモードを選択(極端でも平凡でもない)\r\n const midIdx = Math.floor(sorted.length / 2);\r\n return sorted[midIdx];\r\n }\r\n default: {\r\n // rest → weightedモード(デフォルト)\r\n return candidates.find(c => c.mode === 'weighted') ?? candidates[0];\r\n }\r\n }\r\n}\r\n\r\n/** auto戦略: 覚醒度と傾向性に基づく総合判定 */\r\nfunction selectAuto(\r\n candidates: EvolveCandidate[],\r\n meta: SigmaMetadata,\r\n awareness: number,\r\n md: any\r\n): { selected: EvolveCandidate; reason: string } {\r\n // 覚醒度が低い(< 0.3)→ 安定モード\r\n if (awareness < 0.3) {\r\n const selected = selectStable(candidates, meta);\r\n return {\r\n selected,\r\n reason: `覚醒度が低い(${awareness.toFixed(2)})ため安定モードを選択`,\r\n };\r\n }\r\n\r\n // 覚醒度が高い(>= 0.6)→ 傾向性に従う\r\n if (awareness >= AWAKENING_THRESHOLD) {\r\n const selected = selectByTendency(candidates, meta.tendency, md);\r\n return {\r\n selected,\r\n reason: `覚醒状態(${awareness.toFixed(2)}): 傾向性「${meta.tendency}」に基づき選択`,\r\n };\r\n }\r\n\r\n // 中間覚醒度 → 来歴があればそれを活用、なければ情報エントロピーで\r\n if (meta.memory.length >= 3) {\r\n // 来歴パターンを分析: 値が増加傾向ならexpand系、減少ならcontract系\r\n const recentValues = meta.memory.slice(-3).map(toNumSafe);\r\n const trend = recentValues[recentValues.length - 1] - recentValues[0];\r\n\r\n if (trend > 0) {\r\n const selected = candidates.reduce((best, c) => c.value > best.value ? c : best);\r\n return { selected, reason: `来歴から増加傾向を検出 → 最大値モードを選択` };\r\n } else if (trend < 0) {\r\n const selected = candidates.reduce((best, c) =>\r\n Math.abs(c.value - md.center) < Math.abs(best.value - md.center) ? c : best\r\n );\r\n return { selected, reason: `来歴から減少傾向を検出 → 中心収束モードを選択` };\r\n }\r\n }\r\n\r\n // デフォルト: エントロピーモード(最も情報量の多い計算)\r\n const selected = candidates.find(c => c.mode === 'entropy') ?? candidates[0];\r\n return {\r\n selected,\r\n reason: `中間覚醒度(${awareness.toFixed(2)}): 情報エントロピーモードで探索`,\r\n };\r\n}\r\n\r\n/** ヘルパー: 候補群内での偏差 */\r\nfunction calcDeviation(value: number, candidates: EvolveCandidate[]): number {\r\n const mean = candidates.reduce((s, c) => s + c.value, 0) / candidates.length;\r\n return Math.abs(value - mean);\r\n}\r\n\r\n/** ヘルパー: 中央値との距離 */\r\nfunction calcMedianDistance(value: number, candidates: EvolveCandidate[]): number {\r\n const sorted = [...candidates].map(c => c.value).sort((a, b) => a - b);\r\n const mid = Math.floor(sorted.length / 2);\r\n const median = sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];\r\n return Math.abs(value - median);\r\n}\r\n\r\n// ============================================================\r\n// 柱②: 漢字/日本語の𝕄表現 — 自然言語と中心-周辺パターンの統合\r\n//\r\n// 漢字の構造 = 𝕄: 「休」= 𝕄{\"休\"; \"人\", \"木\"}\r\n// 日本語文 = 述語中心𝕄: 𝕄{\"食べた\"; \"猫が\", \"魚を\"}\r\n// 中国語声調 = モード多元性: 𝕄{\"ma\"; \"妈(1声)\", \"麻(2声)\", ...}\r\n// ============================================================\r\n\r\n/** 文字列𝕄 — center/neighborsが文字列の𝕄構造 */\r\ninterface StringMDim {\r\n reiType: 'StringMDim';\r\n center: string;\r\n neighbors: string[];\r\n mode: string; // 'kanji' | 'sentence' | 'tone' | 'freeform'\r\n metadata?: any;\r\n}\r\n\r\n/** 漢字情報 */\r\ninterface KanjiInfo {\r\n components: string[];\r\n radical: string;\r\n radicalName: string;\r\n strokes: number;\r\n on: string[];\r\n kun: string[];\r\n category: string; // 六書: 象形|指事|会意|形声|転注|仮借\r\n meaning: string;\r\n}\r\n\r\n// ─────────────────────────────────────\r\n// 漢字構成要素辞書(六書分類付き)\r\n// ─────────────────────────────────────\r\nconst KANJI_DB: Record<string, KanjiInfo> = {\r\n // ═══ 象形(しょうけい)— 物の形を象る ═══\r\n \"日\": { components: [], radical: \"日\", radicalName: \"にち\", strokes: 4, on: [\"ニチ\",\"ジツ\"], kun: [\"ひ\",\"か\"], category: \"象形\", meaning: \"sun/day\" },\r\n \"月\": { components: [], radical: \"月\", radicalName: \"つき\", strokes: 4, on: [\"ゲツ\",\"ガツ\"], kun: [\"つき\"], category: \"象形\", meaning: \"moon/month\" },\r\n \"山\": { components: [], radical: \"山\", radicalName: \"やま\", strokes: 3, on: [\"サン\",\"セン\"], kun: [\"やま\"], category: \"象形\", meaning: \"mountain\" },\r\n \"川\": { components: [], radical: \"川\", radicalName: \"かわ\", strokes: 3, on: [\"セン\"], kun: [\"かわ\"], category: \"象形\", meaning: \"river\" },\r\n \"水\": { components: [], radical: \"水\", radicalName: \"みず\", strokes: 4, on: [\"スイ\"], kun: [\"みず\"], category: \"象形\", meaning: \"water\" },\r\n \"火\": { components: [], radical: \"火\", radicalName: \"ひ\", strokes: 4, on: [\"カ\"], kun: [\"ひ\",\"ほ\"], category: \"象形\", meaning: \"fire\" },\r\n \"木\": { components: [], radical: \"木\", radicalName: \"き\", strokes: 4, on: [\"モク\",\"ボク\"], kun: [\"き\",\"こ\"], category: \"象形\", meaning: \"tree/wood\" },\r\n \"金\": { components: [], radical: \"金\", radicalName: \"かね\", strokes: 8, on: [\"キン\",\"コン\"], kun: [\"かね\",\"かな\"], category: \"象形\", meaning: \"gold/metal\" },\r\n \"土\": { components: [], radical: \"土\", radicalName: \"つち\", strokes: 3, on: [\"ド\",\"ト\"], kun: [\"つち\"], category: \"象形\", meaning: \"earth/soil\" },\r\n \"人\": { components: [], radical: \"人\", radicalName: \"ひと\", strokes: 2, on: [\"ジン\",\"ニン\"], kun: [\"ひと\"], category: \"象形\", meaning: \"person\" },\r\n \"口\": { components: [], radical: \"口\", radicalName: \"くち\", strokes: 3, on: [\"コウ\",\"ク\"], kun: [\"くち\"], category: \"象形\", meaning: \"mouth\" },\r\n \"目\": { components: [], radical: \"目\", radicalName: \"め\", strokes: 5, on: [\"モク\",\"ボク\"], kun: [\"め\",\"ま\"], category: \"象形\", meaning: \"eye\" },\r\n \"手\": { components: [], radical: \"手\", radicalName: \"て\", strokes: 4, on: [\"シュ\"], kun: [\"て\",\"た\"], category: \"象形\", meaning: \"hand\" },\r\n \"耳\": { components: [], radical: \"耳\", radicalName: \"みみ\", strokes: 6, on: [\"ジ\"], kun: [\"みみ\"], category: \"象形\", meaning: \"ear\" },\r\n \"足\": { components: [], radical: \"足\", radicalName: \"あし\", strokes: 7, on: [\"ソク\"], kun: [\"あし\",\"た\"], category: \"象形\", meaning: \"foot/leg\" },\r\n \"女\": { components: [], radical: \"女\", radicalName: \"おんな\", strokes: 3, on: [\"ジョ\",\"ニョ\"], kun: [\"おんな\",\"め\"], category: \"象形\", meaning: \"woman\" },\r\n \"子\": { components: [], radical: \"子\", radicalName: \"こ\", strokes: 3, on: [\"シ\",\"ス\"], kun: [\"こ\"], category: \"象形\", meaning: \"child\" },\r\n \"田\": { components: [], radical: \"田\", radicalName: \"た\", strokes: 5, on: [\"デン\"], kun: [\"た\"], category: \"象形\", meaning: \"rice field\" },\r\n \"貝\": { components: [], radical: \"貝\", radicalName: \"かい\", strokes: 7, on: [\"バイ\"], kun: [\"かい\"], category: \"象形\", meaning: \"shell\" },\r\n \"車\": { components: [], radical: \"車\", radicalName: \"くるま\", strokes: 7, on: [\"シャ\"], kun: [\"くるま\"], category: \"象形\", meaning: \"vehicle\" },\r\n \"馬\": { components: [], radical: \"馬\", radicalName: \"うま\", strokes: 10, on: [\"バ\"], kun: [\"うま\",\"ま\"], category: \"象形\", meaning: \"horse\" },\r\n \"魚\": { components: [], radical: \"魚\", radicalName: \"うお\", strokes: 11, on: [\"ギョ\"], kun: [\"うお\",\"さかな\"], category: \"象形\", meaning: \"fish\" },\r\n \"鳥\": { components: [], radical: \"鳥\", radicalName: \"とり\", strokes: 11, on: [\"チョウ\"], kun: [\"とり\"], category: \"象形\", meaning: \"bird\" },\r\n \"雨\": { components: [], radical: \"雨\", radicalName: \"あめ\", strokes: 8, on: [\"ウ\"], kun: [\"あめ\",\"あま\"], category: \"象形\", meaning: \"rain\" },\r\n \"石\": { components: [], radical: \"石\", radicalName: \"いし\", strokes: 5, on: [\"セキ\",\"シャク\"], kun: [\"いし\"], category: \"象形\", meaning: \"stone\" },\r\n \"竹\": { components: [], radical: \"竹\", radicalName: \"たけ\", strokes: 6, on: [\"チク\"], kun: [\"たけ\"], category: \"象形\", meaning: \"bamboo\" },\r\n \"糸\": { components: [], radical: \"糸\", radicalName: \"いと\", strokes: 6, on: [\"シ\"], kun: [\"いと\"], category: \"象形\", meaning: \"thread\" },\r\n \"米\": { components: [], radical: \"米\", radicalName: \"こめ\", strokes: 6, on: [\"ベイ\",\"マイ\"], kun: [\"こめ\"], category: \"象形\", meaning: \"rice\" },\r\n \"虫\": { components: [], radical: \"虫\", radicalName: \"むし\", strokes: 6, on: [\"チュウ\"], kun: [\"むし\"], category: \"象形\", meaning: \"insect\" },\r\n \"犬\": { components: [], radical: \"犬\", radicalName: \"いぬ\", strokes: 4, on: [\"ケン\"], kun: [\"いぬ\"], category: \"象形\", meaning: \"dog\" },\r\n \"力\": { components: [], radical: \"力\", radicalName: \"ちから\", strokes: 2, on: [\"リキ\",\"リョク\"], kun: [\"ちから\"], category: \"象形\", meaning: \"power\" },\r\n \"刀\": { components: [], radical: \"刀\", radicalName: \"かたな\", strokes: 2, on: [\"トウ\"], kun: [\"かたな\"], category: \"象形\", meaning: \"sword\" },\r\n \"門\": { components: [], radical: \"門\", radicalName: \"もん\", strokes: 8, on: [\"モン\"], kun: [\"かど\"], category: \"象形\", meaning: \"gate\" },\r\n \"心\": { components: [], radical: \"心\", radicalName: \"こころ\", strokes: 4, on: [\"シン\"], kun: [\"こころ\"], category: \"象形\", meaning: \"heart/mind\" },\r\n\r\n // ═══ 指事(しじ)— 抽象概念を記号で示す ═══\r\n \"一\": { components: [], radical: \"一\", radicalName: \"いち\", strokes: 1, on: [\"イチ\",\"イツ\"], kun: [\"ひと\"], category: \"指事\", meaning: \"one\" },\r\n \"二\": { components: [], radical: \"二\", radicalName: \"に\", strokes: 2, on: [\"ニ\"], kun: [\"ふた\"], category: \"指事\", meaning: \"two\" },\r\n \"三\": { components: [], radical: \"一\", radicalName: \"いち\", strokes: 3, on: [\"サン\"], kun: [\"み\",\"みっ\"], category: \"指事\", meaning: \"three\" },\r\n \"上\": { components: [], radical: \"一\", radicalName: \"いち\", strokes: 3, on: [\"ジョウ\",\"ショウ\"], kun: [\"うえ\",\"あ\"], category: \"指事\", meaning: \"above\" },\r\n \"下\": { components: [], radical: \"一\", radicalName: \"いち\", strokes: 3, on: [\"カ\",\"ゲ\"], kun: [\"した\",\"さ\",\"くだ\"], category: \"指事\", meaning: \"below\" },\r\n \"本\": { components: [\"木\",\"一\"], radical: \"木\", radicalName: \"き\", strokes: 5, on: [\"ホン\"], kun: [\"もと\"], category: \"指事\", meaning: \"origin/book\" },\r\n \"末\": { components: [\"木\",\"一\"], radical: \"木\", radicalName: \"き\", strokes: 5, on: [\"マツ\",\"バツ\"], kun: [\"すえ\"], category: \"指事\", meaning: \"end/tip\" },\r\n \"中\": { components: [\"口\",\"丨\"], radical: \"丨\", radicalName: \"ぼう\", strokes: 4, on: [\"チュウ\"], kun: [\"なか\"], category: \"指事\", meaning: \"center/middle\" },\r\n \"天\": { components: [\"一\",\"大\"], radical: \"大\", radicalName: \"だい\", strokes: 4, on: [\"テン\"], kun: [\"あめ\",\"あま\"], category: \"指事\", meaning: \"heaven/sky\" },\r\n\r\n // ═══ 会意(かいい)— 2つ以上の字を合わせて意味を作る ═══\r\n \"休\": { components: [\"人\",\"木\"], radical: \"人\", radicalName: \"にんべん\", strokes: 6, on: [\"キュウ\"], kun: [\"やす\"], category: \"会意\", meaning: \"rest\" },\r\n \"明\": { components: [\"日\",\"月\"], radical: \"日\", radicalName: \"にち\", strokes: 8, on: [\"メイ\",\"ミョウ\"], kun: [\"あか\",\"あき\"], category: \"会意\", meaning: \"bright\" },\r\n \"森\": { components: [\"木\",\"木\",\"木\"], radical: \"木\", radicalName: \"き\", strokes: 12, on: [\"シン\"], kun: [\"もり\"], category: \"会意\", meaning: \"forest\" },\r\n \"林\": { components: [\"木\",\"木\"], radical: \"木\", radicalName: \"き\", strokes: 8, on: [\"リン\"], kun: [\"はやし\"], category: \"会意\", meaning: \"grove\" },\r\n \"男\": { components: [\"田\",\"力\"], radical: \"田\", radicalName: \"た\", strokes: 7, on: [\"ダン\",\"ナン\"], kun: [\"おとこ\"], category: \"会意\", meaning: \"man\" },\r\n \"好\": { components: [\"女\",\"子\"], radical: \"女\", radicalName: \"おんな\", strokes: 6, on: [\"コウ\"], kun: [\"す\",\"この\",\"よ\"], category: \"会意\", meaning: \"like/good\" },\r\n \"信\": { components: [\"人\",\"言\"], radical: \"人\", radicalName: \"にんべん\", strokes: 9, on: [\"シン\"], kun: [\"\"], category: \"会意\", meaning: \"trust/believe\" },\r\n \"炎\": { components: [\"火\",\"火\"], radical: \"火\", radicalName: \"ひ\", strokes: 8, on: [\"エン\"], kun: [\"ほのお\"], category: \"会意\", meaning: \"flame\" },\r\n \"岩\": { components: [\"山\",\"石\"], radical: \"山\", radicalName: \"やま\", strokes: 8, on: [\"ガン\"], kun: [\"いわ\"], category: \"会意\", meaning: \"rock\" },\r\n \"花\": { components: [\"草\",\"化\"], radical: \"草\", radicalName: \"くさかんむり\", strokes: 7, on: [\"カ\"], kun: [\"はな\"], category: \"会意\", meaning: \"flower\" },\r\n \"草\": { components: [\"草冠\",\"早\"], radical: \"草\", radicalName: \"くさかんむり\", strokes: 9, on: [\"ソウ\"], kun: [\"くさ\"], category: \"会意\", meaning: \"grass\" },\r\n \"鳴\": { components: [\"口\",\"鳥\"], radical: \"鳥\", radicalName: \"とり\", strokes: 14, on: [\"メイ\"], kun: [\"な\"], category: \"会意\", meaning: \"cry/chirp\" },\r\n \"畑\": { components: [\"火\",\"田\"], radical: \"田\", radicalName: \"た\", strokes: 9, on: [], kun: [\"はた\",\"はたけ\"], category: \"会意\", meaning: \"field (cultivated)\" },\r\n \"峠\": { components: [\"山\",\"上\",\"下\"], radical: \"山\", radicalName: \"やま\", strokes: 9, on: [], kun: [\"とうげ\"], category: \"会意\", meaning: \"mountain pass\" },\r\n \"雷\": { components: [\"雨\",\"田\"], radical: \"雨\", radicalName: \"あめ\", strokes: 13, on: [\"ライ\"], kun: [\"かみなり\"], category: \"会意\", meaning: \"thunder\" },\r\n \"看\": { components: [\"手\",\"目\"], radical: \"目\", radicalName: \"め\", strokes: 9, on: [\"カン\"], kun: [\"み\"], category: \"会意\", meaning: \"watch/look\" },\r\n \"思\": { components: [\"田\",\"心\"], radical: \"心\", radicalName: \"こころ\", strokes: 9, on: [\"シ\"], kun: [\"おも\"], category: \"会意\", meaning: \"think\" },\r\n \"忍\": { components: [\"刀\",\"心\"], radical: \"心\", radicalName: \"こころ\", strokes: 7, on: [\"ニン\"], kun: [\"しの\"], category: \"会意\", meaning: \"endure/ninja\" },\r\n \"武\": { components: [\"止\",\"戈\"], radical: \"止\", radicalName: \"とめる\", strokes: 8, on: [\"ブ\",\"ム\"], kun: [\"たけ\"], category: \"会意\", meaning: \"martial\" },\r\n \"友\": { components: [\"又\",\"又\"], radical: \"又\", radicalName: \"また\", strokes: 4, on: [\"ユウ\"], kun: [\"とも\"], category: \"会意\", meaning: \"friend\" },\r\n \"光\": { components: [\"火\",\"儿\"], radical: \"儿\", radicalName: \"にんにょう\", strokes: 6, on: [\"コウ\"], kun: [\"ひか\",\"ひかり\"], category: \"会意\", meaning: \"light\" },\r\n \"空\": { components: [\"穴\",\"工\"], radical: \"穴\", radicalName: \"あな\", strokes: 8, on: [\"クウ\"], kun: [\"そら\",\"あ\",\"から\"], category: \"会意\", meaning: \"sky/empty\" },\r\n \"海\": { components: [\"水\",\"毎\"], radical: \"水\", radicalName: \"さんずい\", strokes: 9, on: [\"カイ\"], kun: [\"うみ\"], category: \"会意\", meaning: \"sea\" },\r\n \"道\": { components: [\"首\",\"辶\"], radical: \"辶\", radicalName: \"しんにょう\", strokes: 12, on: [\"ドウ\",\"トウ\"], kun: [\"みち\"], category: \"会意\", meaning: \"way/path\" },\r\n \"和\": { components: [\"禾\",\"口\"], radical: \"口\", radicalName: \"くち\", strokes: 8, on: [\"ワ\"], kun: [\"やわ\",\"なご\"], category: \"会意\", meaning: \"harmony/Japan\" },\r\n \"美\": { components: [\"羊\",\"大\"], radical: \"羊\", radicalName: \"ひつじ\", strokes: 9, on: [\"ビ\"], kun: [\"うつく\"], category: \"会意\", meaning: \"beauty\" },\r\n \"愛\": { components: [\"爪\",\"冖\",\"心\",\"夂\"], radical: \"心\", radicalName: \"こころ\", strokes: 13, on: [\"アイ\"], kun: [\"\"], category: \"会意\", meaning: \"love\" },\r\n \"夢\": { components: [\"草\",\"罒\",\"冖\",\"夕\"], radical: \"夕\", radicalName: \"ゆうべ\", strokes: 13, on: [\"ム\",\"ボウ\"], kun: [\"ゆめ\"], category: \"会意\", meaning: \"dream\" },\r\n \"風\": { components: [\"几\",\"虫\"], radical: \"風\", radicalName: \"かぜ\", strokes: 9, on: [\"フウ\",\"フ\"], kun: [\"かぜ\",\"かざ\"], category: \"会意\", meaning: \"wind\" },\r\n \"雪\": { components: [\"雨\",\"ヨ\"], radical: \"雨\", radicalName: \"あめ\", strokes: 11, on: [\"セツ\"], kun: [\"ゆき\"], category: \"会意\", meaning: \"snow\" },\r\n \"雲\": { components: [\"雨\",\"云\"], radical: \"雨\", radicalName: \"あめ\", strokes: 12, on: [\"ウン\"], kun: [\"くも\"], category: \"会意\", meaning: \"cloud\" },\r\n \"星\": { components: [\"日\",\"生\"], radical: \"日\", radicalName: \"にち\", strokes: 9, on: [\"セイ\",\"ショウ\"], kun: [\"ほし\"], category: \"会意\", meaning: \"star\" },\r\n \"国\": { components: [\"囗\",\"玉\"], radical: \"囗\", radicalName: \"くにがまえ\", strokes: 8, on: [\"コク\"], kun: [\"くに\"], category: \"会意\", meaning: \"country\" },\r\n \"語\": { components: [\"言\",\"五\",\"口\"], radical: \"言\", radicalName: \"ごんべん\", strokes: 14, on: [\"ゴ\"], kun: [\"かた\"], category: \"会意\", meaning: \"language/word\" },\r\n \"話\": { components: [\"言\",\"舌\"], radical: \"言\", radicalName: \"ごんべん\", strokes: 13, on: [\"ワ\"], kun: [\"はなし\",\"はな\"], category: \"会意\", meaning: \"talk/story\" },\r\n \"読\": { components: [\"言\",\"売\"], radical: \"言\", radicalName: \"ごんべん\", strokes: 14, on: [\"ドク\",\"トク\",\"トウ\"], kun: [\"よ\"], category: \"形声\", meaning: \"read\" },\r\n \"書\": { components: [\"聿\",\"日\"], radical: \"日\", radicalName: \"にち\", strokes: 10, on: [\"ショ\"], kun: [\"か\"], category: \"会意\", meaning: \"write/book\" },\r\n \"生\": { components: [], radical: \"生\", radicalName: \"せい\", strokes: 5, on: [\"セイ\",\"ショウ\"], kun: [\"い\",\"う\",\"は\",\"き\",\"なま\"], category: \"象形\", meaning: \"life/birth\" },\r\n \"大\": { components: [], radical: \"大\", radicalName: \"だい\", strokes: 3, on: [\"ダイ\",\"タイ\"], kun: [\"おお\",\"おおき\"], category: \"象形\", meaning: \"big\" },\r\n \"小\": { components: [], radical: \"小\", radicalName: \"しょう\", strokes: 3, on: [\"ショウ\"], kun: [\"ちい\",\"こ\",\"お\"], category: \"象形\", meaning: \"small\" },\r\n \"白\": { components: [], radical: \"白\", radicalName: \"しろ\", strokes: 5, on: [\"ハク\",\"ビャク\"], kun: [\"しろ\",\"しら\"], category: \"象形\", meaning: \"white\" },\r\n \"赤\": { components: [\"土\",\"火\"], radical: \"赤\", radicalName: \"あか\", strokes: 7, on: [\"セキ\",\"シャク\"], kun: [\"あか\"], category: \"会意\", meaning: \"red\" },\r\n \"青\": { components: [\"生\",\"月\"], radical: \"青\", radicalName: \"あお\", strokes: 8, on: [\"セイ\",\"ショウ\"], kun: [\"あお\"], category: \"会意\", meaning: \"blue/green\" },\r\n \"黒\": { components: [\"里\",\"灬\"], radical: \"黒\", radicalName: \"くろ\", strokes: 11, on: [\"コク\"], kun: [\"くろ\"], category: \"会意\", meaning: \"black\" },\r\n\r\n // ═══ 形声(けいせい)— 意符と音符の組み合わせ ═══\r\n \"晴\": { components: [\"日\",\"青\"], radical: \"日\", radicalName: \"にち\", strokes: 12, on: [\"セイ\"], kun: [\"は\"], category: \"形声\", meaning: \"clear weather\" },\r\n \"清\": { components: [\"水\",\"青\"], radical: \"水\", radicalName: \"さんずい\", strokes: 11, on: [\"セイ\",\"ショウ\"], kun: [\"きよ\"], category: \"形声\", meaning: \"pure/clean\" },\r\n \"請\": { components: [\"言\",\"青\"], radical: \"言\", radicalName: \"ごんべん\", strokes: 15, on: [\"セイ\",\"シン\"], kun: [\"こ\",\"う\"], category: \"形声\", meaning: \"request\" },\r\n \"情\": { components: [\"心\",\"青\"], radical: \"心\", radicalName: \"りっしんべん\", strokes: 11, on: [\"ジョウ\",\"セイ\"], kun: [\"なさけ\"], category: \"形声\", meaning: \"emotion\" },\r\n \"精\": { components: [\"米\",\"青\"], radical: \"米\", radicalName: \"こめ\", strokes: 14, on: [\"セイ\",\"ショウ\"], kun: [\"\"], category: \"形声\", meaning: \"spirit/refined\" },\r\n \"銅\": { components: [\"金\",\"同\"], radical: \"金\", radicalName: \"かね\", strokes: 14, on: [\"ドウ\"], kun: [\"あかがね\"], category: \"形声\", meaning: \"copper\" },\r\n \"鋼\": { components: [\"金\",\"岡\"], radical: \"金\", radicalName: \"かね\", strokes: 16, on: [\"コウ\"], kun: [\"はがね\"], category: \"形声\", meaning: \"steel\" },\r\n \"河\": { components: [\"水\",\"可\"], radical: \"水\", radicalName: \"さんずい\", strokes: 8, on: [\"カ\"], kun: [\"かわ\"], category: \"形声\", meaning: \"river\" },\r\n \"湖\": { components: [\"水\",\"胡\"], radical: \"水\", radicalName: \"さんずい\", strokes: 12, on: [\"コ\"], kun: [\"みずうみ\"], category: \"形声\", meaning: \"lake\" },\r\n \"池\": { components: [\"水\",\"也\"], radical: \"水\", radicalName: \"さんずい\", strokes: 6, on: [\"チ\"], kun: [\"いけ\"], category: \"形声\", meaning: \"pond\" },\r\n \"洋\": { components: [\"水\",\"羊\"], radical: \"水\", radicalName: \"さんずい\", strokes: 9, on: [\"ヨウ\"], kun: [\"\"], category: \"形声\", meaning: \"ocean/Western\" },\r\n \"松\": { components: [\"木\",\"公\"], radical: \"木\", radicalName: \"き\", strokes: 8, on: [\"ショウ\"], kun: [\"まつ\"], category: \"形声\", meaning: \"pine\" },\r\n \"桜\": { components: [\"木\",\"嬰\"], radical: \"木\", radicalName: \"き\", strokes: 10, on: [\"オウ\"], kun: [\"さくら\"], category: \"形声\", meaning: \"cherry blossom\" },\r\n \"橋\": { components: [\"木\",\"喬\"], radical: \"木\", radicalName: \"き\", strokes: 16, on: [\"キョウ\"], kun: [\"はし\"], category: \"形声\", meaning: \"bridge\" },\r\n \"村\": { components: [\"木\",\"寸\"], radical: \"木\", radicalName: \"き\", strokes: 7, on: [\"ソン\"], kun: [\"むら\"], category: \"形声\", meaning: \"village\" },\r\n \"紙\": { components: [\"糸\",\"氏\"], radical: \"糸\", radicalName: \"いと\", strokes: 10, on: [\"シ\"], kun: [\"かみ\"], category: \"形声\", meaning: \"paper\" },\r\n \"線\": { components: [\"糸\",\"泉\"], radical: \"糸\", radicalName: \"いと\", strokes: 15, on: [\"セン\"], kun: [\"\"], category: \"形声\", meaning: \"line/thread\" },\r\n \"猫\": { components: [\"犬\",\"苗\"], radical: \"犬\", radicalName: \"けものへん\", strokes: 11, on: [\"ビョウ\"], kun: [\"ねこ\"], category: \"形声\", meaning: \"cat\" },\r\n \"時\": { components: [\"日\",\"寺\"], radical: \"日\", radicalName: \"にち\", strokes: 10, on: [\"ジ\"], kun: [\"とき\"], category: \"形声\", meaning: \"time\" },\r\n \"間\": { components: [\"門\",\"日\"], radical: \"門\", radicalName: \"もん\", strokes: 12, on: [\"カン\",\"ケン\"], kun: [\"あいだ\",\"ま\"], category: \"形声\", meaning: \"interval/between\" },\r\n \"聞\": { components: [\"門\",\"耳\"], radical: \"耳\", radicalName: \"みみ\", strokes: 14, on: [\"ブン\",\"モン\"], kun: [\"き\"], category: \"形声\", meaning: \"hear/ask\" },\r\n \"閉\": { components: [\"門\",\"才\"], radical: \"門\", radicalName: \"もん\", strokes: 11, on: [\"ヘイ\"], kun: [\"し\",\"と\"], category: \"形声\", meaning: \"close/shut\" },\r\n \"開\": { components: [\"門\",\"开\"], radical: \"門\", radicalName: \"もん\", strokes: 12, on: [\"カイ\"], kun: [\"あ\",\"ひら\"], category: \"形声\", meaning: \"open\" },\r\n \"問\": { components: [\"門\",\"口\"], radical: \"口\", radicalName: \"くち\", strokes: 11, on: [\"モン\"], kun: [\"と\"], category: \"形声\", meaning: \"question\" },\r\n \"歌\": { components: [\"可\",\"欠\"], radical: \"欠\", radicalName: \"あくび\", strokes: 14, on: [\"カ\"], kun: [\"うた\",\"うた\"], category: \"形声\", meaning: \"song\" },\r\n \"算\": { components: [\"竹\",\"目\",\"廾\"], radical: \"竹\", radicalName: \"たけかんむり\", strokes: 14, on: [\"サン\"], kun: [\"\"], category: \"形声\", meaning: \"calculate\" },\r\n \"数\": { components: [\"米\",\"女\",\"攵\"], radical: \"攵\", radicalName: \"ぼくづくり\", strokes: 13, on: [\"スウ\",\"ス\"], kun: [\"かず\",\"かぞ\"], category: \"形声\", meaning: \"number/count\" },\r\n \"零\": { components: [\"雨\",\"令\"], radical: \"雨\", radicalName: \"あめ\", strokes: 13, on: [\"レイ\"], kun: [\"\"], category: \"形声\", meaning: \"zero\" },\r\n \"無\": { components: [\"一\",\"火\"], radical: \"火\", radicalName: \"れっか\", strokes: 12, on: [\"ム\",\"ブ\"], kun: [\"な\"], category: \"会意\", meaning: \"nothing/void\" },\r\n \"始\": { components: [\"女\",\"台\"], radical: \"女\", radicalName: \"おんな\", strokes: 8, on: [\"シ\"], kun: [\"はじ\"], category: \"形声\", meaning: \"begin\" },\r\n};\r\n\r\n/** 共通部首パターン: 同じ音符を共有する漢字群 */\r\nconst PHONETIC_GROUPS: Record<string, string[]> = {\r\n \"青\": [\"晴\",\"清\",\"請\",\"情\",\"精\"],\r\n \"門\": [\"間\",\"聞\",\"閉\",\"開\",\"問\"],\r\n \"水\": [\"河\",\"湖\",\"池\",\"洋\",\"海\",\"清\"],\r\n \"木\": [\"林\",\"森\",\"松\",\"桜\",\"橋\",\"村\",\"本\",\"末\"],\r\n \"金\": [\"銅\",\"鋼\"],\r\n \"言\": [\"語\",\"話\",\"読\",\"請\"],\r\n \"日\": [\"明\",\"晴\",\"時\",\"間\",\"星\"],\r\n \"心\": [\"思\",\"忍\",\"情\",\"愛\"],\r\n \"火\": [\"炎\",\"畑\",\"光\"],\r\n \"山\": [\"岩\",\"峠\"],\r\n \"雨\": [\"雷\",\"雪\",\"雲\",\"零\"],\r\n};\r\n\r\n// ─────────────────────────────────────\r\n// StringMDim 生成関数\r\n// ─────────────────────────────────────\r\n\r\n/** 漢字→StringMDim分解: 「休」→ {center:\"休\", neighbors:[\"人\",\"木\"]} */\r\nfunction kanjiToStringMDim(ch: string): StringMDim {\r\n const info = KANJI_DB[ch];\r\n if (!info) {\r\n // 辞書にない漢字: 1文字中心、空近傍\r\n return {\r\n reiType: 'StringMDim',\r\n center: ch,\r\n neighbors: [],\r\n mode: 'kanji',\r\n metadata: { known: false },\r\n };\r\n }\r\n return {\r\n reiType: 'StringMDim',\r\n center: ch,\r\n neighbors: info.components.length > 0 ? info.components : [ch],\r\n mode: 'kanji',\r\n metadata: {\r\n known: true,\r\n radical: info.radical,\r\n radicalName: info.radicalName,\r\n strokes: info.strokes,\r\n on: info.on,\r\n kun: info.kun,\r\n category: info.category,\r\n meaning: info.meaning,\r\n },\r\n };\r\n}\r\n\r\n/** 複数漢字→StringMDim: 「明日」→ {center:\"明日\", neighbors:[\"明\",\"日\"]} */\r\nfunction wordToStringMDim(word: string): StringMDim {\r\n const chars = Array.from(word);\r\n if (chars.length === 1) return kanjiToStringMDim(chars[0]);\r\n\r\n return {\r\n reiType: 'StringMDim',\r\n center: word,\r\n neighbors: chars,\r\n mode: 'kanji',\r\n metadata: {\r\n charCount: chars.length,\r\n components: chars.map(c => {\r\n const info = KANJI_DB[c];\r\n return info ? { char: c, components: info.components, category: info.category } : { char: c, components: [], category: 'unknown' };\r\n }),\r\n },\r\n };\r\n}\r\n\r\n/** 日本語文→述語中心StringMDim(簡易的な助詞分割) */\r\nfunction sentenceToStringMDim(text: string): StringMDim {\r\n // 助詞パターンで文節分割(簡易版)\r\n const particles = /([がはをにでとのへもやかながらまでよりさえだけばかりしかこそ]+)/;\r\n const parts: string[] = [];\r\n let predicate = '';\r\n\r\n // 助詞の後ろで分割して文節を作る\r\n const segments = text.split(particles).filter(s => s.length > 0);\r\n\r\n let currentBunsetsu = '';\r\n for (const seg of segments) {\r\n currentBunsetsu += seg;\r\n if (particles.test(seg)) {\r\n parts.push(currentBunsetsu);\r\n currentBunsetsu = '';\r\n }\r\n }\r\n if (currentBunsetsu.length > 0) {\r\n predicate = currentBunsetsu; // 最後のセグメントが述語\r\n }\r\n\r\n // 述語が空なら最後の文節を述語とする\r\n if (!predicate && parts.length > 0) {\r\n predicate = parts.pop()!;\r\n }\r\n\r\n return {\r\n reiType: 'StringMDim',\r\n center: predicate || text,\r\n neighbors: parts,\r\n mode: 'sentence',\r\n metadata: {\r\n original: text,\r\n bunsetsuCount: parts.length + 1,\r\n particlesFound: parts.map(p => {\r\n const match = p.match(particles);\r\n return match ? match[0] : '';\r\n }),\r\n },\r\n };\r\n}\r\n\r\n/** 中国語声調→StringMDim */\r\nfunction toneToStringMDim(pinyin: string, toneVariants: string[]): StringMDim {\r\n return {\r\n reiType: 'StringMDim',\r\n center: pinyin,\r\n neighbors: toneVariants,\r\n mode: 'tone',\r\n metadata: {\r\n toneCount: toneVariants.length,\r\n // M1公理: 同じ音にモードを変えると意味が変わる\r\n m1_correspondence: 'tone = compute mode',\r\n },\r\n };\r\n}\r\n\r\n/** 2つの漢字StringMDimの構造的類似度 */\r\nfunction kanjiSimilarity(a: StringMDim, b: StringMDim): any {\r\n const aComps = new Set(a.neighbors);\r\n const bComps = new Set(b.neighbors);\r\n\r\n // 共通構成要素\r\n const shared: string[] = [];\r\n for (const c of aComps) {\r\n if (bComps.has(c)) shared.push(c);\r\n }\r\n\r\n // Jaccard類似度\r\n const unionSize = new Set([...aComps, ...bComps]).size;\r\n const jaccard = unionSize > 0 ? shared.length / unionSize : 0;\r\n\r\n // 部首一致\r\n const sameRadical = a.metadata?.radical === b.metadata?.radical;\r\n\r\n // カテゴリ一致\r\n const sameCategory = a.metadata?.category === b.metadata?.category;\r\n\r\n // 画数の近さ\r\n const strokeDiff = Math.abs((a.metadata?.strokes ?? 0) - (b.metadata?.strokes ?? 0));\r\n const strokeSimilarity = 1 / (1 + strokeDiff);\r\n\r\n // 音符グループの共有\r\n let sharedPhoneticGroup = false;\r\n for (const [, group] of Object.entries(PHONETIC_GROUPS)) {\r\n if (group.includes(a.center) && group.includes(b.center)) {\r\n sharedPhoneticGroup = true;\r\n break;\r\n }\r\n }\r\n\r\n // 総合類似度\r\n const strength = (\r\n jaccard * 0.35 +\r\n (sameRadical ? 0.25 : 0) +\r\n (sameCategory ? 0.15 : 0) +\r\n strokeSimilarity * 0.1 +\r\n (sharedPhoneticGroup ? 0.15 : 0)\r\n );\r\n\r\n return {\r\n reiType: 'KanjiSimilarity',\r\n pair: [a.center, b.center],\r\n strength: Math.min(1, strength),\r\n sharedComponents: shared,\r\n jaccard,\r\n sameRadical,\r\n sameCategory,\r\n strokeDiff,\r\n sharedPhoneticGroup,\r\n };\r\n}\r\n\r\n/** 漢字の逆引き: 構成要素から漢字を検索 */\r\nfunction reverseKanjiLookup(components: string[]): string[] {\r\n const results: string[] = [];\r\n const compSet = new Set(components);\r\n\r\n for (const [kanji, info] of Object.entries(KANJI_DB)) {\r\n if (info.components.length === 0) continue;\r\n // 全構成要素が含まれるか\r\n if (info.components.every(c => compSet.has(c))) {\r\n results.push(kanji);\r\n }\r\n }\r\n return results;\r\n}\r\n\r\n/** 同音グループの取得 */\r\nfunction getPhoneticGroup(ch: string): string[] {\r\n for (const [key, group] of Object.entries(PHONETIC_GROUPS)) {\r\n if (ch === key || group.includes(ch)) return group;\r\n }\r\n return [];\r\n}\r\n\r\n// ============================================================\r\n// Serialization — 𝕄のシリアライゼーション(保存・復元)\r\n// serialize: Rei値 → JSON文字列(σ/τ/覚醒状態を含む)\r\n// deserialize: JSON文字列 → Rei値(来歴を引き継いで計算再開)\r\n// ============================================================\r\n\r\nconst REI_SERIAL_VERSION = \"0.3.1\";\r\n\r\nfunction reiSerialize(value: any, pretty: boolean = false): string {\r\n const type = detectSerialType(value);\r\n let sigma: any;\r\n if (value !== null && typeof value === \"object\" && value.__sigma__) {\r\n sigma = {\r\n memory: value.__sigma__.memory || [],\r\n tendency: value.__sigma__.tendency || \"rest\",\r\n pipeCount: value.__sigma__.pipeCount || 0,\r\n };\r\n }\r\n const payload = cleanSerialPayload(value);\r\n const envelope = {\r\n __rei__: true as const,\r\n version: REI_SERIAL_VERSION,\r\n type,\r\n timestamp: new Date().toISOString(),\r\n payload,\r\n ...(sigma ? { sigma } : {}),\r\n };\r\n return JSON.stringify(envelope, null, pretty ? 2 : undefined);\r\n}\r\n\r\nfunction reiDeserialize(value: any): any {\r\n let json: string;\r\n if (typeof value === \"string\") {\r\n json = value;\r\n } else if (typeof value === \"object\" && value !== null && value.reiType === \"ReiVal\" && typeof value.value === \"string\") {\r\n json = value.value;\r\n } else {\r\n json = JSON.stringify(value);\r\n }\r\n let parsed: any;\r\n try { parsed = JSON.parse(json); } catch (e) {\r\n throw new Error(`deserialize: 無効なJSON — ${(e as Error).message}`);\r\n }\r\n if (parsed && parsed.__rei__ === true && \"payload\" in parsed) {\r\n let val = parsed.payload;\r\n if (parsed.sigma && val !== null && typeof val === \"object\") {\r\n val.__sigma__ = {\r\n memory: parsed.sigma.memory || [],\r\n tendency: parsed.sigma.tendency || \"rest\",\r\n pipeCount: parsed.sigma.pipeCount || 0,\r\n };\r\n }\r\n return val;\r\n }\r\n return parsed;\r\n}\r\n\r\nfunction detectSerialType(value: any): string {\r\n if (value === null || value === undefined) return \"null\";\r\n if (typeof value === \"number\") return \"number\";\r\n if (typeof value === \"string\") return \"string\";\r\n if (typeof value === \"boolean\") return \"boolean\";\r\n if (Array.isArray(value)) return \"array\";\r\n if (typeof value === \"object\" && value.reiType) return value.reiType;\r\n return \"object\";\r\n}\r\n\r\nfunction cleanSerialPayload(value: any): any {\r\n if (value === null || value === undefined) return value;\r\n if (typeof value !== \"object\") return value;\r\n if (Array.isArray(value)) return value.map(cleanSerialPayload);\r\n const clean: any = {};\r\n for (const key of Object.keys(value)) {\r\n if (key === \"__sigma__\") continue;\r\n clean[key] = value[key];\r\n }\r\n return clean;\r\n}\r\n\r\n// ============================================================\r\n// RCT Compress / Decompress — D-FUMT Theory #67\r\n// ============================================================\r\n// 「データを保存するのではなく、データを生成する公理を保存する」\r\n// Rei言語の組込みパイプコマンド:\r\n// data |> compress → CompressedRei\r\n// compressed |> decompress → 元データ\r\n// data |> compress_info → 圧縮メタデータ\r\n// data |> 圧縮 → CompressedRei (日本語)\r\n// compressed |> 復元 → 元データ (日本語)\r\n\r\ninterface CompressedRei {\r\n reiType: 'CompressedRei';\r\n params: GenerativeParams;\r\n originalLength: number;\r\n originalType: 'array' | 'string' | 'number' | 'object';\r\n compressionRatio: number;\r\n exactMatch: boolean;\r\n}\r\n\r\nfunction reiCompress(value: any): CompressedRei {\r\n const originalType = typeof value === 'string' ? 'string'\r\n : typeof value === 'number' ? 'number'\r\n : Array.isArray(value) ? 'array'\r\n : 'object';\r\n\r\n const data = valueToNumberArray(value);\r\n const result = compressToGenerativeParams(data);\r\n\r\n return {\r\n reiType: 'CompressedRei',\r\n params: result.params,\r\n originalLength: data.length,\r\n originalType,\r\n compressionRatio: result.compressionRatio,\r\n exactMatch: result.exactMatch,\r\n };\r\n}\r\n\r\nfunction reiDecompress(value: any): any {\r\n if (value && typeof value === 'object' && value.reiType === 'CompressedRei') {\r\n const comp = value as CompressedRei;\r\n const restored = generate(comp.params, comp.originalLength);\r\n\r\n // 元のデータ型に復元\r\n if (comp.originalType === 'string') {\r\n try {\r\n return Buffer.from(restored).toString('utf-8');\r\n } catch (_) { return restored; }\r\n }\r\n if (comp.originalType === 'number' && restored.length === 1) {\r\n return restored[0];\r\n }\r\n if (comp.originalType === 'object') {\r\n try {\r\n return JSON.parse(Buffer.from(restored).toString('utf-8'));\r\n } catch (_) { return restored; }\r\n }\r\n\r\n // 数値配列として復元\r\n return restored;\r\n }\r\n throw new Error('復元: CompressedRei型のデータが必要です');\r\n}\r\n\r\nfunction reiCompressInfo(value: any): any {\r\n const data = valueToNumberArray(value);\r\n const result = compressToGenerativeParams(data);\r\n\r\n return {\r\n reiType: 'CompressInfo',\r\n type: result.params.type,\r\n originalSize: data.length,\r\n compressedSize: result.params.size,\r\n compressionRatio: result.compressionRatio,\r\n exactMatch: result.exactMatch,\r\n kolmogorovEstimate: result.kolmogorovEstimate,\r\n improvement: `${((1 - result.compressionRatio) * 100).toFixed(1)}% 削減`,\r\n };\r\n}\r\n\r\n/** Rei値を数値配列に変換(圧縮入力の正規化) */\r\nfunction valueToNumberArray(value: any): number[] {\r\n // 数値配列\r\n if (Array.isArray(value)) {\r\n return value.map((v: any) => {\r\n if (typeof v === 'number') return v;\r\n if (typeof v === 'string') return v.charCodeAt(0);\r\n return 0;\r\n });\r\n }\r\n // 文字列 → UTF-8バイト列\r\n if (typeof value === 'string') {\r\n return Array.from(Buffer.from(value, 'utf-8'));\r\n }\r\n // 数値 → 単一要素配列\r\n if (typeof value === 'number') {\r\n return [value];\r\n }\r\n // オブジェクト → JSON文字列 → バイト列\r\n if (typeof value === 'object' && value !== null) {\r\n const json = JSON.stringify(value);\r\n return Array.from(Buffer.from(json, 'utf-8'));\r\n }\r\n throw new Error('圧縮: 対応していないデータ型です');\r\n}\r\n\r\n// ============================================================\r\n// RCT 方向3: Semantic Compress / Decompress / Verify (ローカル同期版)\r\n// ============================================================\r\n// Evaluator内での同期実行用。API接続版はtheory/semantic-compressor.tsを使用。\r\n// Rei構文:\r\n// data |> semantic_compress → SemanticThetaLocal\r\n// theta |> semantic_decompress → 復元文字列\r\n// [orig, recon] |> semantic_verify → 検証結果\r\n// data |> 意味圧縮 / theta |> 意味復元 / [a,b] |> 意味検証 (日本語版)\r\n\r\ninterface SemanticThetaLocal {\r\n reiType: 'SemanticTheta';\r\n version: '3.0';\r\n fidelity: string;\r\n intent: string;\r\n structure: string;\r\n functions: string[];\r\n imports: string[];\r\n types: string[];\r\n patterns: string[];\r\n language: string;\r\n originalSize: number;\r\n thetaSize: number;\r\n compressionRatio: number;\r\n}\r\n\r\nfunction reiLocalSemanticCompress(data: string, fidelity: string = 'high'): SemanticThetaLocal {\r\n const lines = data.split('\\n');\r\n const originalSize = Buffer.byteLength(data, 'utf-8');\r\n\r\n // 関数シグネチャ抽出\r\n const functions: string[] = [];\r\n for (const line of lines) {\r\n const funcMatch = line.match(/(?:export\\s+)?(?:async\\s+)?function\\s+(\\w+)\\s*\\(([^)]*)\\)(?:\\s*:\\s*([^\\s{]+))?/);\r\n if (funcMatch) {\r\n functions.push(`${funcMatch[1]}(${funcMatch[2].replace(/\\s+/g, '')})${funcMatch[3] ? ':' + funcMatch[3] : ''}`);\r\n }\r\n const methodMatch = line.match(/^\\s{2,}(?:async\\s+)?(\\w+)\\s*\\(([^)]*)\\)(?:\\s*:\\s*([^\\s{]+))?\\s*\\{/);\r\n if (methodMatch && !['if','for','while','switch','catch','else'].includes(methodMatch[1])) {\r\n functions.push(`.${methodMatch[1]}(${methodMatch[2].replace(/\\s+/g, '')})`);\r\n }\r\n }\r\n\r\n // import抽出\r\n const imports: string[] = [];\r\n for (const line of lines) {\r\n const impMatch = line.match(/from\\s+['\"]([^'\"]+)['\"]/);\r\n if (impMatch) imports.push(impMatch[1]);\r\n }\r\n\r\n // interface/class/type 抽出\r\n const types: string[] = [];\r\n for (const line of lines) {\r\n const typeMatch = line.match(/(?:export\\s+)?(?:interface|class|type)\\s+(\\w+)/);\r\n if (typeMatch) types.push(typeMatch[1]);\r\n }\r\n\r\n // パターン検出\r\n const patterns: string[] = [];\r\n if (data.includes('async')) patterns.push('async/await');\r\n if (data.includes('extends') || data.includes('implements')) patterns.push('inheritance');\r\n if (data.match(/\\.map\\(|\\.filter\\(|\\.reduce\\(/)) patterns.push('functional');\r\n if (data.includes('try') && data.includes('catch')) patterns.push('error-handling');\r\n\r\n // コメントから意図を抽出\r\n const comments = lines\r\n .filter(l => l.trim().startsWith('//') || l.trim().startsWith('*'))\r\n .slice(0, 5)\r\n .map(c => c.replace(/^[\\s/*]+/, '').trim())\r\n .filter(Boolean);\r\n\r\n // 言語検出\r\n const language = data.includes('interface ') || data.includes(': string') ? 'TypeScript'\r\n : data.includes('def ') ? 'Python'\r\n : data.includes('fn ') ? 'Rust'\r\n : 'JavaScript';\r\n\r\n // fidelityによって詳細度を調整\r\n const funcsToInclude = fidelity === 'low' ? functions.slice(0, 3)\r\n : fidelity === 'medium' ? functions.slice(0, 8)\r\n : functions;\r\n\r\n const theta: SemanticThetaLocal = {\r\n reiType: 'SemanticTheta',\r\n version: '3.0',\r\n fidelity,\r\n intent: comments.join('. ').substring(0, 120) || 'code module',\r\n structure: `${types.length}types, ${functions.length}fns, ${imports.length}deps`,\r\n functions: funcsToInclude,\r\n imports,\r\n types,\r\n patterns,\r\n language,\r\n originalSize,\r\n thetaSize: 0,\r\n compressionRatio: 0,\r\n };\r\n\r\n const thetaJson = JSON.stringify(theta);\r\n theta.thetaSize = Buffer.byteLength(thetaJson, 'utf-8');\r\n theta.compressionRatio = theta.thetaSize / originalSize;\r\n\r\n return theta;\r\n}\r\n\r\nfunction reiLocalSemanticDecompress(input: any): string {\r\n if (!input || typeof input !== 'object' || input.reiType !== 'SemanticTheta') {\r\n throw new Error('semantic_decompress: SemanticTheta型のデータが必要です (data |> semantic_compress の結果を渡してください)');\r\n }\r\n\r\n const theta = input as SemanticThetaLocal;\r\n\r\n // θから概要コードを再生成(ローカルモード)\r\n const lines: string[] = [];\r\n\r\n lines.push(`// ${theta.intent}`);\r\n lines.push(`// Structure: ${theta.structure}`);\r\n lines.push('');\r\n\r\n // imports\r\n for (const dep of theta.imports) {\r\n lines.push(`import { /* ... */ } from '${dep}';`);\r\n }\r\n if (theta.imports.length > 0) lines.push('');\r\n\r\n // types\r\n for (const t of theta.types) {\r\n lines.push(`interface ${t} { /* ... */ }`);\r\n }\r\n if (theta.types.length > 0) lines.push('');\r\n\r\n // functions\r\n for (const fn of theta.functions) {\r\n if (fn.startsWith('.')) {\r\n lines.push(` ${fn.slice(1)} { /* ... */ }`);\r\n } else {\r\n lines.push(`export function ${fn} {`);\r\n lines.push(' // TODO: implement');\r\n lines.push('}');\r\n lines.push('');\r\n }\r\n }\r\n\r\n lines.push(`// RCT Semantic Reconstruction (local mode)`);\r\n lines.push(`// Connect ANTHROPIC_API_KEY for full LLM-powered reconstruction`);\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\nfunction reiLocalSemanticVerify(original: string, reconstructed: string): {\r\n reiType: string; score: number; functional: number; structural: number; details: string;\r\n} {\r\n // 関数名の一致率\r\n const extractNames = (code: string) => new Set(\r\n (code.match(/(?:function|class|interface)\\s+(\\w+)/g) || [])\r\n .map(m => m.replace(/(?:function|class|interface)\\s+/, ''))\r\n );\r\n\r\n const origNames = extractNames(original);\r\n const reconNames = extractNames(reconstructed);\r\n\r\n let matches = 0;\r\n for (const name of origNames) {\r\n if (reconNames.has(name)) matches++;\r\n }\r\n\r\n const structural = origNames.size > 0 ? matches / origNames.size : 0;\r\n\r\n // import一致率\r\n const extractImports = (code: string) => new Set(\r\n (code.match(/from\\s+['\"]([^'\"]+)['\"]/g) || []).map(m => m.replace(/from\\s+['\"]|['\"]/g, ''))\r\n );\r\n const origImports = extractImports(original);\r\n const reconImports = extractImports(reconstructed);\r\n let importMatches = 0;\r\n for (const imp of origImports) {\r\n if (reconImports.has(imp)) importMatches++;\r\n }\r\n const importScore = origImports.size > 0 ? importMatches / origImports.size : 1;\r\n\r\n // 総合スコア\r\n const score = structural * 0.6 + importScore * 0.2 + 0.2;\r\n const functional = structural * 0.7;\r\n\r\n return {\r\n reiType: 'SemanticVerify',\r\n score: Math.round(score * 1000) / 1000,\r\n functional: Math.round(functional * 1000) / 1000,\r\n structural: Math.round(structural * 1000) / 1000,\r\n details: `${matches}/${origNames.size} identifiers, ${importMatches}/${origImports.size} imports matched`,\r\n };\r\n}\r\n\r\nfunction quadNot(v: string): string {\r\n switch (v) {\r\n case \"top\": return \"bottom\";\r\n case \"bottom\": return \"top\";\r\n case \"topPi\": return \"bottomPi\";\r\n case \"bottomPi\": return \"topPi\";\r\n default: return v;\r\n }\r\n}\r\n\r\nfunction quadAnd(a: string, b: string): string {\r\n if (a === \"bottom\" || b === \"bottom\") return \"bottom\";\r\n if (a === \"top\" && b === \"top\") return \"top\";\r\n return \"bottomPi\";\r\n}\r\n\r\nfunction quadOr(a: string, b: string): string {\r\n if (a === \"top\" || b === \"top\") return \"top\";\r\n if (a === \"bottom\" && b === \"bottom\") return \"bottom\";\r\n return \"topPi\";\r\n}\r\n\r\n// --- Genesis ---\r\n\r\nconst PHASE_ORDER = [\"void\", \"dot\", \"line\", \"surface\", \"solid\", \"omega\"];\r\n\r\nfunction createGenesis() {\r\n return { reiType: \"State\" as const, state: \"void\", omega: 0, history: [\"void\"] };\r\n}\r\n\r\nfunction genesisForward(g: any) {\r\n const idx = PHASE_ORDER.indexOf(g.state);\r\n if (idx < PHASE_ORDER.length - 1) {\r\n g.state = PHASE_ORDER[idx + 1];\r\n g.history.push(g.state);\r\n if (g.state === \"omega\") g.omega = 1;\r\n }\r\n}\r\n\r\n// ============================================================\r\n// EVALUATOR\r\n// ============================================================\r\n\r\nexport class Evaluator {\r\n env: Environment;\r\n // ── v0.4: 関係エンジン ──\r\n bindingRegistry: BindingRegistry = new BindingRegistry();\r\n\r\n constructor(parent?: Environment) {\r\n this.env = new Environment(parent ?? null);\r\n this.registerBuiltins();\r\n }\r\n\r\n private registerBuiltins() {\r\n this.env.define(\"e\", Math.E);\r\n this.env.define(\"PI\", Math.PI);\r\n this.env.define(\"genesis\", {\r\n reiType: \"Function\", name: \"genesis\", params: [], body: null, closure: this.env,\r\n });\r\n const mathFns = [\"abs\", \"sqrt\", \"sin\", \"cos\", \"log\", \"exp\", \"floor\", \"ceil\", \"round\", \"min\", \"max\", \"len\", \"print\"];\r\n for (const name of mathFns) {\r\n this.env.define(name, {\r\n reiType: \"Function\", name, params: [\"x\"], body: null, closure: this.env,\r\n });\r\n }\r\n }\r\n\r\n eval(ast: any): any {\r\n switch (ast.type) {\r\n case \"Program\": return this.evalProgram(ast);\r\n case \"NumLit\": return ast.value;\r\n case \"StrLit\": return ast.value;\r\n case \"BoolLit\": return ast.value;\r\n case \"NullLit\": return null;\r\n case \"ExtLit\": return parseExtLit(ast.raw);\r\n case \"ConstLit\": return this.evalConstLit(ast);\r\n case \"QuadLit\": return { reiType: \"Quad\", value: ast.value };\r\n case \"MDimLit\": return this.evalMDimLit(ast);\r\n case \"ArrayLit\": return ast.elements.map((e: any) => this.eval(e));\r\n case \"Ident\": return this.env.get(ast.name);\r\n case \"LetStmt\": return this.evalLetStmt(ast);\r\n case \"MutStmt\": return this.evalMutStmt(ast);\r\n case \"CompressDef\": return this.evalCompressDef(ast);\r\n case \"BinOp\": return this.evalBinOp(ast);\r\n case \"UnaryOp\": return this.evalUnaryOp(ast);\r\n case \"Pipe\": return this.evalPipe(ast);\r\n case \"FnCall\": return this.evalFnCall(ast);\r\n case \"MemberAccess\": return this.evalMemberAccess(ast);\r\n case \"IndexAccess\": return this.evalIndexAccess(ast);\r\n case \"Extend\": return this.evalExtend(ast);\r\n case \"Reduce\": return this.evalReduce(ast);\r\n case \"ConvergeOp\": return this.evalConverge(ast);\r\n case \"DivergeOp\": return this.evalDiverge(ast);\r\n case \"ReflectOp\": return this.evalReflect(ast);\r\n case \"IfExpr\": return this.evalIfExpr(ast);\r\n case \"MatchExpr\": return this.evalMatchExpr(ast);\r\n // ── v0.3 ──\r\n case \"SpaceLit\": return this.evalSpaceLit(ast);\r\n default:\r\n throw new Error(`未実装のノード型: ${ast.type}`);\r\n }\r\n }\r\n\r\n private evalProgram(ast: any): any {\r\n let result = null;\r\n for (const stmt of ast.body) { result = this.eval(stmt); }\r\n return result;\r\n }\r\n\r\n private evalConstLit(ast: any): any {\r\n switch (ast.value) {\r\n case \"\\u30FB\": return createGenesis();\r\n case \"\\u2205\": return null;\r\n case \"i\": return { reiType: \"Ext\", base: NaN, order: 0, subscripts: \"\", valStar: () => NaN };\r\n case \"\\u03A6\": return \"\\u03A6\";\r\n case \"\\u03A8\": return \"\\u03A8\";\r\n case \"\\u03A9\": return \"\\u03A9\";\r\n default: return null;\r\n }\r\n }\r\n\r\n private evalMDimLit(ast: any): any {\r\n const rawCenter = this.eval(ast.center);\r\n const rawNeighbors = ast.neighbors.map((n: any) => this.eval(n));\r\n\r\n // ── 柱②: 文字列を含む場合はStringMDimを生成 ──\r\n const hasString = typeof rawCenter === 'string' ||\r\n rawNeighbors.some((n: any) => typeof n === 'string');\r\n\r\n if (hasString) {\r\n const center = typeof rawCenter === 'string' ? rawCenter : String(rawCenter);\r\n const neighbors = rawNeighbors.map((n: any) => typeof n === 'string' ? n : String(n));\r\n const mode = ast.mode || \"freeform\";\r\n return {\r\n reiType: 'StringMDim' as const,\r\n center,\r\n neighbors,\r\n mode,\r\n metadata: { source: 'literal' },\r\n } as StringMDim;\r\n }\r\n\r\n const center = this.toNumber(rawCenter);\r\n const neighbors = rawNeighbors.map((n: any) => this.toNumber(n));\r\n const weights = ast.weight ? [this.toNumber(this.eval(ast.weight))] : undefined;\r\n const mode = ast.mode || \"weighted\";\r\n return { reiType: \"MDim\", center, neighbors, mode, weights };\r\n }\r\n\r\n // ── v0.3: Space literal evaluation ──\r\n private evalSpaceLit(ast: any): ReiSpace {\r\n const space = createSpace((ast.topology || \"flat\") as any);\r\n\r\n for (const layerDef of ast.layers) {\r\n const layerIndex = typeof layerDef.index === 'object'\r\n ? this.toNumber(this.eval(layerDef.index))\r\n : layerDef.index;\r\n\r\n for (const nodeExpr of layerDef.nodes) {\r\n const val = this.eval(nodeExpr);\r\n if (this.isMDim(val)) {\r\n addNodeToLayer(space, layerIndex, val.center, val.neighbors, val.mode, val.weights);\r\n } else if (typeof val === 'number') {\r\n addNodeToLayer(space, layerIndex, val, []);\r\n }\r\n }\r\n }\r\n return space;\r\n }\r\n\r\n private evalLetStmt(ast: any): any {\r\n const val = this.eval(ast.init);\r\n this.env.define(ast.name, val, false);\r\n return val;\r\n }\r\n\r\n private evalMutStmt(ast: any): any {\r\n const val = this.eval(ast.init);\r\n this.env.define(ast.name, val, true);\r\n return val;\r\n }\r\n\r\n private evalCompressDef(ast: any): any {\r\n const fn = {\r\n reiType: \"Function\", name: ast.name, params: ast.params,\r\n body: ast.body, closure: this.env,\r\n };\r\n this.env.define(ast.name, fn);\r\n return fn;\r\n }\r\n\r\n private evalBinOp(ast: any): any {\r\n const left = this.eval(ast.left);\r\n const right = this.eval(ast.right);\r\n // Quad logic\r\n if (this.isQuad(left) && this.isQuad(right)) {\r\n switch (ast.op) {\r\n case \"\\u2227\": return { reiType: \"Quad\", value: quadAnd(left.value, right.value) };\r\n case \"\\u2228\": return { reiType: \"Quad\", value: quadOr(left.value, right.value) };\r\n }\r\n }\r\n const l = this.toNumber(left);\r\n const r = this.toNumber(right);\r\n switch (ast.op) {\r\n case \"+\": return l + r;\r\n case \"-\": return l - r;\r\n case \"*\": return l * r;\r\n case \"/\": return r !== 0 ? l / r : NaN;\r\n case \"\\u2295\": return l + r; // ⊕\r\n case \"\\u2297\": return l * r; // ⊗\r\n case \"\\xB7\": return l * r; // ·\r\n case \"==\": return l === r;\r\n case \"!=\": return l !== r;\r\n case \">\": return l > r;\r\n case \"<\": return l < r;\r\n case \">=\": return l >= r;\r\n case \"<=\": return l <= r;\r\n case \">\\u03BA\": return l > r; // >κ\r\n case \"<\\u03BA\": return l < r; // <κ\r\n case \"=\\u03BA\": return l === r; // =κ\r\n case \"\\u2227\": return l !== 0 && r !== 0; // ∧\r\n case \"\\u2228\": return l !== 0 || r !== 0; // ∨\r\n default: throw new Error(`未知の演算子: ${ast.op}`);\r\n }\r\n }\r\n\r\n private evalUnaryOp(ast: any): any {\r\n const operand = this.eval(ast.operand);\r\n switch (ast.op) {\r\n case \"-\": return -this.toNumber(operand);\r\n case \"\\xAC\":\r\n if (this.isQuad(operand)) return { reiType: \"Quad\", value: quadNot(operand.value) };\r\n return !operand;\r\n default: throw new Error(`未知の単項演算子: ${ast.op}`);\r\n }\r\n }\r\n\r\n private evalPipe(ast: any): any {\r\n const rawInput = this.eval(ast.input);\r\n const cmd = ast.command;\r\n if (cmd.type === \"PipeCmd\") {\r\n // ── Tier 1: σメモリ追跡 ──\r\n // sigmaコマンド自体はラップしない(参照操作なので)\r\n if (cmd.cmd === \"sigma\") {\r\n return this.execPipeCmd(rawInput, cmd);\r\n }\r\n // ── Serialization: serialize/deserialize もラップしない ──\r\n if (cmd.cmd === \"serialize\" || cmd.cmd === \"serialize_pretty\") {\r\n return reiSerialize(rawInput, cmd.cmd === \"serialize_pretty\");\r\n }\r\n if (cmd.cmd === \"deserialize\") {\r\n return reiDeserialize(rawInput);\r\n }\r\n // ── RCT: compress/decompress/compress_info もラップしない ──\r\n if (cmd.cmd === \"compress\" || cmd.cmd === \"圧縮\") {\r\n return reiCompress(rawInput);\r\n }\r\n if (cmd.cmd === \"decompress\" || cmd.cmd === \"復元\") {\r\n return reiDecompress(rawInput);\r\n }\r\n if (cmd.cmd === \"compress_info\" || cmd.cmd === \"圧縮情報\") {\r\n return reiCompressInfo(rawInput);\r\n }\r\n // ── RCT 方向3: semantic_compress/decompress/verify ──\r\n if (cmd.cmd === \"semantic_compress\" || cmd.cmd === \"意味圧縮\") {\r\n const data = typeof rawInput === 'string' ? rawInput : JSON.stringify(rawInput);\r\n const evalArgs = (cmd.args || []).map((a: any) => this.eval(a));\r\n const fidelity = (evalArgs.length > 1 && typeof evalArgs[1] === 'string' ? evalArgs[1] : 'high');\r\n return reiLocalSemanticCompress(data, fidelity);\r\n }\r\n if (cmd.cmd === \"semantic_decompress\" || cmd.cmd === \"意味復元\") {\r\n return reiLocalSemanticDecompress(rawInput);\r\n }\r\n if (cmd.cmd === \"semantic_verify\" || cmd.cmd === \"意味検証\") {\r\n if (!Array.isArray(rawInput) || rawInput.length < 2) {\r\n throw new Error('semantic_verify expects [original, reconstructed] array');\r\n }\r\n const orig = typeof rawInput[0] === 'string' ? rawInput[0] : JSON.stringify(rawInput[0]);\r\n const recon = typeof rawInput[1] === 'string' ? rawInput[1] : JSON.stringify(rawInput[1]);\r\n return reiLocalSemanticVerify(orig, recon);\r\n }\r\n // ── Evolve: evolve_value はラップしない(直値返却) ──\r\n if (cmd.cmd === \"evolve_value\") {\r\n return this.execPipeCmd(rawInput, cmd);\r\n }\r\n // ── 柱④: Thought Loop — think/思考 はラップしない(ThoughtResult直返却) ──\r\n if (cmd.cmd === \"think\" || cmd.cmd === \"思考\" ||\r\n cmd.cmd === \"think_trajectory\" || cmd.cmd === \"軌跡\" ||\r\n cmd.cmd === \"think_modes\" || cmd.cmd === \"think_dominant\" ||\r\n cmd.cmd === \"think_format\" || cmd.cmd === \"思考表示\") {\r\n return this.execPipeCmd(rawInput, cmd);\r\n }\r\n // ThoughtResultの後続パイプも直値返却\r\n if (rawInput?.reiType === 'ThoughtResult' || (rawInput?.reiType === 'ReiVal' && rawInput?.value?.reiType === 'ThoughtResult')) {\r\n const thoughtAccessors = [\r\n \"final_value\", \"最終値\", \"iterations\", \"反復数\",\r\n \"stop_reason\", \"停止理由\", \"trajectory\", \"軌跡\",\r\n \"convergence\", \"収束率\", \"awareness\", \"覚醒度\",\r\n \"tendency\", \"意志\", \"steps\", \"全履歴\",\r\n \"dominant_mode\", \"支配モード\",\r\n ];\r\n if (thoughtAccessors.includes(cmd.cmd)) {\r\n return this.execPipeCmd(rawInput, cmd);\r\n }\r\n }\r\n // ── 柱⑤: Game/Random — ラップしない(直値返却) ──\r\n const gameCommands = [\r\n \"game\", \"ゲーム\", \"play\", \"打つ\", \"auto_play\", \"自動対局\",\r\n \"best_move\", \"最善手\", \"legal_moves\", \"合法手\",\r\n \"game_format\", \"盤面表示\", \"game_sigma\",\r\n \"simulate\", \"シミュレート\",\r\n \"random\", \"ランダム\", \"random_walk\", \"entropy\", \"エントロピー\",\r\n \"monte_carlo\", \"seed\",\r\n ];\r\n if (gameCommands.includes(cmd.cmd)) {\r\n return this.execPipeCmd(rawInput, cmd);\r\n }\r\n // GameSpaceの後続パイプも直値返却\r\n const unwrappedForGame = rawInput?.reiType === 'ReiVal' ? rawInput.value : rawInput;\r\n if (unwrappedForGame?.reiType === 'GameSpace') {\r\n const gameAccessors = [\r\n \"play\", \"打つ\", \"auto_play\", \"自動対局\",\r\n \"best_move\", \"最善手\", \"legal_moves\", \"合法手\",\r\n \"board\", \"盤面\", \"status\", \"状態\", \"winner\", \"勝者\",\r\n \"turn\", \"手番\", \"history\", \"棋譜\",\r\n \"game_format\", \"盤面表示\", \"sigma\",\r\n \"as_mdim\",\r\n ];\r\n if (gameAccessors.includes(cmd.cmd)) {\r\n return this.execPipeCmd(rawInput, cmd);\r\n }\r\n }\r\n // RandomResult/EntropyAnalysisの後続パイプも直値返却\r\n if (unwrappedForGame?.reiType === 'RandomResult' || unwrappedForGame?.reiType === 'EntropyAnalysis') {\r\n return this.execPipeCmd(rawInput, cmd);\r\n }\r\n // ── 柱③: Puzzle — パズルコマンドはラップしない(直値返却) ──\r\n const puzzleCommands = [\r\n \"puzzle\", \"パズル\", \"数独\", \"sudoku\", \"latin_square\", \"ラテン方陣\",\r\n \"solve\", \"解く\", \"propagate\", \"伝播\", \"propagate_pair\",\r\n \"cell\", \"セル\", \"grid\", \"盤面\", \"candidates\", \"候補\",\r\n \"puzzle_format\", \"数独表示\", \"difficulty\", \"難易度\",\r\n \"generate_sudoku\", \"数独生成\",\r\n ];\r\n if (puzzleCommands.includes(cmd.cmd)) {\r\n return this.execPipeCmd(rawInput, cmd);\r\n }\r\n // PuzzleSpaceの後続パイプも直値返却\r\n const unwrappedForPuzzle = rawInput?.reiType === 'ReiVal' ? rawInput.value : rawInput;\r\n if (unwrappedForPuzzle?.reiType === 'PuzzleSpace') {\r\n const puzzleAccessors = [\r\n \"solve\", \"解く\", \"propagate\", \"伝播\", \"propagate_pair\",\r\n \"cell\", \"セル\", \"grid\", \"盤面\", \"candidates\", \"候補\",\r\n \"puzzle_format\", \"数独表示\", \"difficulty\", \"難易度\",\r\n \"sigma\", \"status\", \"状態\", \"history\", \"履歴\",\r\n \"as_mdim\",\r\n ];\r\n if (puzzleAccessors.includes(cmd.cmd)) {\r\n return this.execPipeCmd(rawInput, cmd);\r\n }\r\n }\r\n // ── 柱②: StringMDimアクセサはラップしない(参照操作) ──\r\n const stringMDimAccessors = [\r\n \"strokes\", \"画数\", \"category\", \"六書\", \"meaning\", \"意味\",\r\n \"readings\", \"読み\", \"radicals\", \"部首\", \"phonetic_group\", \"音符\",\r\n \"compose\", \"合成\", \"decompose\", \"分解\", \"similarity\", \"類似\",\r\n ];\r\n if (stringMDimAccessors.includes(cmd.cmd)) {\r\n return this.execPipeCmd(rawInput, cmd);\r\n }\r\n // ── v0.4: 関係・意志コマンド — ラップしない(直値返却) ──\r\n const relationWillCommands = [\r\n \"bind\", \"結合\", \"unbind\", \"解除\", \"unbind_all\", \"全解除\",\r\n \"bindings\", \"結合一覧\", \"cause\", \"因果\",\r\n \"propagate_bindings\", \"伝播実行\",\r\n \"intend\", \"意志\", \"will_compute\", \"意志計算\",\r\n \"will_iterate\", \"意志反復\",\r\n \"intention\", \"意志確認\", \"satisfaction\", \"満足度\",\r\n ];\r\n if (relationWillCommands.includes(cmd.cmd)) {\r\n return this.execPipeCmd(rawInput, cmd);\r\n }\r\n const result = this.execPipeCmd(rawInput, cmd);\r\n // パイプ通過時にσメタデータを付与\r\n const prevMeta = getSigmaOf(rawInput);\r\n return wrapWithSigma(result, rawInput, prevMeta.pipeCount > 0 ? prevMeta : undefined);\r\n }\r\n throw new Error(\"無効なパイプコマンド\");\r\n }\r\n\r\n private execPipeCmd(input: any, cmd: any): any {\r\n const { cmd: cmdName, mode, args: argNodes } = cmd;\r\n const args = argNodes.map((a: any) => this.eval(a));\r\n\r\n // ── Tier 1: σメタデータを保存してからアンラップ ──\r\n const sigmaMetadata = getSigmaOf(input);\r\n const rawInput = unwrapReiVal(input);\r\n\r\n // ═══════════════════════════════════════════\r\n // Tier 1: σ(全値型の自己参照 — 公理C1)\r\n // ═══════════════════════════════════════════\r\n if (cmdName === \"sigma\") {\r\n // Space — 既存のgetSpaceSigmaに委譲\r\n if (this.isSpace(rawInput)) return getSpaceSigma(rawInput as ReiSpace);\r\n // DNode — 既存のσ関数と統合\r\n if (this.isDNode(rawInput)) {\r\n const dn = rawInput as DNode;\r\n return {\r\n reiType: \"SigmaResult\",\r\n flow: getSigmaFlow(dn),\r\n memory: [...getSigmaMemory(dn), ...sigmaMetadata.memory],\r\n layer: dn.layerIndex,\r\n will: getSigmaWill(dn),\r\n field: { center: dn.center, neighbors: [...dn.neighbors], layer: dn.layerIndex, index: dn.nodeIndex },\r\n relation: [],\r\n };\r\n }\r\n // ── 柱②: StringMDim — 構造情報をσとして返す ──\r\n if (rawInput !== null && typeof rawInput === 'object' && rawInput.reiType === 'StringMDim') {\r\n const sm = rawInput as StringMDim;\r\n return {\r\n reiType: 'SigmaResult',\r\n field: { center: sm.center, neighbors: sm.neighbors, mode: sm.mode, type: 'string' },\r\n flow: { direction: 'rest', momentum: 0, velocity: 0 },\r\n memory: sigmaMetadata.memory,\r\n layer: 0,\r\n will: { tendency: sigmaMetadata.tendency, strength: 0, history: [] },\r\n relation: sm.neighbors.map((n: string) => ({ from: sm.center, to: n, type: sm.mode })),\r\n };\r\n }\r\n // ── 柱④: ThoughtResult — 思考ループ結果のσ ──\r\n if (rawInput !== null && typeof rawInput === 'object' && rawInput.reiType === 'ThoughtResult') {\r\n return getThoughtSigma(rawInput as ThoughtResult);\r\n }\r\n // ── 柱⑤: GameSpace — ゲームのσ ──\r\n if (rawInput !== null && typeof rawInput === 'object' && rawInput.reiType === 'GameSpace') {\r\n return getGameSigma(rawInput as GameSpace);\r\n }\r\n // ── 柱③: PuzzleSpace — パズルのσ ──\r\n if (rawInput !== null && typeof rawInput === 'object' && rawInput.reiType === 'PuzzleSpace') {\r\n return getPuzzleSigma(rawInput as PuzzleSpace);\r\n }\r\n // 全値型 — C1公理のσ関数\r\n const sigmaResult = buildSigmaResult(rawInput, sigmaMetadata);\r\n // ── v0.4: σにrelation/will情報を注入 ──\r\n const ref = this.findRefByValue(input);\r\n if (ref) {\r\n sigmaResult.relation = this.bindingRegistry.buildRelationSigma(ref);\r\n }\r\n const intention = getIntentionOf(rawInput);\r\n if (intention) {\r\n sigmaResult.will = buildWillSigma(intention);\r\n }\r\n return sigmaResult;\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // v0.3: Space pipe commands (rawInputを使用)\r\n // ═══════════════════════════════════════════\r\n if (this.isSpace(rawInput)) {\r\n const sp = rawInput as ReiSpace;\r\n switch (cmdName) {\r\n case \"step\": {\r\n const targetLayer = args.length > 0 ? this.toNumber(args[0]) : undefined;\r\n stepSpace(sp, targetLayer);\r\n return sp;\r\n }\r\n case \"diffuse\": {\r\n let criteria: ConvergenceCriteria = { type: 'converged' };\r\n let targetLayer: number | undefined;\r\n let contractionMethod: ContractionMethod = 'weighted';\r\n\r\n if (args.length >= 1) {\r\n const arg0 = args[0];\r\n if (typeof arg0 === 'number') {\r\n criteria = { type: 'steps', max: arg0 };\r\n } else if (typeof arg0 === 'string') {\r\n switch (arg0) {\r\n case 'converged': criteria = { type: 'converged' }; break;\r\n case 'fixed': criteria = { type: 'fixed' }; break;\r\n default:\r\n const eps = parseFloat(arg0);\r\n if (!isNaN(eps)) criteria = { type: 'epsilon', threshold: eps };\r\n }\r\n }\r\n }\r\n if (args.length >= 2 && typeof args[1] === 'number') targetLayer = args[1];\r\n if (args.length >= 3 && typeof args[2] === 'string') contractionMethod = args[2] as ContractionMethod;\r\n\r\n return diffuseSpace(sp, criteria, targetLayer, contractionMethod);\r\n }\r\n case \"node\": {\r\n const layerIdx = args.length >= 1 ? this.toNumber(args[0]) : 0;\r\n const nodeIdx = args.length >= 2 ? this.toNumber(args[1]) : 0;\r\n const layer = sp.layers.get(layerIdx);\r\n if (layer && layer.nodes[nodeIdx]) return layer.nodes[nodeIdx];\r\n throw new Error(`ノードが見つかりません: 層${layerIdx}, index ${nodeIdx}`);\r\n }\r\n case \"sigma\": return getSpaceSigma(sp);\r\n case \"resonances\": {\r\n const threshold = args.length >= 1 ? this.toNumber(args[0]) : 0.5;\r\n return findResonances(sp, threshold);\r\n }\r\n case \"freeze\": {\r\n const layerIdx = this.toNumber(args[0] ?? 0);\r\n const layer = sp.layers.get(layerIdx);\r\n if (layer) layer.frozen = true;\r\n return sp;\r\n }\r\n case \"thaw\": {\r\n const layerIdx = this.toNumber(args[0] ?? 0);\r\n const layer = sp.layers.get(layerIdx);\r\n if (layer) layer.frozen = false;\r\n return sp;\r\n }\r\n case \"spawn\": {\r\n const val = args[0];\r\n const layerIdx = args.length >= 2 ? this.toNumber(args[1]) : 0;\r\n if (this.isMDim(val)) {\r\n addNodeToLayer(sp, layerIdx, val.center, val.neighbors, val.mode, val.weights);\r\n }\r\n return sp;\r\n }\r\n case \"result\": {\r\n const layerIdx = args.length >= 1 ? this.toNumber(args[0]) : undefined;\r\n const results: number[] = [];\r\n for (const [lIdx, layer] of sp.layers) {\r\n if (layerIdx !== undefined && lIdx !== layerIdx) continue;\r\n for (const n of layer.nodes) results.push(computeNodeValue(n));\r\n }\r\n return results.length === 1 ? results[0] : results;\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // Phase 3統合: Space × Auto-bind — 共鳴→自動結合\r\n // ═══════════════════════════════════════════\r\n\r\n // auto_bind / 自動結合: findResonancesの結果をBindingRegistryに登録\r\n case \"auto_bind\": case \"自動結合\": {\r\n const threshold = args.length >= 1 ? this.toNumber(args[0]) : 0.5;\r\n const resonances = findResonances(sp, threshold);\r\n let bindCount = 0;\r\n for (const pair of resonances) {\r\n const refA = `node_${pair.nodeA.layer}_${pair.nodeA.index}`;\r\n const refB = `node_${pair.nodeB.layer}_${pair.nodeB.index}`;\r\n // 既存の結合をチェック\r\n const existing = this.bindingRegistry.getBindingsFor(refA);\r\n if (existing.some(b => b.target === refB)) continue;\r\n // 共鳴度に応じた結合強度で resonance 結合を作成\r\n this.bindingRegistry.bind(refA, refB, 'resonance', pair.similarity, true);\r\n bindCount++;\r\n }\r\n return {\r\n reiType: 'AutoBindResult' as const,\r\n resonancesFound: resonances.length,\r\n bindingsCreated: bindCount,\r\n threshold,\r\n pairs: resonances.map(p => ({\r\n nodeA: p.nodeA,\r\n nodeB: p.nodeB,\r\n similarity: p.similarity,\r\n })),\r\n };\r\n }\r\n\r\n // space_relations / 場関係: 全結合を照会\r\n case \"space_relations\": case \"場関係\": {\r\n const allBindings: any[] = [];\r\n for (const [layerIdx, layer] of sp.layers) {\r\n for (let i = 0; i < layer.nodes.length; i++) {\r\n const ref = `node_${layerIdx}_${i}`;\r\n const bindings = this.bindingRegistry.getBindingsFor(ref);\r\n if (bindings.length > 0) {\r\n allBindings.push({\r\n node: { layer: layerIdx, index: i },\r\n center: layer.nodes[i].center,\r\n bindings: bindings.map(b => ({\r\n target: b.target,\r\n mode: b.mode,\r\n strength: b.strength,\r\n })),\r\n });\r\n }\r\n }\r\n }\r\n return {\r\n totalBindings: allBindings.reduce((s, n) => s + n.bindings.length, 0),\r\n nodes: allBindings,\r\n };\r\n }\r\n }\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // v0.3: DNode pipe commands\r\n // ═══════════════════════════════════════════\r\n if (this.isDNode(rawInput)) {\r\n const dn = rawInput as DNode;\r\n switch (cmdName) {\r\n case \"sigma\": {\r\n // Tier 1: 上のσハンドラに統合済み — ここには到達しない\r\n return buildSigmaResult(dn, sigmaMetadata);\r\n }\r\n case \"compute\": return computeNodeValue(dn);\r\n case \"center\": return dn.center;\r\n case \"neighbors\": return dn.neighbors;\r\n case \"dim\": return dn.neighbors.length;\r\n case \"stage\": return dn.stage;\r\n case \"step\": { stepNode(dn); return dn; }\r\n case \"extract\": {\r\n return { reiType: \"MDim\", center: dn.center, neighbors: dn.neighbors, mode: dn.mode, weights: dn.weights };\r\n }\r\n }\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // v0.3: SigmaResult pipe commands\r\n // ═══════════════════════════════════════════\r\n if (this.isObj(rawInput) && rawInput.reiType === \"SigmaResult\") {\r\n switch (cmdName) {\r\n case \"flow\": return rawInput.flow;\r\n case \"memory\": return rawInput.memory;\r\n case \"layer\": case \"層\": return rawInput.layer;\r\n case \"will\": return rawInput.will;\r\n case \"field\": return rawInput.field;\r\n case \"relation\": return rawInput.relation ?? [];\r\n }\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // Tier 2: project(N1 射影公理)/ reproject(N2 複数射影)\r\n // ═══════════════════════════════════════════\r\n if (cmdName === \"project\") {\r\n const centerSpec = args.length > 0 ? args[0] : ':first';\r\n return projectToMDim(rawInput, centerSpec, args);\r\n }\r\n if (cmdName === \"reproject\") {\r\n if (this.isMDim(rawInput) && args.length > 0) {\r\n const newCenter = args[0];\r\n const allElements = [rawInput.center, ...rawInput.neighbors];\r\n const idx = typeof newCenter === 'number'\r\n ? allElements.indexOf(newCenter)\r\n : 0;\r\n if (idx < 0) throw new Error(`reproject: 中心値 ${newCenter} が見つかりません`);\r\n const center = allElements[idx];\r\n const neighbors = allElements.filter((_: any, i: number) => i !== idx);\r\n return { reiType: \"MDim\", center, neighbors, mode: rawInput.mode };\r\n }\r\n // 非MDimの場合はprojectにフォールバック\r\n return projectToMDim(rawInput, args[0] ?? ':first', args);\r\n }\r\n if (cmdName === \"modes\") {\r\n return [...ALL_COMPUTE_MODES];\r\n }\r\n if (cmdName === \"blend\") {\r\n // blend(\"weighted\", 0.7, \"geometric\", 0.3) — モード合成(M3: モード合成公理)\r\n if (!this.isMDim(rawInput)) throw new Error(\"blend: 𝕄型の値が必要です\");\r\n let blendedResult = 0;\r\n let totalWeight = 0;\r\n for (let i = 0; i < args.length - 1; i += 2) {\r\n const modeName = String(args[i]);\r\n const w = typeof args[i + 1] === 'number' ? args[i + 1] : 0;\r\n const result = computeMDim({ ...rawInput, mode: modeName });\r\n blendedResult += w * result;\r\n totalWeight += w;\r\n }\r\n return totalWeight > 0 ? blendedResult / totalWeight : computeMDim(rawInput);\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // Tier 3: U1(構造還元) & A1(解の多元性)\r\n // ═══════════════════════════════════════════\r\n if (cmdName === \"project_all\") {\r\n // U1.2: n要素 → n通りの全射影\r\n return projectAll(rawInput);\r\n }\r\n if (cmdName === \"compute_all\") {\r\n // A1: 全モードで計算 → 解の多元性\r\n if (this.isMDim(rawInput)) return computeAll(rawInput);\r\n // 配列の場合は先にproject → compute_all\r\n if (Array.isArray(rawInput)) {\r\n const projected = projectToMDim(rawInput, 'first', []);\r\n return computeAll(projected);\r\n }\r\n return [];\r\n }\r\n if (cmdName === \"compare\") {\r\n // A1: 2モード比較\r\n if (!this.isMDim(rawInput)) throw new Error(\"compare: 𝕄型の値が必要です\");\r\n const mode1 = args.length >= 1 ? String(args[0]) : \"weighted\";\r\n const mode2 = args.length >= 2 ? String(args[1]) : \"geometric\";\r\n return compareModes(rawInput, mode1, mode2);\r\n }\r\n if (cmdName === \"perspectives\") {\r\n // U1+A1: 全射影 × 全モード\r\n return perspectives(rawInput);\r\n }\r\n if (cmdName === \"flatten_nested\") {\r\n // U1: ネスト𝕄の再帰的フラット化\r\n if (this.isMDim(rawInput)) return computeNestedMDim(rawInput);\r\n return rawInput;\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // Tier 4: C3(応答) & C4(覚醒) & U2(変換保存) & M2(モード等価)\r\n // ═══════════════════════════════════════════\r\n if (cmdName === \"respond\") {\r\n // C3: 外部刺激への応答\r\n const stimulus = args.length >= 1 ? this.toNumber(args[0]) : 0;\r\n const method = args.length >= 2 ? String(args[1]) : 'absorb';\r\n return respondToStimulus(rawInput, stimulus, method);\r\n }\r\n if (cmdName === \"sensitivity\") {\r\n // C3: 応答感度の測定\r\n return computeSensitivity(rawInput);\r\n }\r\n if (cmdName === \"awareness\") {\r\n // C4: 覚醒度スコア(0.0〜1.0)\r\n return computeAwareness(rawInput, sigmaMetadata);\r\n }\r\n if (cmdName === \"awakened\") {\r\n // C4: 覚醒判定\r\n return computeAwareness(rawInput, sigmaMetadata) >= AWAKENING_THRESHOLD;\r\n }\r\n if (cmdName === \"transform\") {\r\n // U2: 変換パターンの統一適用\r\n const transformName = args.length >= 1 ? String(args[0]) : 'scale';\r\n const param = args.length >= 2 ? this.toNumber(args[1]) : 1;\r\n return applyTransform(rawInput, transformName, param);\r\n }\r\n if (cmdName === \"mode_equiv\") {\r\n // M2: モード等価判定\r\n if (!this.isMDim(rawInput)) throw new Error(\"mode_equiv: 𝕄型の値が必要です\");\r\n const m1 = args.length >= 1 ? String(args[0]) : \"weighted\";\r\n const m2 = args.length >= 2 ? String(args[1]) : \"geometric\";\r\n return checkModeEquivalence(rawInput, m1, m2);\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // Tier 5: C5(共鳴) & N3-N5 & M4-M5 & U3-U5 & A2-A5\r\n // ═══════════════════════════════════════════\r\n\r\n // C5: 共鳴\r\n if (cmdName === \"resonate\") {\r\n // C5: 2つの値の共鳴を算出\r\n if (args.length < 1) throw new Error(\"resonate: 比較対象が必要です\");\r\n return computeResonance(rawInput, args[0]);\r\n }\r\n if (cmdName === \"resonance_field\") {\r\n // C5: 共鳴場の取得\r\n return getResonanceField(rawInput, sigmaMetadata);\r\n }\r\n if (cmdName === \"resonance_map\") {\r\n // C5: 共鳴マップ(全ペアの共鳴)\r\n return resonanceMap(rawInput);\r\n }\r\n if (cmdName === \"resonance_chain\") {\r\n // C5: 共鳴チェーン\r\n return resonanceChain(rawInput);\r\n }\r\n\r\n // N3: 型変換射影\r\n if (cmdName === \"project_as\") {\r\n const targetType = args.length >= 1 ? String(args[0]) : 'graph';\r\n return projectAs(rawInput, targetType);\r\n }\r\n\r\n // N4: 射影合成\r\n if (cmdName === \"compose_projections\") {\r\n return composeProjections(rawInput);\r\n }\r\n\r\n // N5: 表現可能性判定\r\n if (cmdName === \"representable\") {\r\n return checkRepresentable(rawInput);\r\n }\r\n\r\n // M4: モード導出\r\n if (cmdName === \"derive_mode\") {\r\n if (!this.isMDim(rawInput)) throw new Error(\"derive_mode: 𝕄型が必要です\");\r\n const modes = args.filter((a: any) => typeof a === 'string');\r\n const weights = args.filter((a: any) => typeof a === 'number');\r\n if (modes.length === 0) modes.push('weighted', 'geometric');\r\n if (weights.length === 0) weights.push(0.5, 0.5);\r\n return deriveMode(rawInput, modes, weights);\r\n }\r\n\r\n // M5: モード空間\r\n if (cmdName === \"mode_space\") {\r\n return getModeSpace(rawInput);\r\n }\r\n\r\n // U3: 階層再帰\r\n if (cmdName === \"depth\") {\r\n return measureDepth(rawInput);\r\n }\r\n if (cmdName === \"nest\") {\r\n const levels = args.length >= 1 ? this.toNumber(args[0]) : 1;\r\n return nestMDim(rawInput, levels);\r\n }\r\n if (cmdName === \"recursive_compute\") {\r\n return recursiveCompute(rawInput);\r\n }\r\n\r\n // U4: 領域架橋\r\n if (cmdName === \"bridge\") {\r\n if (args.length < 1) throw new Error(\"bridge: 比較対象が必要です\");\r\n return bridgeMDim(rawInput, args[0]);\r\n }\r\n if (cmdName === \"structural_similarity\") {\r\n if (args.length < 1) throw new Error(\"structural_similarity: 比較対象が必要です\");\r\n return structuralSimilarity(rawInput, args[0]);\r\n }\r\n\r\n // U5: 完全性\r\n if (cmdName === \"encode\") {\r\n return encodeMDim(rawInput);\r\n }\r\n if (cmdName === \"decode\") {\r\n const targetType = args.length >= 1 ? String(args[0]) : 'array';\r\n return decodeMDim(rawInput, targetType);\r\n }\r\n\r\n // A2: 解変換\r\n if (cmdName === \"map_solutions\") {\r\n if (!this.isMDim(rawInput)) {\r\n if (Array.isArray(rawInput)) {\r\n const projected = projectToMDim(rawInput, 'first', []);\r\n return mapSolutions(projected, args.length >= 1 ? String(args[0]) : 'scale', args.length >= 2 ? this.toNumber(args[1]) : 1);\r\n }\r\n throw new Error(\"map_solutions: 𝕄型または配列が必要です\");\r\n }\r\n return mapSolutions(rawInput, args.length >= 1 ? String(args[0]) : 'scale', args.length >= 2 ? this.toNumber(args[1]) : 1);\r\n }\r\n\r\n // A3: 合意形成\r\n if (cmdName === \"consensus\") {\r\n if (!this.isMDim(rawInput)) {\r\n if (Array.isArray(rawInput)) {\r\n return computeConsensus(projectToMDim(rawInput, 'first', []));\r\n }\r\n throw new Error(\"consensus: 𝕄型または配列が必要です\");\r\n }\r\n return computeConsensus(rawInput);\r\n }\r\n\r\n // A4: 最良解・ランキング\r\n if (cmdName === \"best\") {\r\n if (!this.isMDim(rawInput)) {\r\n if (Array.isArray(rawInput)) {\r\n return selectBest(projectToMDim(rawInput, 'first', []), args.length >= 1 ? String(args[0]) : 'median_closest');\r\n }\r\n throw new Error(\"best: 𝕄型または配列が必要です\");\r\n }\r\n return selectBest(rawInput, args.length >= 1 ? String(args[0]) : 'median_closest');\r\n }\r\n if (cmdName === \"rank\") {\r\n if (!this.isMDim(rawInput)) {\r\n if (Array.isArray(rawInput)) {\r\n return rankSolutions(projectToMDim(rawInput, 'first', []), args.length >= 1 ? String(args[0]) : 'value');\r\n }\r\n throw new Error(\"rank: 𝕄型または配列が必要です\");\r\n }\r\n return rankSolutions(rawInput, args.length >= 1 ? String(args[0]) : 'value');\r\n }\r\n\r\n // A5: 解の完全性\r\n if (cmdName === \"solution_completeness\") {\r\n if (!this.isMDim(rawInput)) {\r\n if (Array.isArray(rawInput)) {\r\n return solutionCompleteness(projectToMDim(rawInput, 'first', []));\r\n }\r\n throw new Error(\"solution_completeness: 𝕄型または配列が必要です\");\r\n }\r\n return solutionCompleteness(rawInput);\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // Evolve — 自動モード選択(柱①)\r\n // ═══════════════════════════════════════════\r\n if (cmdName === \"evolve\") {\r\n // evolve / evolve(\"stable\") / evolve(\"divergent\") / evolve(\"creative\") / evolve(\"tendency\")\r\n const strategy = args.length >= 1 ? String(args[0]) : 'auto';\r\n return evolveMode(input, sigmaMetadata, strategy);\r\n }\r\n if (cmdName === \"evolve_value\") {\r\n // evolveの結果から値だけを取得するショートカット\r\n const strategy = args.length >= 1 ? String(args[0]) : 'auto';\r\n const result = evolveMode(input, sigmaMetadata, strategy);\r\n return result.value;\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // v0.4: 関係(Relation)— 非局所的結合\r\n // ═══════════════════════════════════════════\r\n\r\n if (cmdName === \"bind\" || cmdName === \"結合\") {\r\n // a |> bind(\"b\", \"mirror\") or a |> bind(\"b\", \"mirror\", 0.8)\r\n // a |> 結合(\"b\", \"鏡像\")\r\n if (args.length < 1) throw new Error(\"bind: ターゲット変数名が必要です\");\r\n const targetRef = String(args[0]);\r\n const modeArg = args.length >= 2 ? String(args[1]) : 'mirror';\r\n const strength = args.length >= 3 ? this.toNumber(args[2]) : 1.0;\r\n const bidir = args.length >= 4 ? !!args[3] : false;\r\n\r\n // 日本語モード名の変換\r\n const modeMap: Record<string, BindingMode> = {\r\n 'mirror': 'mirror', '鏡像': 'mirror',\r\n 'inverse': 'inverse', '反転': 'inverse',\r\n 'resonance': 'resonance', '共鳴': 'resonance',\r\n 'entangle': 'entangle', 'もつれ': 'entangle',\r\n 'causal': 'causal', '因果': 'causal',\r\n };\r\n const bindMode: BindingMode = modeMap[modeArg] ?? 'mirror';\r\n\r\n // ソース変数名の逆引き\r\n const sourceRef = this.findRefByValue(input) ?? `__anon_${Date.now()}`;\r\n\r\n // ターゲットが環境に存在するか確認\r\n if (!this.env.has(targetRef)) {\r\n throw new Error(`bind: 変数 '${targetRef}' が見つかりません`);\r\n }\r\n\r\n const binding = this.bindingRegistry.bind(sourceRef, targetRef, bindMode, strength, bidir);\r\n return {\r\n reiType: 'BindResult' as const,\r\n binding,\r\n source: rawInput,\r\n target: this.env.get(targetRef),\r\n };\r\n }\r\n\r\n if (cmdName === \"cause\" || cmdName === \"因果\") {\r\n // a |> cause(\"b\") — causal一方向結合のショートカット\r\n if (args.length < 1) throw new Error(\"cause: ターゲット変数名が必要です\");\r\n const targetRef = String(args[0]);\r\n const strength = args.length >= 2 ? this.toNumber(args[1]) : 1.0;\r\n const sourceRef = this.findRefByValue(input) ?? `__anon_${Date.now()}`;\r\n\r\n if (!this.env.has(targetRef)) {\r\n throw new Error(`cause: 変数 '${targetRef}' が見つかりません`);\r\n }\r\n\r\n const binding = this.bindingRegistry.bind(sourceRef, targetRef, 'causal', strength, false);\r\n return {\r\n reiType: 'BindResult' as const,\r\n binding,\r\n source: rawInput,\r\n target: this.env.get(targetRef),\r\n };\r\n }\r\n\r\n if (cmdName === \"unbind\" || cmdName === \"解除\") {\r\n // a |> unbind(\"b\")\r\n if (args.length < 1) throw new Error(\"unbind: ターゲット変数名が必要です\");\r\n const targetRef = String(args[0]);\r\n const sourceRef = this.findRefByValue(input) ?? '';\r\n const result = this.bindingRegistry.unbind(sourceRef, targetRef);\r\n return result;\r\n }\r\n\r\n if (cmdName === \"unbind_all\" || cmdName === \"全解除\") {\r\n // a |> unbind_all\r\n const ref = this.findRefByValue(input) ?? '';\r\n return this.bindingRegistry.unbindAll(ref);\r\n }\r\n\r\n if (cmdName === \"bindings\" || cmdName === \"結合一覧\") {\r\n // a |> bindings — この値の全結合リスト\r\n const ref = this.findRefByValue(input) ?? '';\r\n return this.bindingRegistry.getBindingsFor(ref);\r\n }\r\n\r\n if (cmdName === \"propagate_bindings\" || cmdName === \"伝播実行\") {\r\n // a |> propagate_bindings — この値の結合先に現在値を伝播\r\n const ref = this.findRefByValue(input);\r\n if (!ref) throw new Error(\"propagate_bindings: 変数参照を解決できません\");\r\n const count = this.triggerPropagation(ref, rawInput);\r\n return { propagated: count, source: ref };\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // v0.4: 意志(Will)— 自律的目標指向\r\n // ═══════════════════════════════════════════\r\n\r\n if (cmdName === \"intend\" || cmdName === \"意志\") {\r\n // 𝕄{5; 1,2,3} |> intend(\"seek\", 10)\r\n // 𝕄{5; 1,2,3} |> 意志(\"接近\", 10)\r\n if (args.length < 1) throw new Error(\"intend: 意志の種類が必要です\");\r\n const typeArg = String(args[0]);\r\n const target = args.length >= 2 ? this.toNumber(args[1]) : undefined;\r\n const patience = args.length >= 3 ? this.toNumber(args[2]) : 50;\r\n\r\n // 日本語意志タイプの変換\r\n const typeMap: Record<string, IntentionType> = {\r\n 'seek': 'seek', '接近': 'seek',\r\n 'avoid': 'avoid', '回避': 'avoid',\r\n 'stabilize': 'stabilize', '安定': 'stabilize',\r\n 'explore': 'explore', '探索': 'explore',\r\n 'harmonize': 'harmonize', '調和': 'harmonize',\r\n 'maximize': 'maximize', '最大化': 'maximize',\r\n 'minimize': 'minimize', '最小化': 'minimize',\r\n };\r\n const intentType: IntentionType = typeMap[typeArg] ?? 'seek';\r\n\r\n const intention = createIntention(intentType, target, patience);\r\n\r\n // harmonize の場合、結合先の値を目標に設定\r\n if (intentType === 'harmonize') {\r\n const ref = this.findRefByValue(input);\r\n if (ref) {\r\n const bindings = this.bindingRegistry.getBindingsFor(ref);\r\n if (bindings.length > 0 && bindings[0].active) {\r\n try {\r\n const targetVal = this.env.get(bindings[0].target);\r\n intention.target = toNumSafe(targetVal);\r\n } catch { /* ignore */ }\r\n }\r\n }\r\n }\r\n\r\n // 値に意志を付与して返す\r\n return attachIntention(rawInput, intention);\r\n }\r\n\r\n if (cmdName === \"will_compute\" || cmdName === \"意志計算\") {\r\n // 𝕄{5; 1,2,3} |> intend(\"seek\", 10) |> will_compute\r\n const intention = getIntentionOf(rawInput);\r\n if (!intention) throw new Error(\"will_compute: 意志が付与されていません(先に intend を使用してください)\");\r\n\r\n // harmonizeの場合、結合先の値をコンテキストに含める\r\n let harmonizeTarget: number | undefined;\r\n if (intention.type === 'harmonize' && intention.target !== undefined) {\r\n harmonizeTarget = intention.target;\r\n }\r\n\r\n const md = this.isMDim(rawInput)\r\n ? rawInput\r\n : { reiType: 'MDim', center: this.toNumber(rawInput), neighbors: [], mode: 'weighted' };\r\n\r\n return willCompute(md, intention, { harmonizeTarget });\r\n }\r\n\r\n if (cmdName === \"will_iterate\" || cmdName === \"意志反復\") {\r\n // 𝕄{5; 1,2,3} |> intend(\"seek\", 10) |> will_iterate\r\n // 𝕄{5; 1,2,3} |> intend(\"seek\", 10) |> will_iterate(20) // 最大20ステップ\r\n const intention = getIntentionOf(rawInput);\r\n if (!intention) throw new Error(\"will_iterate: 意志が付与されていません\");\r\n\r\n const maxSteps = args.length >= 1 ? this.toNumber(args[0]) : undefined;\r\n const md = this.isMDim(rawInput)\r\n ? rawInput\r\n : { reiType: 'MDim', center: this.toNumber(rawInput), neighbors: [], mode: 'weighted' };\r\n\r\n return willIterate(md, intention, maxSteps);\r\n }\r\n\r\n if (cmdName === \"intention\" || cmdName === \"意志確認\") {\r\n // 値の意志情報を取得\r\n const intention = getIntentionOf(rawInput);\r\n if (!intention) return null;\r\n return buildWillSigma(intention);\r\n }\r\n\r\n if (cmdName === \"satisfaction\" || cmdName === \"満足度\") {\r\n // 値の満足度を取得\r\n const intention = getIntentionOf(rawInput);\r\n return intention?.satisfaction ?? 0;\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // v0.2.1 Original pipe commands (rawInputを使用)\r\n // ═══════════════════════════════════════════\r\n if (this.isMDim(rawInput)) {\r\n const md = rawInput;\r\n switch (cmdName) {\r\n case \"compute\": {\r\n const m = mode || md.mode;\r\n return computeMDim({ ...md, mode: m });\r\n }\r\n case \"center\": return md.center;\r\n case \"neighbors\": return md.neighbors;\r\n case \"dim\": return md.neighbors.length;\r\n case \"normalize\": {\r\n const sum = md.neighbors.reduce((a: number, b: number) => a + Math.abs(b), 0) || 1;\r\n return { reiType: \"MDim\", center: md.center, neighbors: md.neighbors.map((n: number) => n / sum), mode: md.mode };\r\n }\r\n case \"flatten\": return computeMDim(md);\r\n case \"map\": {\r\n if (args.length > 0 && this.isFunction(args[0])) {\r\n const fn = args[0];\r\n const newNeighbors = md.neighbors.map((n: number) => this.toNumber(this.callFunction(fn, [n])));\r\n return { ...md, neighbors: newNeighbors };\r\n }\r\n return md;\r\n }\r\n }\r\n }\r\n\r\n if (this.isExt(rawInput)) {\r\n const ext = rawInput;\r\n switch (cmdName) {\r\n case \"order\": return ext.order;\r\n case \"base\": return ext.base;\r\n case \"valStar\": case \"val\": return ext.valStar();\r\n case \"subscripts\": return ext.subscripts;\r\n }\r\n }\r\n\r\n if (this.isGenesis(rawInput)) {\r\n const g = rawInput;\r\n switch (cmdName) {\r\n case \"forward\": genesisForward(g); return g;\r\n case \"phase\": return g.state;\r\n case \"history\": return g.history;\r\n case \"omega\": return g.omega;\r\n }\r\n }\r\n\r\n if (Array.isArray(rawInput)) {\r\n switch (cmdName) {\r\n case \"len\": return rawInput.length;\r\n case \"sum\": return rawInput.reduce((a: number, b: any) => a + this.toNumber(b), 0);\r\n case \"avg\": return rawInput.length === 0 ? 0 : rawInput.reduce((a: number, b: any) => a + this.toNumber(b), 0) / rawInput.length;\r\n case \"first\": return rawInput[0] ?? null;\r\n case \"last\": return rawInput[rawInput.length - 1] ?? null;\r\n case \"reverse\": return [...rawInput].reverse();\r\n case \"sort\": return [...rawInput].sort((a: any, b: any) => this.toNumber(a) - this.toNumber(b));\r\n case \"map\": {\r\n if (args.length > 0 && this.isFunction(args[0])) {\r\n return rawInput.map((v: any) => this.callFunction(args[0], [v]));\r\n }\r\n return rawInput;\r\n }\r\n case \"filter\": {\r\n if (args.length > 0 && this.isFunction(args[0])) {\r\n return rawInput.filter((v: any) => !!this.callFunction(args[0], [v]));\r\n }\r\n return rawInput;\r\n }\r\n case \"reduce\": {\r\n if (args.length >= 2 && this.isFunction(args[0])) {\r\n return rawInput.reduce((acc: any, v: any) => this.callFunction(args[0], [acc, v]), args[1]);\r\n }\r\n return rawInput;\r\n }\r\n }\r\n }\r\n\r\n if (typeof rawInput === \"number\") {\r\n switch (cmdName) {\r\n case \"abs\": return Math.abs(rawInput);\r\n case \"sqrt\": return Math.sqrt(rawInput);\r\n case \"round\": return Math.round(rawInput);\r\n case \"floor\": return Math.floor(rawInput);\r\n case \"ceil\": return Math.ceil(rawInput);\r\n case \"negate\": return -rawInput;\r\n }\r\n }\r\n\r\n if (typeof rawInput === \"string\") {\r\n switch (cmdName) {\r\n case \"len\": return rawInput.length;\r\n case \"upper\": return rawInput.toUpperCase();\r\n case \"lower\": return rawInput.toLowerCase();\r\n case \"trim\": return rawInput.trim();\r\n case \"split\": return rawInput.split(args[0] ?? \"\");\r\n case \"reverse\": return Array.from(rawInput).reverse().join(\"\");\r\n\r\n // ═══════════════════════════════════════════\r\n // 柱②: 漢字/日本語パイプコマンド\r\n // ═══════════════════════════════════════════\r\n case \"kanji\": case \"漢字\": {\r\n // \"休\" |> kanji → StringMDim{center:\"休\", neighbors:[\"人\",\"木\"]}\r\n const chars = Array.from(rawInput);\r\n if (chars.length === 1) return kanjiToStringMDim(chars[0]);\r\n return wordToStringMDim(rawInput);\r\n }\r\n case \"sentence\": case \"文\": {\r\n // \"猫が魚を食べた\" |> sentence → StringMDim{center:\"食べた\", neighbors:[\"猫が\",\"魚を\"]}\r\n return sentenceToStringMDim(rawInput);\r\n }\r\n case \"tone\": case \"声調\": {\r\n // \"ma\" |> tone(\"妈\", \"麻\", \"马\", \"骂\") → StringMDim\r\n return toneToStringMDim(rawInput, args.map(String));\r\n }\r\n }\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // 柱②: StringMDim パイプコマンド\r\n // ═══════════════════════════════════════════\r\n if (rawInput !== null && typeof rawInput === 'object' && rawInput.reiType === 'StringMDim') {\r\n const sm = rawInput as StringMDim;\r\n switch (cmdName) {\r\n case \"center\": return sm.center;\r\n case \"neighbors\": return sm.neighbors;\r\n case \"dim\": return sm.neighbors.length;\r\n case \"mode\": return sm.mode;\r\n case \"metadata\": return sm.metadata ?? {};\r\n\r\n case \"similarity\": case \"類似\": {\r\n // StringMDim |> similarity(\"明\") or similarity(otherStringMDim)\r\n let other: StringMDim;\r\n if (typeof args[0] === 'string') {\r\n other = kanjiToStringMDim(args[0]);\r\n } else if (args[0]?.reiType === 'StringMDim') {\r\n other = args[0];\r\n } else {\r\n throw new Error(\"similarity: 比較対象が必要です(文字列またはStringMDim)\");\r\n }\r\n return kanjiSimilarity(sm, other);\r\n }\r\n case \"radicals\": case \"部首\": {\r\n // 部首情報を返す\r\n if (sm.mode === 'kanji' && sm.metadata?.known) {\r\n return { radical: sm.metadata.radical, name: sm.metadata.radicalName };\r\n }\r\n // 複数文字の場合は各文字の部首\r\n return sm.neighbors.map((c: string) => {\r\n const info = KANJI_DB[c];\r\n return info ? { char: c, radical: info.radical, name: info.radicalName } : { char: c, radical: '?', name: 'unknown' };\r\n });\r\n }\r\n case \"readings\": case \"読み\": {\r\n if (sm.mode === 'kanji' && sm.metadata?.known) {\r\n return { on: sm.metadata.on, kun: sm.metadata.kun };\r\n }\r\n return sm.neighbors.map((c: string) => {\r\n const info = KANJI_DB[c];\r\n return info ? { char: c, on: info.on, kun: info.kun } : { char: c, on: [], kun: [] };\r\n });\r\n }\r\n case \"strokes\": case \"画数\": {\r\n if (sm.mode === 'kanji' && sm.metadata?.known) {\r\n return sm.metadata.strokes;\r\n }\r\n return sm.neighbors.reduce((total: number, c: string) => {\r\n const info = KANJI_DB[c];\r\n return total + (info?.strokes ?? 0);\r\n }, 0);\r\n }\r\n case \"category\": case \"六書\": {\r\n if (sm.mode === 'kanji' && sm.metadata?.known) {\r\n return sm.metadata.category;\r\n }\r\n return sm.neighbors.map((c: string) => {\r\n const info = KANJI_DB[c];\r\n return info ? { char: c, category: info.category } : { char: c, category: 'unknown' };\r\n });\r\n }\r\n case \"meaning\": case \"意味\": {\r\n if (sm.mode === 'kanji' && sm.metadata?.known) {\r\n return sm.metadata.meaning;\r\n }\r\n return sm.neighbors.map((c: string) => {\r\n const info = KANJI_DB[c];\r\n return info ? { char: c, meaning: info.meaning } : { char: c, meaning: 'unknown' };\r\n });\r\n }\r\n case \"phonetic_group\": case \"音符\": {\r\n // 同じ音符を共有する漢字群\r\n return getPhoneticGroup(sm.center);\r\n }\r\n case \"compose\": case \"合成\": {\r\n // 構成要素から漢字を逆引き\r\n return reverseKanjiLookup(sm.neighbors);\r\n }\r\n case \"decompose\": case \"分解\": {\r\n // 再帰的分解: 各構成要素もさらに分解\r\n return sm.neighbors.map((c: string) => kanjiToStringMDim(c));\r\n }\r\n case \"kanji\": case \"漢字\": {\r\n // StringMDimの中心を再度漢字分解\r\n return kanjiToStringMDim(sm.center);\r\n }\r\n case \"sigma\": {\r\n // StringMDimのσ — 構造情報をSigmaResultとして返す\r\n return {\r\n reiType: 'SigmaResult',\r\n field: { center: sm.center, neighbors: sm.neighbors, mode: sm.mode, type: 'string' },\r\n flow: { direction: 'rest', momentum: 0, velocity: 0 },\r\n memory: [],\r\n layer: 0,\r\n will: { tendency: 'rest', strength: 0, history: [] },\r\n relation: sm.neighbors.map((n: string) => ({ from: sm.center, to: n, type: sm.mode })),\r\n };\r\n }\r\n }\r\n }\r\n\r\n if (cmdName === \"\\u290A\" || cmdName === \"converge\") {\r\n if (this.isMDim(rawInput)) return computeMDim(rawInput);\r\n return rawInput;\r\n }\r\n if (cmdName === \"\\u290B\" || cmdName === \"diverge\") {\r\n if (typeof rawInput === \"number\") {\r\n return { reiType: \"MDim\", center: rawInput, neighbors: [rawInput, rawInput, rawInput, rawInput], mode: \"weighted\" };\r\n }\r\n return rawInput;\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // 柱④: Thought Loop — 思考ループ(自律的自己進化)\r\n // ═══════════════════════════════════════════\r\n\r\n // think / 思考: メイン思考ループ\r\n if (cmdName === \"think\" || cmdName === \"思考\") {\r\n // think(\"converge\") / think(10) / think(\"seek\", 15) / think(\"awaken\")\r\n const config: Partial<ThoughtConfig> = {};\r\n\r\n if (args.length >= 1) {\r\n const firstArg = args[0];\r\n if (typeof firstArg === 'string') {\r\n config.strategy = firstArg;\r\n } else if (typeof firstArg === 'number') {\r\n config.maxIterations = firstArg;\r\n config.strategy = 'converge';\r\n }\r\n }\r\n if (args.length >= 2) {\r\n const secondArg = args[1];\r\n if (typeof secondArg === 'number') {\r\n if (config.strategy === 'seek') {\r\n config.targetValue = secondArg;\r\n } else {\r\n config.maxIterations = secondArg;\r\n }\r\n }\r\n }\r\n if (args.length >= 3 && typeof args[2] === 'number') {\r\n config.maxIterations = args[2];\r\n }\r\n\r\n // ═══ Phase 3統合: 意志付き思考 ═══\r\n // 入力に __intention__ がある場合、思考ループに意志を反映\r\n const inputIntention = getIntentionOf(rawInput);\r\n if (inputIntention && !config.strategy) {\r\n // 意志の種類から思考戦略を導出\r\n switch (inputIntention.type) {\r\n case 'seek':\r\n config.strategy = 'seek';\r\n if (inputIntention.target !== undefined) config.targetValue = inputIntention.target;\r\n break;\r\n case 'stabilize':\r\n config.strategy = 'converge';\r\n break;\r\n case 'explore':\r\n config.strategy = 'explore';\r\n break;\r\n case 'maximize':\r\n config.strategy = 'explore'; // 全モード試行\r\n break;\r\n case 'minimize':\r\n config.strategy = 'converge';\r\n break;\r\n case 'harmonize':\r\n if (inputIntention.target !== undefined) {\r\n config.strategy = 'seek';\r\n config.targetValue = inputIntention.target;\r\n }\r\n break;\r\n default:\r\n config.strategy = 'converge';\r\n }\r\n if (inputIntention.patience && !config.maxIterations) {\r\n config.maxIterations = inputIntention.patience;\r\n }\r\n }\r\n\r\n const thinkResult = thinkLoop(rawInput, config);\r\n\r\n // 意志付き思考の場合、結果に意志情報を付加\r\n if (inputIntention) {\r\n (thinkResult as any).__intention_guided__ = true;\r\n (thinkResult as any).__original_intention__ = inputIntention;\r\n }\r\n\r\n return thinkResult;\r\n }\r\n\r\n // think_trajectory / 軌跡: 思考の数値軌跡を配列で返す\r\n if (cmdName === \"think_trajectory\" || cmdName === \"軌跡\") {\r\n if (rawInput?.reiType === 'ThoughtResult') return thoughtTrajectory(rawInput);\r\n // 直接入力の場合は思考してから軌跡を返す\r\n const config: Partial<ThoughtConfig> = {};\r\n if (args.length >= 1 && typeof args[0] === 'string') config.strategy = args[0];\r\n if (args.length >= 1 && typeof args[0] === 'number') config.maxIterations = args[0];\r\n return thoughtTrajectory(thinkLoop(rawInput, config));\r\n }\r\n\r\n // think_modes: 各ステップで選ばれたモード配列\r\n if (cmdName === \"think_modes\") {\r\n if (rawInput?.reiType === 'ThoughtResult') return thoughtModes(rawInput);\r\n return thoughtModes(thinkLoop(rawInput, {}));\r\n }\r\n\r\n // think_dominant / 支配モード: 最も多く選ばれたモード\r\n if (cmdName === \"think_dominant\" || cmdName === \"支配モード\") {\r\n if (rawInput?.reiType === 'ThoughtResult') return dominantMode(rawInput);\r\n return dominantMode(thinkLoop(rawInput, {}));\r\n }\r\n\r\n // think_format / 思考表示: 思考結果の文字列フォーマット\r\n if (cmdName === \"think_format\" || cmdName === \"思考表示\") {\r\n if (rawInput?.reiType === 'ThoughtResult') return formatThought(rawInput);\r\n return formatThought(thinkLoop(rawInput, {}));\r\n }\r\n\r\n // ThoughtResult のアクセサパイプ\r\n if (rawInput?.reiType === 'ThoughtResult') {\r\n const tr = rawInput as ThoughtResult;\r\n switch (cmdName) {\r\n case \"final_value\": case \"最終値\": return tr.finalValue;\r\n case \"iterations\": case \"反復数\": return tr.totalIterations;\r\n case \"stop_reason\": case \"停止理由\": return tr.stopReason;\r\n case \"trajectory\": case \"軌跡\": return tr.trajectory;\r\n case \"convergence\": case \"収束率\": return tr.convergenceRate;\r\n case \"awareness\": case \"覚醒度\": return tr.peakAwareness;\r\n case \"tendency\": case \"意志\": return { tendency: tr.loopTendency, strength: tr.loopStrength };\r\n case \"steps\": case \"全履歴\": return tr.steps;\r\n case \"dominant_mode\": case \"支配モード\": return dominantMode(tr);\r\n case \"sigma\": return getThoughtSigma(tr);\r\n }\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // 柱⑤: Game & Randomness — ゲーム統一 & ピュアランダムネス\r\n // ═══════════════════════════════════════════\r\n\r\n // --- Random commands ---\r\n\r\n // random / ランダム: 𝕄のneighborsからランダム選択\r\n if (cmdName === \"random\" || cmdName === \"ランダム\") {\r\n if (rawInput?.reiType === 'MDim') return randomFromMDim(rawInput);\r\n if (Array.isArray(rawInput)) return randomUniform(rawInput);\r\n if (typeof rawInput === 'number') {\r\n // random(n) → 0〜n-1のランダム整数\r\n return Math.floor(rawInput * Math.random());\r\n }\r\n return randomUniform([rawInput]);\r\n }\r\n\r\n // seed: 乱数シード設定\r\n if (cmdName === \"seed\") {\r\n const s = typeof rawInput === 'number' ? rawInput : 42;\r\n seedRandom(s);\r\n return s;\r\n }\r\n\r\n // random_walk: ランダムウォーク\r\n if (cmdName === \"random_walk\") {\r\n const start = typeof rawInput === 'number' ? rawInput : 0;\r\n const steps = args.length >= 1 ? Number(args[0]) : 20;\r\n const stepSize = args.length >= 2 ? Number(args[1]) : 1;\r\n return randomWalk(start, steps, stepSize);\r\n }\r\n\r\n // entropy / エントロピー: シャノンエントロピー分析\r\n if (cmdName === \"entropy\" || cmdName === \"エントロピー\") {\r\n if (Array.isArray(rawInput)) return analyzeEntropy(rawInput);\r\n if (rawInput?.reiType === 'MDim') return analyzeEntropy(rawInput.neighbors);\r\n return analyzeEntropy([rawInput]);\r\n }\r\n\r\n // monte_carlo: モンテカルロサンプリング\r\n if (cmdName === \"monte_carlo\") {\r\n const n = args.length >= 1 ? Number(args[0]) : 100;\r\n if (rawInput?.reiType === 'MDim') return monteCarloSample(rawInput, n);\r\n return monteCarloSample({ reiType: 'MDim', center: 0, neighbors: Array.isArray(rawInput) ? rawInput : [rawInput] }, n);\r\n }\r\n\r\n // --- Game commands ---\r\n\r\n // game / ゲーム: ゲームスペースの作成\r\n if (cmdName === \"game\" || cmdName === \"ゲーム\") {\r\n const gameName = typeof rawInput === 'string' ? rawInput :\r\n args.length >= 1 ? String(args[0]) : 'tic_tac_toe';\r\n const config: any = {};\r\n if (typeof rawInput === 'number') config.stones = rawInput;\r\n if (args.length >= 2 && typeof args[1] === 'number') config.stones = args[1];\r\n return createGameSpace(gameName, config);\r\n }\r\n\r\n // GameSpace handlers\r\n if (rawInput?.reiType === 'GameSpace') {\r\n const gs = rawInput as GameSpace;\r\n switch (cmdName) {\r\n case \"play\": case \"打つ\": {\r\n const pos = args.length >= 1 ? Number(args[0]) : undefined;\r\n return playMove(gs, pos);\r\n }\r\n case \"auto_play\": case \"自動対局\": {\r\n const s1 = args.length >= 1 ? String(args[0]) : gs.strategy;\r\n const s2 = args.length >= 2 ? String(args[1]) : gs.strategy;\r\n return autoPlay(gs, s1, s2);\r\n }\r\n case \"best_move\": case \"最善手\":\r\n return selectBestMove(gs);\r\n case \"legal_moves\": case \"合法手\":\r\n return getLegalMoves(gs);\r\n case \"board\": case \"盤面\":\r\n return gs.state.board;\r\n case \"status\": case \"状態\":\r\n return gs.state.status;\r\n case \"winner\": case \"勝者\":\r\n return gs.state.winner;\r\n case \"turn\": case \"手番\":\r\n return gs.state.currentPlayer;\r\n case \"history\": case \"棋譜\":\r\n return gs.state.moveHistory;\r\n case \"game_format\": case \"盤面表示\":\r\n return formatGame(gs);\r\n case \"as_mdim\":\r\n return gameAsMDim(gs);\r\n case \"sigma\": case \"game_sigma\":\r\n return getGameSigma(gs);\r\n\r\n // ═══════════════════════════════════════════\r\n // Phase 3統合: Game × Will — 意志駆動の戦略選択\r\n // ═══════════════════════════════════════════\r\n\r\n // game_intend / ゲーム意志: ゲームに意志を付与\r\n case \"game_intend\": case \"ゲーム意志\": {\r\n const intentTypeArg = args.length >= 1 ? String(args[0]) : 'maximize';\r\n const typeMap: Record<string, IntentionType> = {\r\n 'maximize': 'maximize', '最大化': 'maximize',\r\n 'minimize': 'minimize', '最小化': 'minimize',\r\n 'seek': 'seek', '接近': 'seek',\r\n 'explore': 'explore', '探索': 'explore',\r\n 'stabilize': 'stabilize', '安定': 'stabilize',\r\n };\r\n const intentType = typeMap[intentTypeArg] ?? 'maximize';\r\n const target = args.length >= 2 ? Number(args[1]) : undefined;\r\n const intention = createIntention(intentType, target);\r\n const result = { ...gs } as any;\r\n result.__intention__ = intention;\r\n return result;\r\n }\r\n\r\n // will_play / 意志打ち: 意志計算で最善手を選択して1手進める\r\n case \"will_play\": case \"意志打ち\": {\r\n const moves = getLegalMoves(gs);\r\n if (moves.length === 0 || gs.state.status !== 'playing') return gs;\r\n\r\n // 各合法手を𝕄のneighborとして表現\r\n // center = 現在ターン数、neighbors = 各手の評価値\r\n const evaluations = moves.map(move => {\r\n const newState = gs.rules.applyMove(gs.state, move);\r\n return gs.rules.evaluate(newState, gs.state.currentPlayer);\r\n });\r\n\r\n const gameMd = {\r\n reiType: 'MDim' as const,\r\n center: gs.state.turnCount,\r\n neighbors: evaluations,\r\n mode: 'weighted',\r\n };\r\n\r\n // 意志を決定(ゲームに付与済みの意志 or デフォルト maximize)\r\n const gameIntention = (gs as any).__intention__\r\n ?? createIntention('maximize');\r\n\r\n const willResult = willCompute(gameMd, gameIntention);\r\n\r\n // will_compute が選んだモードから最善手のインデックスを決定\r\n // maximize → 最大評価の手、minimize → 最小評価の手\r\n let bestIdx = 0;\r\n if (gameIntention.type === 'maximize') {\r\n bestIdx = evaluations.indexOf(Math.max(...evaluations));\r\n } else if (gameIntention.type === 'minimize') {\r\n bestIdx = evaluations.indexOf(Math.min(...evaluations));\r\n } else if (gameIntention.type === 'seek' && gameIntention.target !== undefined) {\r\n let minDist = Infinity;\r\n evaluations.forEach((ev, i) => {\r\n const dist = Math.abs(ev - (gameIntention.target ?? 0));\r\n if (dist < minDist) { minDist = dist; bestIdx = i; }\r\n });\r\n } else if (gameIntention.type === 'explore') {\r\n // ランダムに選択(探索意志)\r\n bestIdx = Math.floor(Math.random() * moves.length);\r\n } else {\r\n bestIdx = evaluations.indexOf(Math.max(...evaluations));\r\n }\r\n\r\n const chosenMove = moves[bestIdx];\r\n const result = playMove(gs, chosenMove);\r\n // 意志計算の情報を付加\r\n (result as any).__will_choice__ = {\r\n chosenMove,\r\n evaluation: evaluations[bestIdx],\r\n allEvaluations: moves.map((m, i) => ({ move: m, score: evaluations[i] })),\r\n willResult,\r\n intentionType: gameIntention.type,\r\n };\r\n return result;\r\n }\r\n\r\n // will_auto_play / 意志対局: 意志駆動で自動対局\r\n case \"will_auto_play\": case \"意志対局\": {\r\n let current = { ...gs } as any;\r\n const p1Intent = args.length >= 1 ? String(args[0]) : 'maximize';\r\n const p2Intent = args.length >= 2 ? String(args[1]) : 'maximize';\r\n let safetyCounter = 0;\r\n\r\n while (current.state.status === 'playing' && safetyCounter < 200) {\r\n safetyCounter++;\r\n const currentIntent = current.state.currentPlayer === 1 ? p1Intent : p2Intent;\r\n const typeMap: Record<string, IntentionType> = {\r\n 'maximize': 'maximize', 'minimize': 'minimize',\r\n 'seek': 'seek', 'explore': 'explore', 'stabilize': 'stabilize',\r\n '最大化': 'maximize', '探索': 'explore',\r\n };\r\n const intentType = typeMap[currentIntent] ?? 'maximize';\r\n current.__intention__ = createIntention(intentType);\r\n\r\n // will_play と同じロジック\r\n const moves = getLegalMoves(current);\r\n if (moves.length === 0) break;\r\n\r\n const evaluations = moves.map(move => {\r\n const newState = current.rules.applyMove(current.state, move);\r\n return current.rules.evaluate(newState, current.state.currentPlayer);\r\n });\r\n\r\n let bestIdx = 0;\r\n if (intentType === 'maximize') {\r\n bestIdx = evaluations.indexOf(Math.max(...evaluations));\r\n } else if (intentType === 'explore') {\r\n bestIdx = Math.floor(Math.random() * moves.length);\r\n } else {\r\n bestIdx = evaluations.indexOf(Math.max(...evaluations));\r\n }\r\n\r\n current = playMove(current, moves[bestIdx]);\r\n }\r\n return current;\r\n }\r\n\r\n // game_will_sigma / ゲーム意志σ: ゲームの意志情報を含むσ\r\n case \"game_will_sigma\": case \"ゲーム意志σ\": {\r\n const baseSigma = getGameSigma(gs);\r\n const gameIntention = (gs as any).__intention__;\r\n const willChoice = (gs as any).__will_choice__;\r\n return {\r\n ...baseSigma,\r\n will: gameIntention ? {\r\n type: gameIntention.type,\r\n target: gameIntention.target,\r\n satisfaction: gameIntention.satisfaction,\r\n } : null,\r\n lastWillChoice: willChoice ?? null,\r\n };\r\n }\r\n }\r\n }\r\n\r\n // simulate / シミュレート: 複数対局シミュレーション\r\n if (cmdName === \"simulate\" || cmdName === \"シミュレート\") {\r\n const gameName = typeof rawInput === 'string' ? rawInput : 'tic_tac_toe';\r\n const n = args.length >= 1 ? Number(args[0]) : 10;\r\n const s1 = args.length >= 2 ? String(args[1]) : 'minimax';\r\n const s2 = args.length >= 3 ? String(args[2]) : 'random';\r\n return simulateGames(gameName, n, s1, s2);\r\n }\r\n\r\n // RandomResult accessors\r\n if (rawInput?.reiType === 'RandomResult') {\r\n const rr = rawInput as RandomResult;\r\n switch (cmdName) {\r\n case \"value\": return rr.value;\r\n case \"probability\": case \"確率\": return rr.probability;\r\n case \"entropy\": case \"エントロピー\": return rr.entropy;\r\n }\r\n }\r\n\r\n // EntropyAnalysis accessors\r\n if (rawInput?.reiType === 'EntropyAnalysis') {\r\n const ea = rawInput as EntropyAnalysis;\r\n switch (cmdName) {\r\n case \"shannon\": return ea.shannon;\r\n case \"relative\": return ea.relativeEntropy;\r\n case \"distribution\": return ea.distribution;\r\n }\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // 柱③: Puzzle Unification — パズル統一\r\n // ═══════════════════════════════════════════\r\n\r\n // puzzle / パズル / 数独 / sudoku: パズル空間の作成\r\n if (cmdName === \"puzzle\" || cmdName === \"パズル\" || cmdName === \"sudoku\" || cmdName === \"数独\") {\r\n // 文字列入力 → parseGrid\r\n if (typeof rawInput === 'string') {\r\n const grid = parseGrid(rawInput);\r\n return createSudokuSpace(grid);\r\n }\r\n // 配列入力 → 直接グリッド or フラット配列\r\n if (Array.isArray(rawInput)) {\r\n if (Array.isArray(rawInput[0])) {\r\n return createSudokuSpace(rawInput as number[][]);\r\n }\r\n // フラット配列\r\n const grid = parseGrid(rawInput as number[]);\r\n return createSudokuSpace(grid);\r\n }\r\n // 数値入力 → ヒント数で生成\r\n if (typeof rawInput === 'number') {\r\n const seed = args.length > 0 ? Number(args[0]) : undefined;\r\n const grid = generateSudoku(rawInput, seed);\r\n return createSudokuSpace(grid);\r\n }\r\n throw new Error('puzzle: 文字列・配列・数値のいずれかを入力してください');\r\n }\r\n\r\n // latin_square / ラテン方陣\r\n if (cmdName === \"latin_square\" || cmdName === \"ラテン方陣\") {\r\n if (Array.isArray(rawInput)) {\r\n if (Array.isArray(rawInput[0])) {\r\n return createLatinSquareSpace(rawInput as number[][]);\r\n }\r\n const grid = parseGrid(rawInput as number[]);\r\n return createLatinSquareSpace(grid);\r\n }\r\n throw new Error('latin_square: 二次元配列を入力してください');\r\n }\r\n\r\n // generate_sudoku / 数独生成\r\n if (cmdName === \"generate_sudoku\" || cmdName === \"数独生成\") {\r\n const clues = typeof rawInput === 'number' ? rawInput : 30;\r\n const seed = args.length > 0 ? Number(args[0]) : undefined;\r\n const grid = generateSudoku(clues, seed);\r\n return createSudokuSpace(grid);\r\n }\r\n\r\n // PuzzleSpace handlers\r\n if (rawInput?.reiType === 'PuzzleSpace') {\r\n const ps = rawInput as PuzzleSpace;\r\n\r\n switch (cmdName) {\r\n // 解く\r\n case \"solve\": case \"解く\":\r\n return solvePuzzle(ps);\r\n\r\n // 制約伝播のみ\r\n case \"propagate\": case \"伝播\": {\r\n const maxSteps = args.length > 0 ? Number(args[0]) : 100;\r\n return propagateOnly(ps, maxSteps);\r\n }\r\n\r\n // 1ステップ伝播\r\n case \"step\": case \"ステップ\":\r\n propagateStep(ps);\r\n return ps;\r\n\r\n // Naked Pair\r\n case \"propagate_pair\": case \"裸ペア\":\r\n propagateNakedPair(ps);\r\n return ps;\r\n\r\n // セル取得(𝕄形式)\r\n case \"cell\": case \"セル\": {\r\n const row = args.length > 0 ? Number(args[0]) : 0;\r\n const col = args.length > 1 ? Number(args[1]) : 0;\r\n return cellAsMDim(ps, row, col);\r\n }\r\n\r\n // 候補取得\r\n case \"candidates\": case \"候補\": {\r\n const row = args.length > 0 ? Number(args[0]) : 0;\r\n const col = args.length > 1 ? Number(args[1]) : 0;\r\n return getCandidates(ps, row, col);\r\n }\r\n\r\n // グリッド取得\r\n case \"grid\": case \"盤面\":\r\n return getGrid(ps);\r\n\r\n // 表示\r\n case \"puzzle_format\": case \"数独表示\":\r\n return formatSudoku(ps);\r\n\r\n // 難易度\r\n case \"difficulty\": case \"難易度\":\r\n return estimateDifficulty(ps);\r\n\r\n // σ\r\n case \"sigma\":\r\n return getPuzzleSigma(ps);\r\n\r\n // 状態\r\n case \"status\": case \"状態\":\r\n return {\r\n solved: ps.solved,\r\n confirmedCells: ps.confirmedCells,\r\n totalCandidates: ps.totalCandidates,\r\n step: ps.step,\r\n size: ps.size,\r\n puzzleType: ps.puzzleType,\r\n };\r\n\r\n // 履歴\r\n case \"history\": case \"履歴\":\r\n return ps.history;\r\n\r\n // 𝕄形式変換\r\n case \"as_mdim\": {\r\n const row = args.length > 0 ? Number(args[0]) : 0;\r\n const col = args.length > 1 ? Number(args[1]) : 0;\r\n return cellAsMDim(ps, row, col);\r\n }\r\n\r\n // ═══════════════════════════════════════════\r\n // Phase 3統合: Puzzle × Bind — 制約を関係として表現\r\n // ═══════════════════════════════════════════\r\n\r\n // puzzle_bind_constraints / 制約結合: 制約グループをBindingRegistryに登録\r\n case \"puzzle_bind_constraints\": case \"制約結合\": {\r\n let bindCount = 0;\r\n for (const group of ps.constraints) {\r\n if (group.type !== 'all_different') continue;\r\n // グループ内の各セルペアを causal 結合(制約 = 相互因果)\r\n for (let i = 0; i < group.cells.length; i++) {\r\n for (let j = i + 1; j < group.cells.length; j++) {\r\n const [ri, ci] = group.cells[i];\r\n const [rj, cj] = group.cells[j];\r\n const refA = `cell_${ri}_${ci}`;\r\n const refB = `cell_${rj}_${cj}`;\r\n // 同じペアが既に登録済みならスキップ\r\n const existing = this.bindingRegistry.getBindingsFor(refA);\r\n if (existing.some(b => b.target === refB)) continue;\r\n this.bindingRegistry.bind(refA, refB, 'entangle', 1.0, true);\r\n bindCount++;\r\n }\r\n }\r\n }\r\n return {\r\n reiType: 'PuzzleBindResult' as const,\r\n constraintGroups: ps.constraints.length,\r\n bindingsCreated: bindCount,\r\n puzzleType: ps.puzzleType,\r\n size: ps.size,\r\n };\r\n }\r\n\r\n // cell_relations / セル関係: 指定セルの全関係を照会\r\n case \"cell_relations\": case \"セル関係\": {\r\n const row = args.length > 0 ? Number(args[0]) : 0;\r\n const col = args.length > 1 ? Number(args[1]) : 0;\r\n const cellRef = `cell_${row}_${col}`;\r\n const bindings = this.bindingRegistry.getBindingsFor(cellRef);\r\n // 関係の解読: cell_R_C → (R, C) に戻す\r\n const relations = bindings.map(b => {\r\n const targetMatch = b.target.match(/cell_(\\d+)_(\\d+)/);\r\n if (!targetMatch) return null;\r\n const tr = Number(targetMatch[1]);\r\n const tc = Number(targetMatch[2]);\r\n // どの制約グループに属するか特定\r\n const groups: string[] = [];\r\n for (const g of ps.constraints) {\r\n const hasSource = g.cells.some(([r, c]) => r === row && c === col);\r\n const hasTarget = g.cells.some(([r, c]) => r === tr && c === tc);\r\n if (hasSource && hasTarget) groups.push(g.label);\r\n }\r\n return {\r\n target: [tr, tc],\r\n mode: b.mode,\r\n strength: b.strength,\r\n constraintGroups: groups,\r\n targetValue: ps.cells[tr]?.[tc]?.value ?? 0,\r\n targetCandidates: ps.cells[tr]?.[tc]?.candidates ?? [],\r\n };\r\n }).filter(Boolean);\r\n return {\r\n cell: [row, col],\r\n value: ps.cells[row]?.[col]?.value ?? 0,\r\n candidates: ps.cells[row]?.[col]?.candidates ?? [],\r\n relatedCells: relations.length,\r\n relations,\r\n };\r\n }\r\n\r\n // puzzle_will_solve / 意志解法: 意志駆動でパズルを解く\r\n case \"puzzle_will_solve\": case \"意志解法\": {\r\n // 各未確定セルに「seek」意志を付与して候補を評価\r\n const solveLog: string[] = [];\r\n let confirms = 0;\r\n for (let r = 0; r < ps.size; r++) {\r\n for (let c = 0; c < ps.size; c++) {\r\n const cell = ps.cells[r][c];\r\n if (cell.value > 0 || cell.candidates.length !== 1) continue;\r\n // 候補が1つのセルを確定(will的にはseek成功)\r\n cell.value = cell.candidates[0];\r\n cell.candidates = [];\r\n confirms++;\r\n solveLog.push(`(${r},${c})=${cell.value} [意志確定]`);\r\n }\r\n }\r\n // 通常の伝播も実行\r\n const propagated = propagateOnly(ps, 50);\r\n // σ更新\r\n let totalCandidates = 0;\r\n let confirmedCells = 0;\r\n for (let r = 0; r < ps.size; r++) {\r\n for (let c = 0; c < ps.size; c++) {\r\n if (ps.cells[r][c].value > 0) confirmedCells++;\r\n else totalCandidates += ps.cells[r][c].candidates.length;\r\n }\r\n }\r\n ps.totalCandidates = totalCandidates;\r\n ps.confirmedCells = confirmedCells;\r\n ps.solved = confirmedCells === ps.size * ps.size;\r\n return {\r\n reiType: 'PuzzleWillSolveResult' as const,\r\n willConfirmations: confirms,\r\n solved: ps.solved,\r\n confirmedCells: ps.confirmedCells,\r\n remainingCandidates: ps.totalCandidates,\r\n log: solveLog,\r\n };\r\n }\r\n }\r\n }\r\n\r\n // User-defined pipe function\r\n if (this.env.has(cmdName)) {\r\n const fn = this.env.get(cmdName);\r\n if (this.isFunction(fn)) return this.callFunction(fn, [rawInput, ...args]);\r\n }\r\n\r\n throw new Error(`未知のパイプコマンド: ${cmdName}`);\r\n }\r\n\r\n private evalFnCall(ast: any): any {\r\n const callee = this.eval(ast.callee);\r\n const args = ast.args.map((a: any) => this.eval(a));\r\n if (ast.callee.type === \"Ident\" && ast.callee.name === \"genesis\") return createGenesis();\r\n if (this.isFunction(callee)) return this.callFunction(callee, args);\r\n throw new Error(`呼び出し不可能: ${JSON.stringify(callee)}`);\r\n }\r\n\r\n private callFunction(fn: any, args: any[]): any {\r\n if (fn.body === null || fn.body === undefined) return this.callBuiltin(fn.name, args);\r\n const callEnv = new Environment(fn.closure);\r\n for (let i = 0; i < fn.params.length; i++) {\r\n callEnv.define(fn.params[i], args[i] ?? null);\r\n }\r\n const savedEnv = this.env;\r\n this.env = callEnv;\r\n const result = this.eval(fn.body);\r\n this.env = savedEnv;\r\n return result;\r\n }\r\n\r\n private callBuiltin(name: string, args: any[]): any {\r\n if (name === \"genesis\") return createGenesis();\r\n const a = args[0] !== undefined ? this.toNumber(args[0]) : 0;\r\n const b = args[1] !== undefined ? this.toNumber(args[1]) : 0;\r\n switch (name) {\r\n case \"abs\": return Math.abs(a);\r\n case \"sqrt\": return Math.sqrt(a);\r\n case \"sin\": return Math.sin(a);\r\n case \"cos\": return Math.cos(a);\r\n case \"log\": return Math.log(a);\r\n case \"exp\": return Math.exp(a);\r\n case \"floor\": return Math.floor(a);\r\n case \"ceil\": return Math.ceil(a);\r\n case \"round\": return Math.round(a);\r\n case \"min\": return Math.min(a, b);\r\n case \"max\": return Math.max(a, b);\r\n case \"len\":\r\n if (Array.isArray(args[0])) return args[0].length;\r\n if (typeof args[0] === \"string\") return args[0].length;\r\n return 0;\r\n case \"print\": return args[0] ?? null;\r\n default: throw new Error(`未知の組込み関数: ${name}`);\r\n }\r\n }\r\n\r\n private evalMemberAccess(ast: any): any {\r\n const rawObj = this.eval(ast.object);\r\n const obj = unwrapReiVal(rawObj);\r\n\r\n // ── Tier 1: σメタデータへのメンバーアクセス ──\r\n if (ast.member === \"__sigma__\") {\r\n return getSigmaOf(rawObj);\r\n }\r\n\r\n // ── Evolve: EvolveResult member access ──\r\n if (this.isObj(obj) && obj.reiType === \"EvolveResult\") {\r\n switch (ast.member) {\r\n case \"value\": return obj.value;\r\n case \"selectedMode\": return obj.selectedMode;\r\n case \"strategy\": return obj.strategy;\r\n case \"reason\": return obj.reason;\r\n case \"candidates\": return obj.candidates;\r\n case \"awareness\": return obj.awareness;\r\n case \"tendency\": return obj.tendency;\r\n }\r\n }\r\n\r\n // ── 柱②: StringMDim member access ──\r\n if (this.isObj(obj) && obj.reiType === \"StringMDim\") {\r\n switch (ast.member) {\r\n case \"center\": return obj.center;\r\n case \"neighbors\": return obj.neighbors;\r\n case \"mode\": return obj.mode;\r\n case \"dim\": return obj.neighbors.length;\r\n case \"metadata\": return obj.metadata ?? {};\r\n // 漢字メタデータへの直接アクセス\r\n case \"radical\": return obj.metadata?.radical ?? null;\r\n case \"radicalName\": return obj.metadata?.radicalName ?? null;\r\n case \"strokes\": return obj.metadata?.strokes ?? 0;\r\n case \"on\": return obj.metadata?.on ?? [];\r\n case \"kun\": return obj.metadata?.kun ?? [];\r\n case \"category\": return obj.metadata?.category ?? null;\r\n case \"meaning\": return obj.metadata?.meaning ?? null;\r\n case \"known\": return obj.metadata?.known ?? false;\r\n }\r\n }\r\n\r\n // ── 柱②: KanjiSimilarity member access ──\r\n if (this.isObj(obj) && obj.reiType === \"KanjiSimilarity\") {\r\n switch (ast.member) {\r\n case \"strength\": return obj.strength;\r\n case \"pair\": return obj.pair;\r\n case \"sharedComponents\": return obj.sharedComponents;\r\n case \"jaccard\": return obj.jaccard;\r\n case \"sameRadical\": return obj.sameRadical;\r\n case \"sameCategory\": return obj.sameCategory;\r\n case \"strokeDiff\": return obj.strokeDiff;\r\n case \"sharedPhoneticGroup\": return obj.sharedPhoneticGroup;\r\n }\r\n }\r\n\r\n // ── v0.4: BindResult member access ──\r\n if (this.isObj(obj) && obj.reiType === \"BindResult\") {\r\n switch (ast.member) {\r\n case \"binding\": return obj.binding;\r\n case \"source\": return obj.source;\r\n case \"target\": return obj.target;\r\n case \"mode\": return obj.binding?.mode;\r\n case \"strength\": return obj.binding?.strength;\r\n case \"id\": return obj.binding?.id;\r\n case \"active\": return obj.binding?.active;\r\n }\r\n }\r\n\r\n // ── v0.4: WillComputeResult member access ──\r\n if (this.isObj(obj) && obj.reiType === \"WillComputeResult\") {\r\n switch (ast.member) {\r\n case \"value\": return obj.value;\r\n case \"numericValue\": return obj.numericValue;\r\n case \"chosenMode\": return obj.chosenMode;\r\n case \"reason\": return obj.reason;\r\n case \"satisfaction\": return obj.satisfaction;\r\n case \"allCandidates\": return obj.allCandidates;\r\n case \"intention\": return obj.intention;\r\n }\r\n }\r\n\r\n // ── v0.4: WillSigma member access ──\r\n if (this.isObj(obj) && obj.reiType === undefined && obj.dominantMode !== undefined && obj.totalChoices !== undefined) {\r\n switch (ast.member) {\r\n case \"type\": return obj.type;\r\n case \"target\": return obj.target;\r\n case \"satisfaction\": return obj.satisfaction;\r\n case \"active\": return obj.active;\r\n case \"step\": return obj.step;\r\n case \"totalChoices\": return obj.totalChoices;\r\n case \"dominantMode\": return obj.dominantMode;\r\n case \"history\": return obj.history;\r\n }\r\n }\r\n\r\n // ── v0.3: SigmaResult member access ──\r\n if (this.isObj(obj) && obj.reiType === \"SigmaResult\") {\r\n switch (ast.member) {\r\n case \"flow\": return obj.flow;\r\n case \"memory\": return obj.memory;\r\n case \"layer\": return obj.layer;\r\n case \"will\": return obj.will;\r\n case \"field\": return obj.field;\r\n case \"relation\": return obj.relation ?? [];\r\n }\r\n }\r\n\r\n // ── v0.3: Sigma sub-object member access ──\r\n if (this.isObj(obj) && obj.stage !== undefined && obj.momentum !== undefined && obj.directions !== undefined) {\r\n switch (ast.member) {\r\n case \"stage\": return obj.stage;\r\n case \"directions\": return obj.directions;\r\n case \"momentum\": return obj.momentum;\r\n case \"velocity\": return obj.velocity;\r\n }\r\n }\r\n if (this.isObj(obj) && obj.tendency !== undefined && obj.strength !== undefined) {\r\n switch (ast.member) {\r\n case \"tendency\": return obj.tendency;\r\n case \"strength\": return obj.strength;\r\n case \"history\": return obj.history;\r\n }\r\n }\r\n // Space sigma field sub-object\r\n if (this.isObj(obj) && obj.layers !== undefined && obj.total_nodes !== undefined) {\r\n switch (ast.member) {\r\n case \"layers\": return obj.layers;\r\n case \"total_nodes\": return obj.total_nodes;\r\n case \"active_nodes\": return obj.active_nodes;\r\n case \"topology\": return obj.topology;\r\n }\r\n }\r\n // Space sigma flow sub-object\r\n if (this.isObj(obj) && obj.global_stage !== undefined && obj.converged_nodes !== undefined) {\r\n switch (ast.member) {\r\n case \"global_stage\": return obj.global_stage;\r\n case \"converged_nodes\": return obj.converged_nodes;\r\n case \"expanding_nodes\": return obj.expanding_nodes;\r\n }\r\n }\r\n\r\n // ── v0.3: DNode member access ──\r\n if (this.isDNode(obj)) {\r\n const dn = obj as DNode;\r\n switch (ast.member) {\r\n case \"center\": return dn.center;\r\n case \"neighbors\": return dn.neighbors;\r\n case \"stage\": return dn.stage;\r\n case \"momentum\": return dn.momentum;\r\n case \"mode\": return dn.mode;\r\n case \"dim\": return dn.neighbors.length;\r\n }\r\n }\r\n\r\n // ── v0.2.1 original member access ──\r\n if (this.isMDim(obj)) {\r\n switch (ast.member) {\r\n case \"center\": return obj.center;\r\n case \"neighbors\": return obj.neighbors;\r\n case \"mode\": return obj.mode;\r\n case \"dim\": return obj.neighbors.length;\r\n }\r\n }\r\n if (this.isExt(obj)) {\r\n switch (ast.member) {\r\n case \"order\": return obj.order;\r\n case \"base\": return obj.base;\r\n case \"subscripts\": return obj.subscripts;\r\n case \"valStar\": return obj.valStar();\r\n }\r\n }\r\n if (this.isGenesis(obj)) {\r\n switch (ast.member) {\r\n case \"state\": case \"phase\": return obj.state;\r\n case \"omega\": return obj.omega;\r\n case \"history\": return obj.history;\r\n }\r\n }\r\n if (Array.isArray(obj)) {\r\n switch (ast.member) {\r\n case \"length\": return obj.length;\r\n case \"first\": return obj[0] ?? null;\r\n case \"last\": return obj[obj.length - 1] ?? null;\r\n }\r\n }\r\n throw new Error(`メンバー ${ast.member} にアクセスできません`);\r\n }\r\n\r\n private evalIndexAccess(ast: any): any {\r\n const obj = this.eval(ast.object);\r\n const idx = this.toNumber(this.eval(ast.index));\r\n if (Array.isArray(obj)) return obj[idx] ?? null;\r\n if (typeof obj === \"string\") return obj[idx] ?? null;\r\n if (this.isMDim(obj)) return obj.neighbors[idx] ?? null;\r\n throw new Error(\"インデックスアクセス不可\");\r\n }\r\n\r\n private evalExtend(ast: any): any {\r\n const target = this.eval(ast.target);\r\n if (this.isExt(target)) {\r\n if (ast.subscript) return createExtended(target.base, target.subscripts + ast.subscript);\r\n return createExtended(target.base, target.subscripts + \"o\");\r\n }\r\n throw new Error(\"拡張は拡張数にのみ適用可能\");\r\n }\r\n\r\n private evalReduce(ast: any): any {\r\n const target = this.eval(ast.target);\r\n if (this.isExt(target)) {\r\n if (target.order <= 1) return target.base;\r\n return createExtended(target.base, target.subscripts.slice(0, -1));\r\n }\r\n throw new Error(\"縮約は拡張数にのみ適用可能\");\r\n }\r\n\r\n private evalConverge(ast: any): any {\r\n const left = this.eval(ast.left);\r\n const right = this.eval(ast.right);\r\n if (this.isMDim(left) && this.isMDim(right)) {\r\n return {\r\n reiType: \"MDim\",\r\n center: (left.center + right.center) / 2,\r\n neighbors: [...left.neighbors, ...right.neighbors],\r\n mode: left.mode,\r\n };\r\n }\r\n return this.toNumber(left) + this.toNumber(right);\r\n }\r\n\r\n private evalDiverge(ast: any): any {\r\n const left = this.eval(ast.left);\r\n const right = this.eval(ast.right);\r\n if (this.isMDim(left)) {\r\n this.toNumber(right);\r\n const half = Math.floor(left.neighbors.length / 2);\r\n return [\r\n { reiType: \"MDim\", center: left.center, neighbors: left.neighbors.slice(0, half), mode: left.mode },\r\n { reiType: \"MDim\", center: left.center, neighbors: left.neighbors.slice(half), mode: left.mode },\r\n ];\r\n }\r\n return this.toNumber(left) - this.toNumber(right);\r\n }\r\n\r\n private evalReflect(ast: any): any {\r\n const left = this.eval(ast.left);\r\n this.eval(ast.right);\r\n if (this.isMDim(left)) {\r\n return { reiType: \"MDim\", center: left.center, neighbors: [...left.neighbors].reverse(), mode: left.mode };\r\n }\r\n return this.toNumber(left);\r\n }\r\n\r\n private evalIfExpr(ast: any): any {\r\n const cond = this.eval(ast.cond);\r\n return this.isTruthy(cond) ? this.eval(ast.then) : this.eval(ast.else);\r\n }\r\n\r\n private evalMatchExpr(ast: any): any {\r\n const target = this.eval(ast.target);\r\n for (const { pattern, body } of ast.cases) {\r\n const patVal = this.eval(pattern);\r\n if (this.matches(target, patVal)) return this.eval(body);\r\n }\r\n throw new Error(\"マッチする分岐が見つかりません\");\r\n }\r\n\r\n // --- Helpers ---\r\n toNumber(val: any): number {\r\n // Tier 1: ReiVal透過\r\n if (val !== null && typeof val === 'object' && val.reiType === 'ReiVal') return this.toNumber(val.value);\r\n if (typeof val === \"number\") return val;\r\n if (typeof val === \"boolean\") return val ? 1 : 0;\r\n if (val === null) return 0;\r\n if (this.isExt(val)) return val.valStar();\r\n if (this.isMDim(val)) return computeMDim(val);\r\n if (typeof val === \"string\") return parseFloat(val) || 0;\r\n return 0;\r\n }\r\n\r\n private isTruthy(val: any): boolean {\r\n const v = unwrapReiVal(val);\r\n if (v === null || v === false || v === 0) return false;\r\n if (this.isQuad(v)) return v.value === \"top\" || v.value === \"topPi\";\r\n return true;\r\n }\r\n\r\n private matches(target: any, pattern: any): boolean {\r\n if (typeof target === typeof pattern && target === pattern) return true;\r\n if (this.isQuad(target) && this.isQuad(pattern)) return target.value === pattern.value;\r\n return false;\r\n }\r\n\r\n isObj(v: any): boolean { const u = unwrapReiVal(v); return u !== null && typeof u === \"object\" && !Array.isArray(u); }\r\n isMDim(v: any): boolean { const u = unwrapReiVal(v); return u !== null && typeof u === \"object\" && u.reiType === \"MDim\"; }\r\n isExt(v: any): boolean { const u = unwrapReiVal(v); return u !== null && typeof u === \"object\" && u.reiType === \"Ext\"; }\r\n isGenesis(v: any): boolean { const u = unwrapReiVal(v); return u !== null && typeof u === \"object\" && u.reiType === \"State\"; }\r\n isFunction(v: any): boolean { const u = unwrapReiVal(v); return u !== null && typeof u === \"object\" && u.reiType === \"Function\"; }\r\n isQuad(v: any): boolean { const u = unwrapReiVal(v); return u !== null && typeof u === \"object\" && u.reiType === \"Quad\"; }\r\n // ── v0.3 ──\r\n isSpace(v: any): boolean { const u = unwrapReiVal(v); return u !== null && typeof u === \"object\" && u.reiType === \"Space\"; }\r\n isDNode(v: any): boolean { const u = unwrapReiVal(v); return u !== null && typeof u === \"object\" && u.reiType === \"DNode\"; }\r\n // ── Tier 1 ──\r\n isReiVal(v: any): boolean { return v !== null && typeof v === 'object' && v.reiType === 'ReiVal'; }\r\n // ── 柱② ──\r\n isStringMDim(v: any): boolean { const u = unwrapReiVal(v); return u !== null && typeof u === \"object\" && u.reiType === \"StringMDim\"; }\r\n /** 値からσメタデータを取得(Tier 1) */\r\n getSigmaMetadata(v: any): SigmaMetadata { return getSigmaOf(v); }\r\n /** ReiValを透過的にアンラップ */\r\n unwrap(v: any): any { return unwrapReiVal(v); }\r\n\r\n // ── v0.4: 関係・意志ヘルパー ──\r\n\r\n /** 値からその変数名を逆引きする(参照一致) */\r\n findRefByValue(value: any): string | null {\r\n const raw = unwrapReiVal(value);\r\n for (const [name, binding] of this.env.allBindings()) {\r\n const bv = unwrapReiVal(binding.value);\r\n if (bv === raw) return name;\r\n // オブジェクト参照が異なる場合もσメタデータで同一性を判定\r\n if (raw !== null && typeof raw === 'object' && bv !== null && typeof bv === 'object') {\r\n if (raw.__sigma__ && raw.__sigma__ === bv.__sigma__) return name;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /** 結合の伝播をトリガーする(変数名 + 新値) */\r\n triggerPropagation(ref: string, newValue: any): number {\r\n return this.bindingRegistry.propagate(\r\n ref,\r\n newValue,\r\n (r: string) => { try { return this.env.get(r); } catch { return undefined; } },\r\n (r: string, v: any) => { try { this.env.set(r, v); } catch { /* immutable */ } },\r\n );\r\n }\r\n}\r\n","import { Lexer } from './lang/lexer';\r\nimport { Parser } from './lang/parser';\r\nimport { Evaluator } from './lang/evaluator';\r\n\r\nexport { Lexer } from './lang/lexer';\r\nexport { Parser } from './lang/parser';\r\nexport { Evaluator } from './lang/evaluator';\r\n\r\nfunction unwrapReiVal(v: any): any {\r\n if (v !== null && typeof v === 'object' && v.reiType === 'ReiVal') {\r\n return v.value;\r\n }\r\n // Strip __sigma__ from arrays\r\n if (Array.isArray(v) && (v as any).__sigma__) {\r\n const clean = [...v];\r\n return clean;\r\n }\r\n return v;\r\n}\r\n\r\n// Stateful rei interface\r\nlet _evaluator = new Evaluator();\r\n\r\nfunction reiFn(source: string): any {\r\n const lexer = new Lexer(source);\r\n const tokens = lexer.tokenize();\r\n const parser = new Parser(tokens);\r\n const ast = parser.parseProgram();\r\n const result = _evaluator.eval(ast);\r\n return unwrapReiVal(result);\r\n}\r\n\r\nreiFn.reset = function () {\r\n _evaluator = new Evaluator();\r\n};\r\n\r\nreiFn.evaluator = function () {\r\n return _evaluator;\r\n};\r\n\r\nexport const rei = reiFn;\r\n"]}