@nahisaho/musubix-synthesis 2.0.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 (66) hide show
  1. package/README.md +100 -0
  2. package/dist/dsl/DSL.d.ts +73 -0
  3. package/dist/dsl/DSL.d.ts.map +1 -0
  4. package/dist/dsl/DSL.js +250 -0
  5. package/dist/dsl/DSL.js.map +1 -0
  6. package/dist/dsl/DSLBuilder.d.ts +33 -0
  7. package/dist/dsl/DSLBuilder.d.ts.map +1 -0
  8. package/dist/dsl/DSLBuilder.js +51 -0
  9. package/dist/dsl/DSLBuilder.js.map +1 -0
  10. package/dist/dsl/TypeSystem.d.ts +51 -0
  11. package/dist/dsl/TypeSystem.d.ts.map +1 -0
  12. package/dist/dsl/TypeSystem.js +253 -0
  13. package/dist/dsl/TypeSystem.js.map +1 -0
  14. package/dist/dsl/index.d.ts +8 -0
  15. package/dist/dsl/index.d.ts.map +1 -0
  16. package/dist/dsl/index.js +8 -0
  17. package/dist/dsl/index.js.map +1 -0
  18. package/dist/errors.d.ts +93 -0
  19. package/dist/errors.d.ts.map +1 -0
  20. package/dist/errors.js +142 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/index.d.ts +11 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +16 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/rules/MetaLearner.d.ts +50 -0
  27. package/dist/rules/MetaLearner.d.ts.map +1 -0
  28. package/dist/rules/MetaLearner.js +144 -0
  29. package/dist/rules/MetaLearner.js.map +1 -0
  30. package/dist/rules/RuleExtractor.d.ts +69 -0
  31. package/dist/rules/RuleExtractor.d.ts.map +1 -0
  32. package/dist/rules/RuleExtractor.js +290 -0
  33. package/dist/rules/RuleExtractor.js.map +1 -0
  34. package/dist/rules/RuleLibrary.d.ts +55 -0
  35. package/dist/rules/RuleLibrary.d.ts.map +1 -0
  36. package/dist/rules/RuleLibrary.js +190 -0
  37. package/dist/rules/RuleLibrary.js.map +1 -0
  38. package/dist/rules/index.d.ts +9 -0
  39. package/dist/rules/index.d.ts.map +1 -0
  40. package/dist/rules/index.js +9 -0
  41. package/dist/rules/index.js.map +1 -0
  42. package/dist/synthesis/Enumerator.d.ts +78 -0
  43. package/dist/synthesis/Enumerator.d.ts.map +1 -0
  44. package/dist/synthesis/Enumerator.js +292 -0
  45. package/dist/synthesis/Enumerator.js.map +1 -0
  46. package/dist/synthesis/PBESynthesizer.d.ts +37 -0
  47. package/dist/synthesis/PBESynthesizer.d.ts.map +1 -0
  48. package/dist/synthesis/PBESynthesizer.js +187 -0
  49. package/dist/synthesis/PBESynthesizer.js.map +1 -0
  50. package/dist/synthesis/VersionSpace.d.ts +50 -0
  51. package/dist/synthesis/VersionSpace.d.ts.map +1 -0
  52. package/dist/synthesis/VersionSpace.js +102 -0
  53. package/dist/synthesis/VersionSpace.js.map +1 -0
  54. package/dist/synthesis/WitnessEngine.d.ts +64 -0
  55. package/dist/synthesis/WitnessEngine.d.ts.map +1 -0
  56. package/dist/synthesis/WitnessEngine.js +217 -0
  57. package/dist/synthesis/WitnessEngine.js.map +1 -0
  58. package/dist/synthesis/index.d.ts +9 -0
  59. package/dist/synthesis/index.d.ts.map +1 -0
  60. package/dist/synthesis/index.js +9 -0
  61. package/dist/synthesis/index.js.map +1 -0
  62. package/dist/types.d.ts +372 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +7 -0
  65. package/dist/types.js.map +1 -0
  66. package/package.json +52 -0
