@nahisaho/musubix-library-learner 2.1.1 → 2.2.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 (81) hide show
  1. package/dist/EnhancedLibraryLearner.d.ts +159 -0
  2. package/dist/EnhancedLibraryLearner.d.ts.map +1 -0
  3. package/dist/EnhancedLibraryLearner.js +296 -0
  4. package/dist/EnhancedLibraryLearner.js.map +1 -0
  5. package/dist/domain/DomainAwareAbstractor.d.ts +226 -0
  6. package/dist/domain/DomainAwareAbstractor.d.ts.map +1 -0
  7. package/dist/domain/DomainAwareAbstractor.js +237 -0
  8. package/dist/domain/DomainAwareAbstractor.js.map +1 -0
  9. package/dist/domain/__tests__/DomainAwareAbstractor.test.d.ts +9 -0
  10. package/dist/domain/__tests__/DomainAwareAbstractor.test.d.ts.map +1 -0
  11. package/dist/domain/__tests__/DomainAwareAbstractor.test.js +217 -0
  12. package/dist/domain/__tests__/DomainAwareAbstractor.test.js.map +1 -0
  13. package/dist/domain/index.d.ts +7 -0
  14. package/dist/domain/index.d.ts.map +1 -0
  15. package/dist/domain/index.js +6 -0
  16. package/dist/domain/index.js.map +1 -0
  17. package/dist/hierarchy/HierarchyManager.d.ts +227 -0
  18. package/dist/hierarchy/HierarchyManager.d.ts.map +1 -0
  19. package/dist/hierarchy/HierarchyManager.js +342 -0
  20. package/dist/hierarchy/HierarchyManager.js.map +1 -0
  21. package/dist/hierarchy/index.d.ts +9 -0
  22. package/dist/hierarchy/index.d.ts.map +1 -0
  23. package/dist/hierarchy/index.js +8 -0
  24. package/dist/hierarchy/index.js.map +1 -0
  25. package/dist/index.d.ts +18 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +13 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/library/IterativeCompressor.d.ts +196 -0
  30. package/dist/library/IterativeCompressor.d.ts.map +1 -0
  31. package/dist/library/IterativeCompressor.js +367 -0
  32. package/dist/library/IterativeCompressor.js.map +1 -0
  33. package/dist/library/PatternVersionManager.d.ts +177 -0
  34. package/dist/library/PatternVersionManager.d.ts.map +1 -0
  35. package/dist/library/PatternVersionManager.js +223 -0
  36. package/dist/library/PatternVersionManager.js.map +1 -0
  37. package/dist/library/__tests__/IterativeCompressor.test.d.ts +9 -0
  38. package/dist/library/__tests__/IterativeCompressor.test.d.ts.map +1 -0
  39. package/dist/library/__tests__/IterativeCompressor.test.js +200 -0
  40. package/dist/library/__tests__/IterativeCompressor.test.js.map +1 -0
  41. package/dist/library/__tests__/PatternVersionManager.test.d.ts +9 -0
  42. package/dist/library/__tests__/PatternVersionManager.test.d.ts.map +1 -0
  43. package/dist/library/__tests__/PatternVersionManager.test.js +218 -0
  44. package/dist/library/__tests__/PatternVersionManager.test.js.map +1 -0
  45. package/dist/library/index.d.ts +4 -0
  46. package/dist/library/index.d.ts.map +1 -1
  47. package/dist/library/index.js +4 -0
  48. package/dist/library/index.js.map +1 -1
  49. package/dist/metrics/MetricsExporter.d.ts +128 -0
  50. package/dist/metrics/MetricsExporter.d.ts.map +1 -0
  51. package/dist/metrics/MetricsExporter.js +157 -0
  52. package/dist/metrics/MetricsExporter.js.map +1 -0
  53. package/dist/metrics/index.d.ts +9 -0
  54. package/dist/metrics/index.d.ts.map +1 -0
  55. package/dist/metrics/index.js +8 -0
  56. package/dist/metrics/index.js.map +1 -0
  57. package/dist/rewrite/RewriteRuleSet.d.ts +136 -0
  58. package/dist/rewrite/RewriteRuleSet.d.ts.map +1 -0
  59. package/dist/rewrite/RewriteRuleSet.js +460 -0
  60. package/dist/rewrite/RewriteRuleSet.js.map +1 -0
  61. package/dist/rewrite/index.d.ts +9 -0
  62. package/dist/rewrite/index.d.ts.map +1 -0
  63. package/dist/rewrite/index.js +8 -0
  64. package/dist/rewrite/index.js.map +1 -0
  65. package/dist/search/TypeDirectedPruner.d.ts +138 -0
  66. package/dist/search/TypeDirectedPruner.d.ts.map +1 -0
  67. package/dist/search/TypeDirectedPruner.js +245 -0
  68. package/dist/search/TypeDirectedPruner.js.map +1 -0
  69. package/dist/search/index.d.ts +9 -0
  70. package/dist/search/index.d.ts.map +1 -0
  71. package/dist/search/index.js +8 -0
  72. package/dist/search/index.js.map +1 -0
  73. package/dist/updater/IncrementalUpdater.d.ts +152 -0
  74. package/dist/updater/IncrementalUpdater.d.ts.map +1 -0
  75. package/dist/updater/IncrementalUpdater.js +283 -0
  76. package/dist/updater/IncrementalUpdater.js.map +1 -0
  77. package/dist/updater/index.d.ts +7 -0
  78. package/dist/updater/index.d.ts.map +1 -0
  79. package/dist/updater/index.js +6 -0
  80. package/dist/updater/index.js.map +1 -0
  81. package/package.json +1 -1
