@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.
- package/README.md +100 -0
- package/dist/dsl/DSL.d.ts +73 -0
- package/dist/dsl/DSL.d.ts.map +1 -0
- package/dist/dsl/DSL.js +250 -0
- package/dist/dsl/DSL.js.map +1 -0
- package/dist/dsl/DSLBuilder.d.ts +33 -0
- package/dist/dsl/DSLBuilder.d.ts.map +1 -0
- package/dist/dsl/DSLBuilder.js +51 -0
- package/dist/dsl/DSLBuilder.js.map +1 -0
- package/dist/dsl/TypeSystem.d.ts +51 -0
- package/dist/dsl/TypeSystem.d.ts.map +1 -0
- package/dist/dsl/TypeSystem.js +253 -0
- package/dist/dsl/TypeSystem.js.map +1 -0
- package/dist/dsl/index.d.ts +8 -0
- package/dist/dsl/index.d.ts.map +1 -0
- package/dist/dsl/index.js +8 -0
- package/dist/dsl/index.js.map +1 -0
- package/dist/errors.d.ts +93 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +142 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/MetaLearner.d.ts +50 -0
- package/dist/rules/MetaLearner.d.ts.map +1 -0
- package/dist/rules/MetaLearner.js +144 -0
- package/dist/rules/MetaLearner.js.map +1 -0
- package/dist/rules/RuleExtractor.d.ts +69 -0
- package/dist/rules/RuleExtractor.d.ts.map +1 -0
- package/dist/rules/RuleExtractor.js +290 -0
- package/dist/rules/RuleExtractor.js.map +1 -0
- package/dist/rules/RuleLibrary.d.ts +55 -0
- package/dist/rules/RuleLibrary.d.ts.map +1 -0
- package/dist/rules/RuleLibrary.js +190 -0
- package/dist/rules/RuleLibrary.js.map +1 -0
- package/dist/rules/index.d.ts +9 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +9 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/synthesis/Enumerator.d.ts +78 -0
- package/dist/synthesis/Enumerator.d.ts.map +1 -0
- package/dist/synthesis/Enumerator.js +292 -0
- package/dist/synthesis/Enumerator.js.map +1 -0
- package/dist/synthesis/PBESynthesizer.d.ts +37 -0
- package/dist/synthesis/PBESynthesizer.d.ts.map +1 -0
- package/dist/synthesis/PBESynthesizer.js +187 -0
- package/dist/synthesis/PBESynthesizer.js.map +1 -0
- package/dist/synthesis/VersionSpace.d.ts +50 -0
- package/dist/synthesis/VersionSpace.d.ts.map +1 -0
- package/dist/synthesis/VersionSpace.js +102 -0
- package/dist/synthesis/VersionSpace.js.map +1 -0
- package/dist/synthesis/WitnessEngine.d.ts +64 -0
- package/dist/synthesis/WitnessEngine.d.ts.map +1 -0
- package/dist/synthesis/WitnessEngine.js +217 -0
- package/dist/synthesis/WitnessEngine.js.map +1 -0
- package/dist/synthesis/index.d.ts +9 -0
- package/dist/synthesis/index.d.ts.map +1 -0
- package/dist/synthesis/index.js +9 -0
- package/dist/synthesis/index.js.map +1 -0
- package/dist/types.d.ts +372 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- 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"}
|
package/dist/dsl/DSL.js
ADDED
|
@@ -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"}
|