package/README.md ADDED
@@ -0,0 +1,100 @@
1
+ # @nahisaho/musubix-synthesis
2
+
3
+ DSL-based program synthesis with PBE (Programming by Example) and rule learning.
4
+
5
+ ## Features
6
+
7
+ - **DSL Framework**: Declarative DSL definition with operators, types, and semantics
8
+ - **PBE Synthesis**: Programming by Example using enumeration and neural guidance
9
+ - **Witness Functions**: Deductive synthesis with inverse semantics
10
+ - **Version Space**: Efficient representation of candidate programs
11
+ - **Rule Learning**: Meta-learning from successful synthesis
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ npm install @nahisaho/musubix-synthesis
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ### DSL Definition
22
+
23
+ ```typescript
24
+ import { DSLBuilder } from '@nahisaho/musubix-synthesis';
25
+
26
+ const dsl = new DSLBuilder('string-transform')
27
+ .addType('string', { kind: 'primitive' })
28
+ .addType('int', { kind: 'primitive' })
29
+ .addOperator('concat', ['string', 'string'], 'string', (a, b) => a + b)
30
+ .addOperator('substring', ['string', 'int', 'int'], 'string', (s, i, j) => s.slice(i, j))
31
+ .addOperator('length', ['string'], 'int', (s) => s.length)
32
+ .addConstant('empty', 'string', '')
33
+ .build();
34
+ ```
35
+
36
+ ### PBE Synthesis
37
+
38
+ ```typescript
39
+ import { PBESynthesizer } from '@nahisaho/musubix-synthesis';
40
+
41
+ const synthesizer = new PBESynthesizer();
42
+
43
+ const result = await synthesizer.synthesize(dsl, [
44
+ { input: 'hello', output: 'HELLO' },
45
+ { input: 'world', output: 'WORLD' },
46
+ ]);
47
+
48
+ if (result.success) {
49
+ console.log('Synthesized program:', result.program);
50
+ }
51
+ ```
52
+
53
+ ### Rule Learning
54
+
55
+ ```typescript
56
+ import { RuleLibrary, MetaLearner } from '@nahisaho/musubix-synthesis';
57
+
58
+ const library = new RuleLibrary();
59
+ const learner = new MetaLearner(library);
60
+
61
+ // Learn from successful synthesis
62
+ await learner.learn(result, usedRules);
63
+
64
+ // Apply learned rules for future synthesis
65
+ const rules = await library.match(newSpec);
66
+ ```
67
+
68
+ ## API Reference
69
+
70
+ ### DSL Framework
71
+
72
+ - `DSLBuilder` - Declarative DSL definition
73
+ - `TypeSystem` - Type checking and inference
74
+ - `Semantics` - Execution semantics
75
+
76
+ ### Synthesis Engine
77
+
78
+ - `PBESynthesizer` - Programming by example
79
+ - `WitnessEngine` - Deductive synthesis
80
+ - `VersionSpace` - Candidate program representation
81
+ - `Enumerator` - Exhaustive enumeration
82
+
83
+ ### Rule Learning
84
+
85
+ - `RuleExtractor` - Extract rules from synthesis
86
+ - `RuleLibrary` - Store and query rules
87
+ - `MetaLearner` - Continuous rule improvement
88
+
89
+ ## Requirements
90
+
91
+ | Requirement | Description |
92
+ |-------------|-------------|
93
+ | REQ-SYN-001 | DSL Definition Framework |
94
+ | REQ-SYN-002 | Witness Functions |
95
+ | REQ-SYN-003 | PBE Synthesis |
96
+ | REQ-SYN-004 | Rule Learning |
97
+
98
+ ## License
99
+
100
+ MIT
@@ -0,0 +1,73 @@
1
+ /**
2
+ * DSL Implementation
3
+ * @module @nahisaho/musubix-synthesis
4
+ * @description Domain-specific language for program synthesis
5
+ * Traces to: REQ-SYN-001 (DSL Definition Framework)
6
+ */
7
+ import type { Constant, DSLConfig, IDSL, Operator, Program, TypeDefinition, ValidationResult } from '../types.js';
8
+ /**
9
+ * DSL implementation
10
+ */
11
+ export declare class DSL implements IDSL {
12
+ readonly name: string;
13
+ readonly operators: Map<string, Operator>;
14
+ readonly constants: Map<string, Constant>;
15
+ readonly types: Map<string, TypeDefinition>;
16
+ constructor(config: DSLConfig);
17
+ /**
18
+ * Execute a program with input
19
+ */
20
+ execute(program: Program, input: Record<string, unknown>): unknown;
21
+ /**
22
+ * Validate a program
23
+ */
24
+ validate(program: Program): boolean;
25
+ /**
26
+ * Validate with detailed result
27
+ */
28
+ validateWithDetails(program: Program): ValidationResult;
29
+ /**
30
+ * Enumerate programs up to max depth
31
+ */
32
+ enumerate(maxDepth: number, maxResults?: number): Program[];
33
+ /**
34
+ * Get an operator by name
35
+ */
36
+ getOperator(name: string): Operator | undefined;
37
+ /**
38
+ * Get a constant by name
39
+ */
40
+ getConstant(name: string): Constant | undefined;
41
+ /**
42
+ * Get a type by name
43
+ */
44
+ getType(name: string): TypeDefinition | undefined;
45
+ /**
46
+ * Get all operators
47
+ */
48
+ getOperators(): Operator[];
49
+ /**
50
+ * Get all constants
51
+ */
52
+ getConstants(): Constant[];
53
+ /**
54
+ * Enumerate expressions up to max depth
55
+ */
56
+ private enumerateExpressions;
57
+ /**
58
+ * Generate argument combinations
59
+ */
60
+ private generateArgCombinations;
61
+ /**
62
+ * Cartesian product of arrays
63
+ */
64
+ private cartesianProduct; /**
65
+ * Evaluate an expression
66
+ */
67
+ private evaluateExpression;
68
+ /**
69
+ * Validate an expression
70
+ */
71
+ private validateExpression;
72
+ }
73
+ //# sourceMappingURL=DSL.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DSL.d.ts","sourceRoot":"","sources":["../../src/dsl/DSL.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EAET,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,cAAc,EAEd,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,qBAAa,GAAI,YAAW,IAAI;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;gBAEhC,MAAM,EAAE,SAAS;IAS7B;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAKlE;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAMnC;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB;IAUvD;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE;IAM3D;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI/C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI/C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIjD;;OAEG;IACH,YAAY,IAAI,QAAQ,EAAE;IAI1B;;OAEG;IACH,YAAY,IAAI,QAAQ,EAAE;IAI1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;OAEG;IACH,OAAO,CAAE,gBAAgB,EAYtB;;OAEA;IACH,OAAO,CAAC,kBAAkB;IAiE1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAwD3B"}
@@ -0,0 +1,250 @@
1
+ /**
2
+ * DSL Implementation
3
+ * @module @nahisaho/musubix-synthesis
4
+ * @description Domain-specific language for program synthesis
5
+ * Traces to: REQ-SYN-001 (DSL Definition Framework)
6
+ */
7
+ import { ExecutionError, OperatorNotFoundError } from '../errors.js';
8
+ /**
9
+ * DSL implementation
10
+ */
11
+ export class DSL {
12
+ name;
13
+ operators;
14
+ constants;
15
+ types;
16
+ constructor(config) {
17
+ this.name = config.name ?? 'dsl';
18
+ // Convert arrays to maps for efficient lookup
19
+ this.operators = new Map(config.operators.map(op => [op.name, op]));
20
+ this.constants = new Map(config.constants.map(c => [c.name, c]));
21
+ this.types = new Map(config.types.map(t => [t.name, t]));
22
+ }
23
+ /**
24
+ * Execute a program with input
25
+ */
26
+ execute(program, input) {
27
+ const variables = new Map(Object.entries(input));
28
+ return this.evaluateExpression(program.expression, { input, variables });
29
+ }
30
+ /**
31
+ * Validate a program
32
+ */
33
+ validate(program) {
34
+ const errors = [];
35
+ this.validateExpression(program.expression, errors, []);
36
+ return errors.length === 0;
37
+ }
38
+ /**
39
+ * Validate with detailed result
40
+ */
41
+ validateWithDetails(program) {
42
+ const errors = [];
43
+ this.validateExpression(program.expression, errors, []);
44
+ return {
45
+ valid: errors.length === 0,
46
+ errors,
47
+ };
48
+ }
49
+ /**
50
+ * Enumerate programs up to max depth
51
+ */
52
+ enumerate(maxDepth, maxResults) {
53
+ const programs = [];
54
+ this.enumerateExpressions(maxDepth, programs, maxResults);
55
+ return programs;
56
+ }
57
+ /**
58
+ * Get an operator by name
59
+ */
60
+ getOperator(name) {
61
+ return this.operators.get(name);
62
+ }
63
+ /**
64
+ * Get a constant by name
65
+ */
66
+ getConstant(name) {
67
+ return this.constants.get(name);
68
+ }
69
+ /**
70
+ * Get a type by name
71
+ */
72
+ getType(name) {
73
+ return this.types.get(name);
74
+ }
75
+ /**
76
+ * Get all operators
77
+ */
78
+ getOperators() {
79
+ return Array.from(this.operators.values());
80
+ }
81
+ /**
82
+ * Get all constants
83
+ */
84
+ getConstants() {
85
+ return Array.from(this.constants.values());
86
+ }
87
+ /**
88
+ * Enumerate expressions up to max depth
89
+ */
90
+ enumerateExpressions(maxDepth, programs, maxResults) {
91
+ // Add constants
92
+ for (const constant of this.constants.values()) {
93
+ if (maxResults && programs.length >= maxResults)
94
+ return;
95
+ programs.push({ expression: { kind: 'constant', name: constant.name } });
96
+ }
97
+ if (maxDepth < 2)
98
+ return;
99
+ // Add applications
100
+ for (const operator of this.operators.values()) {
101
+ if (maxResults && programs.length >= maxResults)
102
+ return;
103
+ // Generate combinations of arguments
104
+ const argCombinations = this.generateArgCombinations(operator.inputTypes.length, maxDepth - 1, maxResults ? maxResults - programs.length : undefined);
105
+ for (const args of argCombinations) {
106
+ if (maxResults && programs.length >= maxResults)
107
+ return;
108
+ programs.push({
109
+ expression: {
110
+ kind: 'application',
111
+ operator: operator.name,
112
+ args,
113
+ },
114
+ });
115
+ }
116
+ }
117
+ }
118
+ /**
119
+ * Generate argument combinations
120
+ */
121
+ generateArgCombinations(arity, _depth, _maxResults) {
122
+ if (arity === 0)
123
+ return [[]];
124
+ const baseExprs = Array.from(this.constants.values()).map((c) => ({ kind: 'constant', name: c.name }));
125
+ // Simple: just use constants for now
126
+ const result = [];
127
+ const gen = this.cartesianProduct(Array(arity).fill(baseExprs));
128
+ for (const combo of gen) {
129
+ result.push(combo);
130
+ }
131
+ return result;
132
+ }
133
+ /**
134
+ * Cartesian product of arrays
135
+ */
136
+ *cartesianProduct(arrays) {
137
+ if (arrays.length === 0) {
138
+ yield [];
139
+ return;
140
+ }
141
+ const [first, ...rest] = arrays;
142
+ for (const item of first) {
143
+ for (const combo of this.cartesianProduct(rest)) {
144
+ yield [item, ...combo];
145
+ }
146
+ }
147
+ } /**
148
+ * Evaluate an expression
149
+ */
150
+ evaluateExpression(expr, context) {
151
+ switch (expr.kind) {
152
+ case 'constant': {
153
+ const constant = this.constants.get(expr.name);
154
+ if (!constant) {
155
+ throw new ExecutionError(`Unknown constant: ${expr.name}`);
156
+ }
157
+ return constant.value;
158
+ }
159
+ case 'variable': {
160
+ const value = context.variables?.get(expr.name);
161
+ if (value === undefined) {
162
+ throw new ExecutionError(`Unknown variable: ${expr.name}`);
163
+ }
164
+ return value;
165
+ }
166
+ case 'application': {
167
+ const operator = this.operators.get(expr.operator);
168
+ if (!operator) {
169
+ throw new OperatorNotFoundError(expr.operator);
170
+ }
171
+ const args = expr.args.map((arg) => this.evaluateExpression(arg, context));
172
+ const impl = operator.implementation ?? operator.semantics;
173
+ if (!impl) {
174
+ throw new ExecutionError(`Operator ${expr.operator} has no implementation defined`);
175
+ }
176
+ try {
177
+ return impl(...args);
178
+ }
179
+ catch (error) {
180
+ throw new ExecutionError(`Error executing operator ${expr.operator}: ${error}`, JSON.stringify(expr));
181
+ }
182
+ }
183
+ case 'lambda': {
184
+ // Return a function that evaluates the body with the parameter bound
185
+ return (arg) => {
186
+ const newVariables = new Map(context.variables ?? []);
187
+ newVariables.set(expr.parameter, arg);
188
+ return this.evaluateExpression(expr.body, {
189
+ input: context.input,
190
+ variables: newVariables,
191
+ });
192
+ };
193
+ }
194
+ default:
195
+ throw new ExecutionError(`Unknown expression kind: ${expr.kind}`);
196
+ }
197
+ }
198
+ /**
199
+ * Validate an expression
200
+ */
201
+ validateExpression(expr, errors, path) {
202
+ switch (expr.kind) {
203
+ case 'constant': {
204
+ if (!this.constants.has(expr.name)) {
205
+ errors.push({
206
+ message: `Unknown constant: ${expr.name}`,
207
+ path,
208
+ });
209
+ }
210
+ break;
211
+ }
212
+ case 'variable': {
213
+ // Variables are always valid (checked at runtime)
214
+ break;
215
+ }
216
+ case 'application': {
217
+ if (!this.operators.has(expr.operator)) {
218
+ errors.push({
219
+ message: `Unknown operator: ${expr.operator}`,
220
+ path,
221
+ });
222
+ }
223
+ else {
224
+ const operator = this.operators.get(expr.operator);
225
+ if (expr.args.length !== operator.inputTypes.length) {
226
+ errors.push({
227
+ message: `Operator ${expr.operator} expects ${operator.inputTypes.length} arguments, got ${expr.args.length}`,
228
+ path,
229
+ });
230
+ }
231
+ }
232
+ // Validate arguments
233
+ for (let i = 0; i < expr.args.length; i++) {
234
+ this.validateExpression(expr.args[i], errors, [...path, i]);
235
+ }
236
+ break;
237
+ }
238
+ case 'lambda': {
239
+ this.validateExpression(expr.body, errors, [...path, 0]);
240
+ break;
241
+ }
242
+ default:
243
+ errors.push({
244
+ message: `Unknown expression kind: ${expr.kind}`,
245
+ path,
246
+ });
247
+ }
248
+ }
249
+ }
250
+ //# sourceMappingURL=DSL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DSL.js","sourceRoot":"","sources":["../../src/dsl/DSL.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * DSL Builder
3
+ * @module @nahisaho/musubix-synthesis
4
+ * @description Declarative DSL definition builder
5
+ * Traces to: REQ-SYN-001 (DSL Definition Framework)
6
+ */
7
+ import type { Constant, DSLConfig, Operator, TypeDefinition } from '../types.js';
8
+ /**
9
+ * DSL Builder implementation
10
+ */
11
+ export declare class DSLBuilder {
12
+ private readonly typeList;
13
+ private readonly operatorList;
14
+ private readonly constantList;
15
+ constructor();
16
+ /**
17
+ * Add a type to the DSL
18
+ */
19
+ type(name: string, def: TypeDefinition): DSLBuilder;
20
+ /**
21
+ * Add an operator to the DSL
22
+ */
23
+ operator(name: string, op: Operator): DSLBuilder;
24
+ /**
25
+ * Add a constant to the DSL
26
+ */
27
+ constant(name: string, c: Constant): DSLBuilder;
28
+ /**
29
+ * Build the DSL config
30
+ */
31
+ build(): DSLConfig;
32
+ }
33
+ //# sourceMappingURL=DSLBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DSLBuilder.d.ts","sourceRoot":"","sources":["../../src/dsl/DSLBuilder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,cAAc,EACf,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;;IAQ1C;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,UAAU;IAKnD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,UAAU;IAKhD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,GAAG,UAAU;IAK/C;;OAEG;IACH,KAAK,IAAI,SAAS;CAOnB"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * DSL Builder
3
+ * @module @nahisaho/musubix-synthesis
4
+ * @description Declarative DSL definition builder
5
+ * Traces to: REQ-SYN-001 (DSL Definition Framework)
6
+ */
7
+ /**
8
+ * DSL Builder implementation
9
+ */
10
+ export class DSLBuilder {
11
+ typeList;
12
+ operatorList;
13
+ constantList;
14
+ constructor() {
15
+ this.typeList = [];
16
+ this.operatorList = [];
17
+ this.constantList = [];
18
+ }
19
+ /**
20
+ * Add a type to the DSL
21
+ */
22
+ type(name, def) {
23
+ this.typeList.push({ ...def, name });
24
+ return this;
25
+ }
26
+ /**
27
+ * Add an operator to the DSL
28
+ */
29
+ operator(name, op) {
30
+ this.operatorList.push({ ...op, name });
31
+ return this;
32
+ }
33
+ /**
34
+ * Add a constant to the DSL
35
+ */
36
+ constant(name, c) {
37
+ this.constantList.push({ ...c, name });
38
+ return this;
39
+ }
40
+ /**
41
+ * Build the DSL config
42
+ */
43
+ build() {
44
+ return {
45
+ types: [...this.typeList],
46
+ operators: [...this.operatorList],
47
+ constants: [...this.constantList],
48
+ };
49
+ }
50
+ }
51
+ //# sourceMappingURL=DSLBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DSLBuilder.js","sourceRoot":"","sources":["../../src/dsl/DSLBuilder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH;;GAEG;AACH,MAAM,OAAO,UAAU;IACJ,QAAQ,CAAmB;IAC3B,YAAY,CAAa;IACzB,YAAY,CAAa;IAE1C;QACE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,IAAY,EAAE,GAAmB;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY,EAAE,EAAY;QACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY,EAAE,CAAW;QAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO;YACL,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YACjC,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;SAClC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Type System
3
+ * @module @nahisaho/musubix-synthesis
4
+ * @description Type checking and inference for DSL
5
+ */
6
+ import type { DSLConfig, Expression, IDSL, ITypeSystem, Program, TypeCheckResult, TypeContext, TypeSignature } from '../types.js';
7
+ /**
8
+ * Type system implementation
9
+ */
10
+ export declare class TypeSystem implements ITypeSystem {
11
+ private readonly operators;
12
+ private readonly constants;
13
+ constructor(configOrDsl: DSLConfig | IDSL);
14
+ /**
15
+ * Type check a program (returns boolean for simple check)
16
+ */
17
+ check(program: Program, env?: TypeContext | Record<string, TypeSignature>): boolean;
18
+ /**
19
+ * Type check a program with full results
20
+ */
21
+ checkWithDetails(program: Program, env?: TypeContext | Record<string, TypeSignature>): TypeCheckResult;
22
+ /**
23
+ * Infer the type of an expression
24
+ */
25
+ infer(expression: Expression, env?: TypeContext | Record<string, TypeSignature>): TypeSignature | null;
26
+ /**
27
+ * Normalize context from Record or TypeContext
28
+ */
29
+ private normalizeContext;
30
+ /**
31
+ * Unify two types
32
+ */
33
+ unify(a: TypeSignature, b: TypeSignature): TypeSignature | null;
34
+ /**
35
+ * Check if sub is a subtype of sup
36
+ */
37
+ isSubtype(sub: TypeSignature, sup: TypeSignature): boolean;
38
+ /**
39
+ * Check if two types are equal
40
+ */
41
+ private typeEquals;
42
+ /**
43
+ * Infer expression type with error collection
44
+ */
45
+ private inferExpression;
46
+ /**
47
+ * Convert type to string
48
+ */
49
+ private typeToString;
50
+ }
51
+ //# sourceMappingURL=TypeSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypeSystem.d.ts","sourceRoot":"","sources":["../../src/dsl/TypeSystem.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EACV,IAAI,EACJ,WAAW,EAEX,OAAO,EAEP,eAAe,EACf,WAAW,EACX,aAAa,EACd,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;gBAEtC,WAAW,EAAE,SAAS,GAAG,IAAI;IAYzC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,OAAO;IAKnF;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,eAAe;IAiBtG;;OAEG;IACH,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,aAAa,GAAG,IAAI;IAMtG;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,KAAK,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa,GAAG,IAAI;IAwC/D;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO;IA6B1D;;OAEG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,eAAe;IAoFvB;;OAEG;IACH,OAAO,CAAC,YAAY;CASrB"}