@nahisaho/musubix-lean 1.8.5

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 (89) hide show
  1. package/dist/converters/EarsToLeanConverter.d.ts +61 -0
  2. package/dist/converters/EarsToLeanConverter.d.ts.map +1 -0
  3. package/dist/converters/EarsToLeanConverter.js +300 -0
  4. package/dist/converters/EarsToLeanConverter.js.map +1 -0
  5. package/dist/converters/TypeScriptSpecifier.d.ts +63 -0
  6. package/dist/converters/TypeScriptSpecifier.d.ts.map +1 -0
  7. package/dist/converters/TypeScriptSpecifier.js +307 -0
  8. package/dist/converters/TypeScriptSpecifier.js.map +1 -0
  9. package/dist/converters/index.d.ts +7 -0
  10. package/dist/converters/index.d.ts.map +1 -0
  11. package/dist/converters/index.js +7 -0
  12. package/dist/converters/index.js.map +1 -0
  13. package/dist/environment/LeanEnvironmentDetector.d.ts +57 -0
  14. package/dist/environment/LeanEnvironmentDetector.d.ts.map +1 -0
  15. package/dist/environment/LeanEnvironmentDetector.js +221 -0
  16. package/dist/environment/LeanEnvironmentDetector.js.map +1 -0
  17. package/dist/environment/LeanProjectInitializer.d.ts +49 -0
  18. package/dist/environment/LeanProjectInitializer.d.ts.map +1 -0
  19. package/dist/environment/LeanProjectInitializer.js +232 -0
  20. package/dist/environment/LeanProjectInitializer.js.map +1 -0
  21. package/dist/environment/index.d.ts +7 -0
  22. package/dist/environment/index.d.ts.map +1 -0
  23. package/dist/environment/index.js +7 -0
  24. package/dist/environment/index.js.map +1 -0
  25. package/dist/errors.d.ts +141 -0
  26. package/dist/errors.d.ts.map +1 -0
  27. package/dist/errors.js +254 -0
  28. package/dist/errors.js.map +1 -0
  29. package/dist/hybrid/HybridVerifier.d.ts +113 -0
  30. package/dist/hybrid/HybridVerifier.d.ts.map +1 -0
  31. package/dist/hybrid/HybridVerifier.js +247 -0
  32. package/dist/hybrid/HybridVerifier.js.map +1 -0
  33. package/dist/hybrid/index.d.ts +6 -0
  34. package/dist/hybrid/index.d.ts.map +1 -0
  35. package/dist/hybrid/index.js +6 -0
  36. package/dist/hybrid/index.js.map +1 -0
  37. package/dist/index.d.ts +21 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +50 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/infrastructure/LeanFileGenerator.d.ts +70 -0
  42. package/dist/infrastructure/LeanFileGenerator.d.ts.map +1 -0
  43. package/dist/infrastructure/LeanFileGenerator.js +253 -0
  44. package/dist/infrastructure/LeanFileGenerator.js.map +1 -0
  45. package/dist/infrastructure/LeanRunner.d.ts +93 -0
  46. package/dist/infrastructure/LeanRunner.d.ts.map +1 -0
  47. package/dist/infrastructure/LeanRunner.js +296 -0
  48. package/dist/infrastructure/LeanRunner.js.map +1 -0
  49. package/dist/infrastructure/index.d.ts +7 -0
  50. package/dist/infrastructure/index.d.ts.map +1 -0
  51. package/dist/infrastructure/index.js +7 -0
  52. package/dist/infrastructure/index.js.map +1 -0
  53. package/dist/integration/LeanIntegration.d.ts +138 -0
  54. package/dist/integration/LeanIntegration.d.ts.map +1 -0
  55. package/dist/integration/LeanIntegration.js +352 -0
  56. package/dist/integration/LeanIntegration.js.map +1 -0
  57. package/dist/proof/ProofGenerator.d.ts +53 -0
  58. package/dist/proof/ProofGenerator.d.ts.map +1 -0
  59. package/dist/proof/ProofGenerator.js +324 -0
  60. package/dist/proof/ProofGenerator.js.map +1 -0
  61. package/dist/proof/ReProverClient.d.ts +58 -0
  62. package/dist/proof/ReProverClient.d.ts.map +1 -0
  63. package/dist/proof/ReProverClient.js +260 -0
  64. package/dist/proof/ReProverClient.js.map +1 -0
  65. package/dist/proof/index.d.ts +7 -0
  66. package/dist/proof/index.d.ts.map +1 -0
  67. package/dist/proof/index.js +7 -0
  68. package/dist/proof/index.js.map +1 -0
  69. package/dist/reporting/VerificationReporter.d.ts +89 -0
  70. package/dist/reporting/VerificationReporter.d.ts.map +1 -0
  71. package/dist/reporting/VerificationReporter.js +296 -0
  72. package/dist/reporting/VerificationReporter.js.map +1 -0
  73. package/dist/reporting/index.d.ts +6 -0
  74. package/dist/reporting/index.d.ts.map +1 -0
  75. package/dist/reporting/index.js +6 -0
  76. package/dist/reporting/index.js.map +1 -0
  77. package/dist/traceability/TraceabilityManager.d.ts +104 -0
  78. package/dist/traceability/TraceabilityManager.d.ts.map +1 -0
  79. package/dist/traceability/TraceabilityManager.js +299 -0
  80. package/dist/traceability/TraceabilityManager.js.map +1 -0
  81. package/dist/traceability/index.d.ts +6 -0
  82. package/dist/traceability/index.d.ts.map +1 -0
  83. package/dist/traceability/index.js +6 -0
  84. package/dist/traceability/index.js.map +1 -0
  85. package/dist/types.d.ts +466 -0
  86. package/dist/types.d.ts.map +1 -0
  87. package/dist/types.js +17 -0
  88. package/dist/types.js.map +1 -0
  89. package/package.json +78 -0