@@ -0,0 +1,136 @@
1
+ /**
2
+ * RewriteRuleSet - Equivalence Rewrite Rules for E-Graph
3
+ *
4
+ * Provides built-in and custom rewrite rules for AST optimization.
5
+ * Used by E-Graph for equality saturation.
6
+ *
7
+ * @module @nahisaho/musubix-library-learner
8
+ * @see TSK-LL-104
9
+ * @see DES-LL-104
10
+ * @see REQ-LL-104
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { createRewriteRuleSet } from './RewriteRuleSet.js';
15
+ *
16
+ * const ruleSet = createRewriteRuleSet();
17
+ * const result = ruleSet.rewrite(ast);
18
+ * console.log(`Applied ${result.rulesApplied.length} rules`);
19
+ * ```
20
+ */
21
+ import type { ASTNode } from '../types.js';
22
+ /**
23
+ * Pattern for matching AST nodes
24
+ */
25
+ export type Pattern = Record<string, unknown>;
26
+ /**
27
+ * Rewrite rule definition
28
+ */
29
+ export interface RewriteRule {
30
+ /** Unique identifier */
31
+ id: string;
32
+ /** Human-readable name */
33
+ name: string;
34
+ /** Pattern to match */
35
+ pattern: Pattern;
36
+ /** Replacement template */
37
+ replacement: Pattern;
38
+ /** Rule description */
39
+ description?: string;
40
+ /** Rule category */
41
+ category?: string;
42
+ /** Priority (higher = applied first) */
43
+ priority?: number;
44
+ }
45
+ /**
46
+ * Result of rewrite operation
47
+ */
48
+ export interface RewriteResult {
49
+ /** Rewritten AST */
50
+ rewritten: ASTNode;
51
+ /** Rules that were applied */
52
+ rulesApplied: string[];
53
+ /** Number of iterations */
54
+ iterationCount: number;
55
+ /** Whether any changes were made */
56
+ changed: boolean;
57
+ }
58
+ /**
59
+ * Configuration for RewriteRuleSet
60
+ */
61
+ export interface RewriteRuleSetConfig {
62
+ /** Maximum rewrite iterations */
63
+ maxIterations?: number;
64
+ /** Enable built-in rules */
65
+ enableBuiltinRules?: boolean;
66
+ }
67
+ /**
68
+ * RewriteRuleSet interface
69
+ */
70
+ export interface RewriteRuleSet {
71
+ /** Add a custom rule */
72
+ addRule(rule: RewriteRule): void;
73
+ /** Remove a rule by ID */
74
+ removeRule(id: string): void;
75
+ /** Get a rule by ID */
76
+ getRule(id: string): RewriteRule | undefined;
77
+ /** List all rules, optionally filtered by category */
78
+ listRules(category?: string): RewriteRule[];
79
+ /** Get total rule count */
80
+ getRuleCount(): number;
81
+ /** Rewrite an AST using rules */
82
+ rewrite(ast: ASTNode): RewriteResult;
83
+ }
84
+ /**
85
+ * Default RewriteRuleSet implementation
86
+ */
87
+ export declare class DefaultRewriteRuleSet implements RewriteRuleSet {
88
+ private rules;
89
+ private config;
90
+ constructor(config?: RewriteRuleSetConfig);
91
+ /**
92
+ * Add a custom rule
93
+ */
94
+ addRule(rule: RewriteRule): void;
95
+ /**
96
+ * Remove a rule by ID
97
+ */
98
+ removeRule(id: string): void;
99
+ /**
100
+ * Get a rule by ID
101
+ */
102
+ getRule(id: string): RewriteRule | undefined;
103
+ /**
104
+ * List all rules, optionally filtered by category
105
+ */
106
+ listRules(category?: string): RewriteRule[];
107
+ /**
108
+ * Get total rule count
109
+ */
110
+ getRuleCount(): number;
111
+ /**
112
+ * Rewrite an AST using rules
113
+ */
114
+ rewrite(ast: ASTNode): RewriteResult;
115
+ /**
116
+ * Apply a single rule to an AST
117
+ */
118
+ private applyRule;
119
+ /**
120
+ * Match a pattern against an AST node
121
+ */
122
+ private matchPattern;
123
+ /**
124
+ * Apply a replacement template
125
+ */
126
+ private applyReplacement;
127
+ /**
128
+ * Deep clone an AST
129
+ */
130
+ private cloneAST;
131
+ }
132
+ /**
133
+ * Create a new RewriteRuleSet instance
134
+ */
135
+ export declare function createRewriteRuleSet(config?: RewriteRuleSetConfig): RewriteRuleSet;
136
+ //# sourceMappingURL=RewriteRuleSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RewriteRuleSet.d.ts","sourceRoot":"","sources":["../../src/rewrite/RewriteRuleSet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAM3C;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4BAA4B;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IAEjC,0BAA0B;IAC1B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B,uBAAuB;IACvB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAE7C,sDAAsD;IACtD,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IAE5C,2BAA2B;IAC3B,YAAY,IAAI,MAAM,CAAC;IAEvB,iCAAiC;IACjC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAAC;CACtC;AA6PD;;GAEG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,MAAM,CAAiC;gBAEnC,MAAM,GAAE,oBAAyB;IAW7C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAYhC;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI5C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IAQ3C;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa;IAyCpC;;OAEG;IACH,OAAO,CAAC,SAAS;IAwCjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAsCpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;OAEG;IACH,OAAO,CAAC,QAAQ;CAGjB;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,oBAAyB,GAAG,cAAc,CAEtF"}
@@ -0,0 +1,460 @@
1
+ /**
2
+ * RewriteRuleSet - Equivalence Rewrite Rules for E-Graph
3
+ *
4
+ * Provides built-in and custom rewrite rules for AST optimization.
5
+ * Used by E-Graph for equality saturation.
6
+ *
7
+ * @module @nahisaho/musubix-library-learner
8
+ * @see TSK-LL-104
9
+ * @see DES-LL-104
10
+ * @see REQ-LL-104
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { createRewriteRuleSet } from './RewriteRuleSet.js';
15
+ *
16
+ * const ruleSet = createRewriteRuleSet();
17
+ * const result = ruleSet.rewrite(ast);
18
+ * console.log(`Applied ${result.rulesApplied.length} rules`);
19
+ * ```
20
+ */
21
+ // =============================================================================
22
+ // Built-in Rules
23
+ // =============================================================================
24
+ const BUILTIN_RULES = [
25
+ // Arithmetic: Addition with zero
26
+ {
27
+ id: 'add-zero-right',
28
+ name: 'x + 0 = x (right)',
29
+ pattern: { type: 'BinaryExpression', operator: '+', right: { type: 'Literal', value: 0 } },
30
+ replacement: { $ref: 'left' },
31
+ description: 'Adding zero on the right has no effect',
32
+ category: 'arithmetic',
33
+ priority: 10,
34
+ },
35
+ {
36
+ id: 'add-zero-left',
37
+ name: '0 + x = x (left)',
38
+ pattern: { type: 'BinaryExpression', operator: '+', left: { type: 'Literal', value: 0 } },
39
+ replacement: { $ref: 'right' },
40
+ description: 'Adding zero on the left has no effect',
41
+ category: 'arithmetic',
42
+ priority: 10,
43
+ },
44
+ // Arithmetic: Multiplication with one
45
+ {
46
+ id: 'mul-one-right',
47
+ name: 'x * 1 = x (right)',
48
+ pattern: { type: 'BinaryExpression', operator: '*', right: { type: 'Literal', value: 1 } },
49
+ replacement: { $ref: 'left' },
50
+ description: 'Multiplying by one on the right has no effect',
51
+ category: 'arithmetic',
52
+ priority: 10,
53
+ },
54
+ {
55
+ id: 'mul-one-left',
56
+ name: '1 * x = x (left)',
57
+ pattern: { type: 'BinaryExpression', operator: '*', left: { type: 'Literal', value: 1 } },
58
+ replacement: { $ref: 'right' },
59
+ description: 'Multiplying by one on the left has no effect',
60
+ category: 'arithmetic',
61
+ priority: 10,
62
+ },
63
+ // Arithmetic: Multiplication with zero
64
+ {
65
+ id: 'mul-zero-right',
66
+ name: 'x * 0 = 0 (right)',
67
+ pattern: { type: 'BinaryExpression', operator: '*', right: { type: 'Literal', value: 0 } },
68
+ replacement: { type: 'Literal', value: 0 },
69
+ description: 'Multiplying by zero results in zero',
70
+ category: 'arithmetic',
71
+ priority: 10,
72
+ },
73
+ {
74
+ id: 'mul-zero-left',
75
+ name: '0 * x = 0 (left)',
76
+ pattern: { type: 'BinaryExpression', operator: '*', left: { type: 'Literal', value: 0 } },
77
+ replacement: { type: 'Literal', value: 0 },
78
+ description: 'Zero multiplied by anything is zero',
79
+ category: 'arithmetic',
80
+ priority: 10,
81
+ },
82
+ // Arithmetic: Subtraction
83
+ {
84
+ id: 'sub-zero',
85
+ name: 'x - 0 = x',
86
+ pattern: { type: 'BinaryExpression', operator: '-', right: { type: 'Literal', value: 0 } },
87
+ replacement: { $ref: 'left' },
88
+ description: 'Subtracting zero has no effect',
89
+ category: 'arithmetic',
90
+ priority: 10,
91
+ },
92
+ {
93
+ id: 'sub-self',
94
+ name: 'x - x = 0',
95
+ pattern: { type: 'BinaryExpression', operator: '-', $constraint: 'left === right' },
96
+ replacement: { type: 'Literal', value: 0 },
97
+ description: 'Subtracting a value from itself equals zero',
98
+ category: 'arithmetic',
99
+ priority: 9,
100
+ },
101
+ // Arithmetic: Division
102
+ {
103
+ id: 'div-one',
104
+ name: 'x / 1 = x',
105
+ pattern: { type: 'BinaryExpression', operator: '/', right: { type: 'Literal', value: 1 } },
106
+ replacement: { $ref: 'left' },
107
+ description: 'Dividing by one has no effect',
108
+ category: 'arithmetic',
109
+ priority: 10,
110
+ },
111
+ {
112
+ id: 'div-self',
113
+ name: 'x / x = 1',
114
+ pattern: { type: 'BinaryExpression', operator: '/', $constraint: 'left === right' },
115
+ replacement: { type: 'Literal', value: 1 },
116
+ description: 'Dividing a value by itself equals one',
117
+ category: 'arithmetic',
118
+ priority: 9,
119
+ },
120
+ // Boolean: Identity
121
+ {
122
+ id: 'and-true-right',
123
+ name: 'x && true = x',
124
+ pattern: { type: 'LogicalExpression', operator: '&&', right: { type: 'Literal', value: true } },
125
+ replacement: { $ref: 'left' },
126
+ description: 'AND with true on right has no effect',
127
+ category: 'boolean',
128
+ priority: 10,
129
+ },
130
+ {
131
+ id: 'and-true-left',
132
+ name: 'true && x = x',
133
+ pattern: { type: 'LogicalExpression', operator: '&&', left: { type: 'Literal', value: true } },
134
+ replacement: { $ref: 'right' },
135
+ description: 'AND with true on left has no effect',
136
+ category: 'boolean',
137
+ priority: 10,
138
+ },
139
+ {
140
+ id: 'or-false-right',
141
+ name: 'x || false = x',
142
+ pattern: { type: 'LogicalExpression', operator: '||', right: { type: 'Literal', value: false } },
143
+ replacement: { $ref: 'left' },
144
+ description: 'OR with false on right has no effect',
145
+ category: 'boolean',
146
+ priority: 10,
147
+ },
148
+ {
149
+ id: 'or-false-left',
150
+ name: 'false || x = x',
151
+ pattern: { type: 'LogicalExpression', operator: '||', left: { type: 'Literal', value: false } },
152
+ replacement: { $ref: 'right' },
153
+ description: 'OR with false on left has no effect',
154
+ category: 'boolean',
155
+ priority: 10,
156
+ },
157
+ // Boolean: Absorption
158
+ {
159
+ id: 'and-false',
160
+ name: 'x && false = false',
161
+ pattern: { type: 'LogicalExpression', operator: '&&', right: { type: 'Literal', value: false } },
162
+ replacement: { type: 'Literal', value: false },
163
+ description: 'AND with false is always false',
164
+ category: 'boolean',
165
+ priority: 10,
166
+ },
167
+ {
168
+ id: 'or-true',
169
+ name: 'x || true = true',
170
+ pattern: { type: 'LogicalExpression', operator: '||', right: { type: 'Literal', value: true } },
171
+ replacement: { type: 'Literal', value: true },
172
+ description: 'OR with true is always true',
173
+ category: 'boolean',
174
+ priority: 10,
175
+ },
176
+ // Boolean: Double negation
177
+ {
178
+ id: 'double-not',
179
+ name: '!!x = x',
180
+ pattern: {
181
+ type: 'UnaryExpression',
182
+ operator: '!',
183
+ argument: { type: 'UnaryExpression', operator: '!', $capture: 'inner' },
184
+ },
185
+ replacement: { $ref: 'inner.argument' },
186
+ description: 'Double negation cancels out',
187
+ category: 'boolean',
188
+ priority: 10,
189
+ },
190
+ // Conditional
191
+ {
192
+ id: 'ternary-true',
193
+ name: 'true ? a : b = a',
194
+ pattern: { type: 'ConditionalExpression', test: { type: 'Literal', value: true } },
195
+ replacement: { $ref: 'consequent' },
196
+ description: 'Ternary with true condition returns consequent',
197
+ category: 'conditional',
198
+ priority: 10,
199
+ },
200
+ {
201
+ id: 'ternary-false',
202
+ name: 'false ? a : b = b',
203
+ pattern: { type: 'ConditionalExpression', test: { type: 'Literal', value: false } },
204
+ replacement: { $ref: 'alternate' },
205
+ description: 'Ternary with false condition returns alternate',
206
+ category: 'conditional',
207
+ priority: 10,
208
+ },
209
+ // Commutativity
210
+ {
211
+ id: 'add-commute',
212
+ name: 'a + b = b + a',
213
+ pattern: { type: 'BinaryExpression', operator: '+', $commutative: true },
214
+ replacement: { $swap: ['left', 'right'] },
215
+ description: 'Addition is commutative',
216
+ category: 'commutativity',
217
+ priority: 1,
218
+ },
219
+ {
220
+ id: 'mul-commute',
221
+ name: 'a * b = b * a',
222
+ pattern: { type: 'BinaryExpression', operator: '*', $commutative: true },
223
+ replacement: { $swap: ['left', 'right'] },
224
+ description: 'Multiplication is commutative',
225
+ category: 'commutativity',
226
+ priority: 1,
227
+ },
228
+ // Associativity
229
+ {
230
+ id: 'add-assoc',
231
+ name: '(a + b) + c = a + (b + c)',
232
+ pattern: {
233
+ type: 'BinaryExpression',
234
+ operator: '+',
235
+ left: { type: 'BinaryExpression', operator: '+' },
236
+ },
237
+ replacement: { $reassociate: true },
238
+ description: 'Addition is associative',
239
+ category: 'associativity',
240
+ priority: 1,
241
+ },
242
+ {
243
+ id: 'mul-assoc',
244
+ name: '(a * b) * c = a * (b * c)',
245
+ pattern: {
246
+ type: 'BinaryExpression',
247
+ operator: '*',
248
+ left: { type: 'BinaryExpression', operator: '*' },
249
+ },
250
+ replacement: { $reassociate: true },
251
+ description: 'Multiplication is associative',
252
+ category: 'associativity',
253
+ priority: 1,
254
+ },
255
+ ];
256
+ // =============================================================================
257
+ // Default Implementation
258
+ // =============================================================================
259
+ /**
260
+ * Default RewriteRuleSet implementation
261
+ */
262
+ export class DefaultRewriteRuleSet {
263
+ rules = new Map();
264
+ config;
265
+ constructor(config = {}) {
266
+ this.config = {
267
+ maxIterations: config.maxIterations ?? 100,
268
+ enableBuiltinRules: config.enableBuiltinRules ?? true,
269
+ };
270
+ if (this.config.enableBuiltinRules) {
271
+ BUILTIN_RULES.forEach((rule) => this.rules.set(rule.id, rule));
272
+ }
273
+ }
274
+ /**
275
+ * Add a custom rule
276
+ */
277
+ addRule(rule) {
278
+ if (!rule.id || !rule.name || !rule.pattern || !rule.replacement) {
279
+ throw new Error('Invalid rule: missing required fields (id, name, pattern, replacement)');
280
+ }
281
+ if (this.rules.has(rule.id)) {
282
+ throw new Error(`Duplicate rule ID: ${rule.id}`);
283
+ }
284
+ this.rules.set(rule.id, rule);
285
+ }
286
+ /**
287
+ * Remove a rule by ID
288
+ */
289
+ removeRule(id) {
290
+ this.rules.delete(id);
291
+ }
292
+ /**
293
+ * Get a rule by ID
294
+ */
295
+ getRule(id) {
296
+ return this.rules.get(id);
297
+ }
298
+ /**
299
+ * List all rules, optionally filtered by category
300
+ */
301
+ listRules(category) {
302
+ const allRules = Array.from(this.rules.values());
303
+ if (category) {
304
+ return allRules.filter((r) => r.category === category);
305
+ }
306
+ return allRules;
307
+ }
308
+ /**
309
+ * Get total rule count
310
+ */
311
+ getRuleCount() {
312
+ return this.rules.size;
313
+ }
314
+ /**
315
+ * Rewrite an AST using rules
316
+ */
317
+ rewrite(ast) {
318
+ const rulesApplied = [];
319
+ let current = this.cloneAST(ast);
320
+ let changed = false;
321
+ let iterationCount = 0;
322
+ // Sort rules by priority (higher first)
323
+ const sortedRules = this.listRules().sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
324
+ for (let i = 0; i < this.config.maxIterations; i++) {
325
+ iterationCount++;
326
+ let iterationChanged = false;
327
+ for (const rule of sortedRules) {
328
+ const result = this.applyRule(current, rule);
329
+ if (result.changed) {
330
+ current = result.ast;
331
+ rulesApplied.push(rule.id);
332
+ iterationChanged = true;
333
+ changed = true;
334
+ break; // Start over with new AST
335
+ }
336
+ }
337
+ if (!iterationChanged) {
338
+ break; // No more rules apply
339
+ }
340
+ }
341
+ return {
342
+ rewritten: current,
343
+ rulesApplied,
344
+ iterationCount,
345
+ changed,
346
+ };
347
+ }
348
+ // ===========================================================================
349
+ // Private Methods
350
+ // ===========================================================================
351
+ /**
352
+ * Apply a single rule to an AST
353
+ */
354
+ applyRule(ast, rule) {
355
+ const match = this.matchPattern(ast, rule.pattern);
356
+ if (match.matches) {
357
+ const replaced = this.applyReplacement(ast, rule.replacement, match.bindings);
358
+ return { ast: replaced, changed: true };
359
+ }
360
+ // Try to apply to children
361
+ const astObj = ast;
362
+ if (astObj.left) {
363
+ const leftResult = this.applyRule(astObj.left, rule);
364
+ if (leftResult.changed) {
365
+ return {
366
+ ast: { ...ast, left: leftResult.ast },
367
+ changed: true,
368
+ };
369
+ }
370
+ }
371
+ if (astObj.right) {
372
+ const rightResult = this.applyRule(astObj.right, rule);
373
+ if (rightResult.changed) {
374
+ return {
375
+ ast: { ...ast, right: rightResult.ast },
376
+ changed: true,
377
+ };
378
+ }
379
+ }
380
+ if (astObj.argument) {
381
+ const argResult = this.applyRule(astObj.argument, rule);
382
+ if (argResult.changed) {
383
+ return {
384
+ ast: { ...ast, argument: argResult.ast },
385
+ changed: true,
386
+ };
387
+ }
388
+ }
389
+ return { ast, changed: false };
390
+ }
391
+ /**
392
+ * Match a pattern against an AST node
393
+ */
394
+ matchPattern(ast, pattern) {
395
+ const bindings = {};
396
+ const astObj = ast;
397
+ for (const [key, value] of Object.entries(pattern)) {
398
+ if (key.startsWith('$'))
399
+ continue; // Skip meta keys
400
+ if (typeof value === 'object' && value !== null) {
401
+ // Nested pattern
402
+ if (!astObj[key]) {
403
+ return { matches: false, bindings };
404
+ }
405
+ const nested = this.matchPattern(astObj[key], value);
406
+ if (!nested.matches) {
407
+ return { matches: false, bindings };
408
+ }
409
+ Object.assign(bindings, nested.bindings);
410
+ }
411
+ else {
412
+ // Direct value comparison
413
+ if (astObj[key] !== value) {
414
+ return { matches: false, bindings };
415
+ }
416
+ }
417
+ }
418
+ // Capture the matched node parts for replacement
419
+ bindings['left'] = astObj.left;
420
+ bindings['right'] = astObj.right;
421
+ bindings['argument'] = astObj.argument;
422
+ bindings['consequent'] = astObj.consequent;
423
+ bindings['alternate'] = astObj.alternate;
424
+ return { matches: true, bindings };
425
+ }
426
+ /**
427
+ * Apply a replacement template
428
+ */
429
+ applyReplacement(_original, replacement, bindings) {
430
+ // Handle reference to captured binding
431
+ if ('$ref' in replacement) {
432
+ const ref = replacement['$ref'];
433
+ return bindings[ref] ?? _original;
434
+ }
435
+ // Handle direct replacement
436
+ const result = {};
437
+ for (const [key, value] of Object.entries(replacement)) {
438
+ if (key.startsWith('$'))
439
+ continue;
440
+ result[key] = value;
441
+ }
442
+ return result;
443
+ }
444
+ /**
445
+ * Deep clone an AST
446
+ */
447
+ cloneAST(ast) {
448
+ return JSON.parse(JSON.stringify(ast));
449
+ }
450
+ }
451
+ // =============================================================================
452
+ // Factory Function
453
+ // =============================================================================
454
+ /**
455
+ * Create a new RewriteRuleSet instance
456
+ */
457
+ export function createRewriteRuleSet(config = {}) {
458
+ return new DefaultRewriteRuleSet(config);
459
+ }
460
+ //# sourceMappingURL=RewriteRuleSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RewriteRuleSet.js","sourceRoot":"","sources":["../../src/rewrite/RewriteRuleSet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Rewrite Module - Equivalence Rewrite Rules
3
+ *
4
+ * @module @nahisaho/musubix-library-learner/rewrite
5
+ * @see TSK-LL-104
6
+ */
7
+ export type { RewriteRuleSet, RewriteRule, RewriteResult, RewriteRuleSetConfig, Pattern, } from './RewriteRuleSet.js';
8
+ export { createRewriteRuleSet, DefaultRewriteRuleSet } from './RewriteRuleSet.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rewrite/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,cAAc,EACd,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,OAAO,GACR,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Rewrite Module - Equivalence Rewrite Rules
3
+ *
4
+ * @module @nahisaho/musubix-library-learner/rewrite
5
+ * @see TSK-LL-104
6
+ */
7
+ export { createRewriteRuleSet, DefaultRewriteRuleSet } from './RewriteRuleSet.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rewrite/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}