@@ -0,0 +1,296 @@
1
+ /**
2
+ * @fileoverview Lean execution runner
3
+ * @module @nahisaho/musubix-lean/infrastructure
4
+ * @traceability REQ-LEAN-CORE-004
5
+ */
6
+ import { spawn } from 'child_process';
7
+ import * as fs from 'fs/promises';
8
+ import * as path from 'path';
9
+ import { LeanExecutionError, LeanNotFoundError } from '../errors.js';
10
+ /**
11
+ * Runs Lean commands and validates proofs
12
+ * @traceability REQ-LEAN-CORE-004
13
+ */
14
+ export class LeanRunner {
15
+ leanPath;
16
+ projectPath;
17
+ timeout;
18
+ lakeEnabled;
19
+ verbose;
20
+ leanVersion = null;
21
+ constructor(config = {}) {
22
+ this.leanPath = config.leanPath ?? 'lean';
23
+ this.projectPath = config.projectPath ?? process.cwd();
24
+ this.lakeEnabled = config.lakeEnabled ?? true;
25
+ this.timeout = config.timeout ?? 30000;
26
+ this.verbose = config.verbose ?? false;
27
+ }
28
+ /**
29
+ * Execute Lean code file
30
+ * @traceability REQ-LEAN-CORE-004
31
+ */
32
+ async execute(filePath, options) {
33
+ const timeout = options?.timeout ?? this.timeout;
34
+ const startTime = Date.now();
35
+ return new Promise((resolve, reject) => {
36
+ const args = this.buildLeanArgs(filePath);
37
+ if (this.verbose) {
38
+ console.log(`[LeanRunner] Executing: ${this.leanPath} ${args.join(' ')}`);
39
+ }
40
+ const proc = spawn(this.leanPath, args, {
41
+ cwd: this.projectPath,
42
+ env: {
43
+ ...process.env,
44
+ LEAN_PATH: process.env.LEAN_PATH || '',
45
+ },
46
+ });
47
+ let stdout = '';
48
+ let stderr = '';
49
+ let killed = false;
50
+ const timeoutId = setTimeout(() => {
51
+ killed = true;
52
+ proc.kill('SIGTERM');
53
+ }, timeout);
54
+ proc.stdout?.on('data', (data) => {
55
+ stdout += data.toString();
56
+ });
57
+ proc.stderr?.on('data', (data) => {
58
+ stderr += data.toString();
59
+ });
60
+ proc.on('error', (error) => {
61
+ clearTimeout(timeoutId);
62
+ if (error.message.includes('ENOENT')) {
63
+ reject(new LeanNotFoundError(this.leanPath));
64
+ }
65
+ else {
66
+ reject(new LeanExecutionError('Execution failed', error.message, stderr));
67
+ }
68
+ });
69
+ proc.on('close', (exitCode) => {
70
+ clearTimeout(timeoutId);
71
+ const duration = Date.now() - startTime;
72
+ if (killed) {
73
+ resolve({
74
+ success: false,
75
+ stdout,
76
+ stderr: 'Execution timed out',
77
+ exitCode: -1,
78
+ duration,
79
+ });
80
+ }
81
+ else {
82
+ resolve({
83
+ success: exitCode === 0,
84
+ stdout,
85
+ stderr,
86
+ exitCode: exitCode ?? 1,
87
+ duration,
88
+ });
89
+ }
90
+ });
91
+ });
92
+ }
93
+ /**
94
+ * Execute Lean code string (creates temp file)
95
+ */
96
+ async executeCode(code, options) {
97
+ const tempDir = path.join(this.projectPath, '.musubix-temp');
98
+ const tempFile = path.join(tempDir, `temp_${Date.now()}.lean`);
99
+ try {
100
+ await fs.mkdir(tempDir, { recursive: true });
101
+ await fs.writeFile(tempFile, code, 'utf-8');
102
+ const result = await this.execute(tempFile, options);
103
+ // Clean up
104
+ await fs.unlink(tempFile).catch(() => { });
105
+ return result;
106
+ }
107
+ catch (error) {
108
+ // Clean up on error
109
+ await fs.unlink(tempFile).catch(() => { });
110
+ throw error;
111
+ }
112
+ }
113
+ /**
114
+ * Check if Lean can type-check a file
115
+ */
116
+ async typeCheck(filePath) {
117
+ const result = await this.execute(filePath);
118
+ if (result.success) {
119
+ return { valid: true, errors: [] };
120
+ }
121
+ // Parse errors from stderr
122
+ const errors = this.parseErrors(result.stderr);
123
+ return { valid: false, errors };
124
+ }
125
+ /**
126
+ * Get current proof state (goals and hypotheses)
127
+ */
128
+ async getGoalState(_filePath, _line, _column) {
129
+ // In a real implementation, this would use the Lean server protocol
130
+ // For now, return a placeholder
131
+ return {
132
+ goals: [],
133
+ hypotheses: [],
134
+ };
135
+ }
136
+ /**
137
+ * Run Lake build
138
+ */
139
+ async lakeBuild(projectPath) {
140
+ const cwd = projectPath ?? this.projectPath;
141
+ const startTime = Date.now();
142
+ return new Promise((resolve, reject) => {
143
+ const proc = spawn('lake', ['build'], {
144
+ cwd,
145
+ });
146
+ let stdout = '';
147
+ let stderr = '';
148
+ const timeoutId = setTimeout(() => {
149
+ proc.kill('SIGTERM');
150
+ }, this.timeout * 2);
151
+ proc.stdout?.on('data', (data) => {
152
+ stdout += data.toString();
153
+ });
154
+ proc.stderr?.on('data', (data) => {
155
+ stderr += data.toString();
156
+ });
157
+ proc.on('error', (error) => {
158
+ clearTimeout(timeoutId);
159
+ reject(new LeanExecutionError('Lake build failed', error.message, stderr));
160
+ });
161
+ proc.on('close', (exitCode) => {
162
+ clearTimeout(timeoutId);
163
+ const duration = Date.now() - startTime;
164
+ resolve({
165
+ success: exitCode === 0,
166
+ stdout,
167
+ stderr,
168
+ exitCode: exitCode ?? 1,
169
+ duration,
170
+ });
171
+ });
172
+ });
173
+ }
174
+ /**
175
+ * Get Lean version information
176
+ */
177
+ async getVersion() {
178
+ if (this.leanVersion) {
179
+ return this.leanVersion;
180
+ }
181
+ return new Promise((resolve, reject) => {
182
+ const proc = spawn(this.leanPath, ['--version']);
183
+ let stdout = '';
184
+ const timeoutId = setTimeout(() => {
185
+ proc.kill('SIGTERM');
186
+ reject(new LeanExecutionError('Version check timed out', '', ''));
187
+ }, 5000);
188
+ proc.stdout?.on('data', (data) => {
189
+ stdout += data.toString();
190
+ });
191
+ proc.on('error', (_error) => {
192
+ clearTimeout(timeoutId);
193
+ reject(new LeanNotFoundError(this.leanPath));
194
+ });
195
+ proc.on('close', (exitCode) => {
196
+ clearTimeout(timeoutId);
197
+ if (exitCode !== 0) {
198
+ reject(new LeanExecutionError('Failed to get Lean version', '', ''));
199
+ return;
200
+ }
201
+ const version = this.parseVersion(stdout);
202
+ this.leanVersion = version;
203
+ resolve(version);
204
+ });
205
+ });
206
+ }
207
+ /**
208
+ * Parse version from Lean output
209
+ */
210
+ parseVersion(output) {
211
+ // Parse "Lean (version 4.x.x, ...)"
212
+ const match = output.match(/version (\d+)\.(\d+)\.(\d+)/);
213
+ if (match) {
214
+ return {
215
+ major: parseInt(match[1], 10),
216
+ minor: parseInt(match[2], 10),
217
+ patch: parseInt(match[3], 10),
218
+ full: `${match[1]}.${match[2]}.${match[3]}`,
219
+ };
220
+ }
221
+ // Fallback
222
+ return {
223
+ major: 4,
224
+ minor: 0,
225
+ patch: 0,
226
+ full: 'unknown',
227
+ };
228
+ }
229
+ /**
230
+ * Build Lean command arguments
231
+ */
232
+ buildLeanArgs(filePath) {
233
+ if (this.lakeEnabled) {
234
+ // When using Lake, we run the file through Lake
235
+ return ['env', this.leanPath, filePath];
236
+ }
237
+ // Direct Lean execution
238
+ return [filePath];
239
+ }
240
+ /**
241
+ * Parse Lean error messages
242
+ */
243
+ parseErrors(stderr) {
244
+ const errors = [];
245
+ const lines = stderr.split('\n');
246
+ for (const line of lines) {
247
+ // Lean error format: "file:line:col: error: message"
248
+ if (line.includes('error:')) {
249
+ errors.push(line.trim());
250
+ }
251
+ }
252
+ return errors.length > 0 ? errors : [stderr.trim()];
253
+ }
254
+ /**
255
+ * Check if Lean is available
256
+ */
257
+ async isAvailable() {
258
+ try {
259
+ await this.getVersion();
260
+ return true;
261
+ }
262
+ catch {
263
+ return false;
264
+ }
265
+ }
266
+ /**
267
+ * Get configuration
268
+ */
269
+ getConfig() {
270
+ return {
271
+ leanPath: this.leanPath,
272
+ projectPath: this.projectPath,
273
+ timeout: this.timeout,
274
+ lakeEnabled: this.lakeEnabled,
275
+ verbose: this.verbose,
276
+ };
277
+ }
278
+ /**
279
+ * Update configuration
280
+ */
281
+ updateConfig(config) {
282
+ if (config.leanPath) {
283
+ this.leanPath = config.leanPath;
284
+ this.leanVersion = null;
285
+ }
286
+ if (config.projectPath)
287
+ this.projectPath = config.projectPath;
288
+ if (config.timeout)
289
+ this.timeout = config.timeout;
290
+ if (config.lakeEnabled !== undefined)
291
+ this.lakeEnabled = config.lakeEnabled;
292
+ if (config.verbose !== undefined)
293
+ this.verbose = config.verbose;
294
+ }
295
+ }
296
+ //# sourceMappingURL=LeanRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeanRunner.js","sourceRoot":"","sources":["../../src/infrastructure/LeanRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Infrastructure module exports
3
+ * @module @nahisaho/musubix-lean/infrastructure
4
+ */
5
+ export { LeanFileGenerator, type GeneratedFile, type GenerationOptions, } from './LeanFileGenerator.js';
6
+ export { LeanRunner, type LeanExecutionResult, type LeanGoalInfo, } from './LeanRunner.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,UAAU,EACV,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Infrastructure module exports
3
+ * @module @nahisaho/musubix-lean/infrastructure
4
+ */
5
+ export { LeanFileGenerator, } from './LeanFileGenerator.js';
6
+ export { LeanRunner, } from './LeanRunner.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,iBAAiB,GAGlB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,UAAU,GAGX,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * @fileoverview Main integration facade for Lean 4 formal verification
3
+ * @module @nahisaho/musubix-lean
4
+ * @traceability REQ-LEAN-001 to REQ-LEAN-006
5
+ */
6
+ import { Result } from 'neverthrow';
7
+ import type { LeanConfig, LeanTheorem, LeanProof, LeanVersion, VerificationResult, VerificationReport, HybridVerificationResult, EarsRequirement, TypeScriptSpec } from '../types.js';
8
+ import { type RuntimeTestResult } from '../hybrid/HybridVerifier.js';
9
+ import { LeanIntegrationError, LeanEnvironmentError, LeanVerificationError } from '../errors.js';
10
+ /**
11
+ * Integration status
12
+ */
13
+ export interface IntegrationStatus {
14
+ initialized: boolean;
15
+ leanAvailable: boolean;
16
+ leanVersion?: LeanVersion;
17
+ projectInitialized: boolean;
18
+ mathlibAvailable: boolean;
19
+ reprovarAvailable: boolean;
20
+ }
21
+ /**
22
+ * Verification options
23
+ */
24
+ export interface VerificationOptions {
25
+ generateProofs?: boolean;
26
+ useReProver?: boolean;
27
+ timeout?: number;
28
+ traceability?: boolean;
29
+ hybridMode?: boolean;
30
+ }
31
+ /**
32
+ * Main integration class for Lean 4 formal verification
33
+ * Provides a unified API for all verification capabilities
34
+ *
35
+ * @traceability REQ-LEAN-001
36
+ */
37
+ export declare class LeanIntegration {
38
+ private leanConfig;
39
+ private detector;
40
+ private initializer;
41
+ private runner;
42
+ private generator;
43
+ private earsConverter;
44
+ private tsSpecifier;
45
+ private proofGenerator;
46
+ private reprovarClient;
47
+ private reporter;
48
+ private traceability;
49
+ private hybridVerifier;
50
+ private status;
51
+ constructor(config?: Partial<LeanConfig>);
52
+ /**
53
+ * Initialize the integration
54
+ * @traceability REQ-LEAN-ENV-001
55
+ */
56
+ initialize(): Promise<Result<IntegrationStatus, LeanIntegrationError>>;
57
+ /**
58
+ * Initialize a new Lean project
59
+ * @traceability REQ-LEAN-ENV-002
60
+ */
61
+ initProject(name: string, path?: string): Promise<Result<void, LeanIntegrationError>>;
62
+ /**
63
+ * Convert EARS requirement to Lean theorem
64
+ * @traceability REQ-LEAN-CONV-001
65
+ */
66
+ convertRequirement(requirement: EarsRequirement): Result<LeanTheorem, LeanIntegrationError>;
67
+ /**
68
+ * Convert TypeScript specification to Lean
69
+ * @traceability REQ-LEAN-CONV-002
70
+ */
71
+ convertTypeScript(spec: TypeScriptSpec): Result<LeanTheorem[], LeanIntegrationError>;
72
+ /**
73
+ * Generate proof for a theorem
74
+ * @traceability REQ-LEAN-PROOF-001
75
+ */
76
+ generateProof(theorem: LeanTheorem, options?: {
77
+ useReProver?: boolean;
78
+ }): Promise<Result<LeanProof, LeanIntegrationError>>;
79
+ /**
80
+ * Verify a theorem
81
+ * @traceability REQ-LEAN-VERIFY-001
82
+ */
83
+ verify(theorem: LeanTheorem, options?: VerificationOptions): Promise<Result<VerificationResult, LeanVerificationError>>;
84
+ /**
85
+ * Perform hybrid verification
86
+ * @traceability REQ-LEAN-HYBRID-001
87
+ */
88
+ verifyHybrid(functionId: string, runtimeTests: () => RuntimeTestResult, theorem: LeanTheorem): Promise<Result<HybridVerificationResult, LeanVerificationError>>;
89
+ /**
90
+ * Batch verify multiple theorems
91
+ */
92
+ verifyBatch(theorems: LeanTheorem[], options?: VerificationOptions): Promise<Map<string, VerificationResult>>;
93
+ /**
94
+ * Generate verification report
95
+ * @traceability REQ-LEAN-FEEDBACK-001
96
+ */
97
+ generateReport(): VerificationReport;
98
+ /**
99
+ * Export report in specified format
100
+ */
101
+ exportReport(format: 'json' | 'markdown' | 'html' | 'csv'): string;
102
+ /**
103
+ * Get traceability coverage
104
+ * @traceability REQ-LEAN-TRACE-003
105
+ */
106
+ getTraceabilityCoverage(requirementIds: string[]): {
107
+ totalRequirements: number;
108
+ coveredRequirements: number;
109
+ coveragePercentage: number;
110
+ untraced: string[];
111
+ fullyTraced: string[];
112
+ };
113
+ /**
114
+ * Get traceability matrix as Markdown
115
+ */
116
+ getTraceabilityMatrix(): string;
117
+ /**
118
+ * Get current status
119
+ */
120
+ getStatus(): IntegrationStatus;
121
+ /**
122
+ * Get Lean version
123
+ */
124
+ getLeanVersion(): Promise<Result<LeanVersion, LeanEnvironmentError>>;
125
+ /**
126
+ * Check if a file has valid Lean syntax
127
+ */
128
+ validateSyntax(filePath: string): Promise<Result<boolean, LeanVerificationError>>;
129
+ /**
130
+ * Clear all state
131
+ */
132
+ reset(): void;
133
+ }
134
+ /**
135
+ * Factory function for creating LeanIntegration instance
136
+ */
137
+ export declare function createLeanIntegration(config?: Partial<LeanConfig>): LeanIntegration;
138
+ //# sourceMappingURL=LeanIntegration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeanIntegration.d.ts","sourceRoot":"","sources":["../../src/integration/LeanIntegration.ts"],"names":[],"mappings":"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"}