@nahisaho/musubix-formal-verify 1.7.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 (78) hide show
  1. package/README.md +62 -0
  2. package/dist/converters/EarsToSmtConverter.d.ts +102 -0
  3. package/dist/converters/EarsToSmtConverter.d.ts.map +1 -0
  4. package/dist/converters/EarsToSmtConverter.js +368 -0
  5. package/dist/converters/EarsToSmtConverter.js.map +1 -0
  6. package/dist/converters/index.d.ts +6 -0
  7. package/dist/converters/index.d.ts.map +1 -0
  8. package/dist/converters/index.js +5 -0
  9. package/dist/converters/index.js.map +1 -0
  10. package/dist/converters/types.d.ts +103 -0
  11. package/dist/converters/types.d.ts.map +1 -0
  12. package/dist/converters/types.js +7 -0
  13. package/dist/converters/types.js.map +1 -0
  14. package/dist/index.d.ts +22 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +23 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/tools/formal-verify-tools.d.ts +60 -0
  19. package/dist/tools/formal-verify-tools.d.ts.map +1 -0
  20. package/dist/tools/formal-verify-tools.js +371 -0
  21. package/dist/tools/formal-verify-tools.js.map +1 -0
  22. package/dist/tools/index.d.ts +5 -0
  23. package/dist/tools/index.d.ts.map +1 -0
  24. package/dist/tools/index.js +5 -0
  25. package/dist/tools/index.js.map +1 -0
  26. package/dist/traceability/ImpactAnalyzer.d.ts +103 -0
  27. package/dist/traceability/ImpactAnalyzer.d.ts.map +1 -0
  28. package/dist/traceability/ImpactAnalyzer.js +281 -0
  29. package/dist/traceability/ImpactAnalyzer.js.map +1 -0
  30. package/dist/traceability/TraceabilityDB.d.ts +123 -0
  31. package/dist/traceability/TraceabilityDB.d.ts.map +1 -0
  32. package/dist/traceability/TraceabilityDB.js +379 -0
  33. package/dist/traceability/TraceabilityDB.js.map +1 -0
  34. package/dist/traceability/index.d.ts +8 -0
  35. package/dist/traceability/index.d.ts.map +1 -0
  36. package/dist/traceability/index.js +6 -0
  37. package/dist/traceability/index.js.map +1 -0
  38. package/dist/traceability/types.d.ts +156 -0
  39. package/dist/traceability/types.d.ts.map +1 -0
  40. package/dist/traceability/types.js +7 -0
  41. package/dist/traceability/types.js.map +1 -0
  42. package/dist/verifiers/PostconditionVerifier.d.ts +105 -0
  43. package/dist/verifiers/PostconditionVerifier.d.ts.map +1 -0
  44. package/dist/verifiers/PostconditionVerifier.js +326 -0
  45. package/dist/verifiers/PostconditionVerifier.js.map +1 -0
  46. package/dist/verifiers/PreconditionVerifier.d.ts +87 -0
  47. package/dist/verifiers/PreconditionVerifier.d.ts.map +1 -0
  48. package/dist/verifiers/PreconditionVerifier.js +286 -0
  49. package/dist/verifiers/PreconditionVerifier.js.map +1 -0
  50. package/dist/verifiers/index.d.ts +7 -0
  51. package/dist/verifiers/index.d.ts.map +1 -0
  52. package/dist/verifiers/index.js +6 -0
  53. package/dist/verifiers/index.js.map +1 -0
  54. package/dist/verifiers/types.d.ts +109 -0
  55. package/dist/verifiers/types.d.ts.map +1 -0
  56. package/dist/verifiers/types.js +7 -0
  57. package/dist/verifiers/types.js.map +1 -0
  58. package/dist/z3/Z3Adapter.d.ts +92 -0
  59. package/dist/z3/Z3Adapter.d.ts.map +1 -0
  60. package/dist/z3/Z3Adapter.js +189 -0
  61. package/dist/z3/Z3Adapter.js.map +1 -0
  62. package/dist/z3/Z3ProcessFallback.d.ts +67 -0
  63. package/dist/z3/Z3ProcessFallback.d.ts.map +1 -0
  64. package/dist/z3/Z3ProcessFallback.js +287 -0
  65. package/dist/z3/Z3ProcessFallback.js.map +1 -0
  66. package/dist/z3/Z3WasmClient.d.ts +55 -0
  67. package/dist/z3/Z3WasmClient.d.ts.map +1 -0
  68. package/dist/z3/Z3WasmClient.js +172 -0
  69. package/dist/z3/Z3WasmClient.js.map +1 -0
  70. package/dist/z3/index.d.ts +9 -0
  71. package/dist/z3/index.d.ts.map +1 -0
  72. package/dist/z3/index.js +7 -0
  73. package/dist/z3/index.js.map +1 -0
  74. package/dist/z3/types.d.ts +82 -0
  75. package/dist/z3/types.d.ts.map +1 -0
  76. package/dist/z3/types.js +7 -0
  77. package/dist/z3/types.js.map +1 -0
  78. package/package.json +79 -0
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Z3 Adapter
3
+ *
4
+ * Z3WasmClient と Z3ProcessFallback を統合するアダプタークラス
5
+ * 自動フォールバック機能を提供
6
+ */
7
+ import { Z3WasmClient } from './Z3WasmClient.js';
8
+ import { Z3ProcessFallback } from './Z3ProcessFallback.js';
9
+ /**
10
+ * Z3アダプター
11
+ *
12
+ * Z3WasmClientとZ3ProcessFallbackを統合し、
13
+ * 環境に応じて最適なクライアントを自動選択します。
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // ファクトリーメソッドで作成(推奨)
18
+ * const z3 = await Z3Adapter.create();
19
+ * const result = await z3.checkSat('(declare-const x Int) (assert (> x 0))');
20
+ *
21
+ * // オプション指定
22
+ * const z3 = await Z3Adapter.create({
23
+ * timeout: 10000,
24
+ * preferWasm: true,
25
+ * enableFallback: true,
26
+ * });
27
+ * ```
28
+ */
29
+ export class Z3Adapter {
30
+ primaryClient = null;
31
+ fallbackClient = null;
32
+ activeClient = null;
33
+ initialized = false;
34
+ options;
35
+ constructor(options = {}) {
36
+ this.options = {
37
+ timeout: options.timeout ?? 30000,
38
+ logLevel: options.logLevel ?? 'silent',
39
+ memoryLimit: options.memoryLimit ?? 512,
40
+ preferWasm: options.preferWasm ?? true,
41
+ enableFallback: options.enableFallback ?? true,
42
+ };
43
+ }
44
+ /**
45
+ * Z3Adapterのファクトリーメソッド
46
+ *
47
+ * @param options - アダプターオプション
48
+ * @returns 初期化済みのZ3Adapter
49
+ * @throws {Error} Z3が利用できない場合
50
+ */
51
+ static async create(options = {}) {
52
+ const adapter = new Z3Adapter(options);
53
+ await adapter.initialize();
54
+ return adapter;
55
+ }
56
+ /**
57
+ * Z3クライアントを初期化
58
+ *
59
+ * preferWasm=trueの場合はWasmを優先し、失敗時にProcessFallbackを使用
60
+ * preferWasm=falseの場合はProcessFallbackを優先
61
+ */
62
+ async initialize() {
63
+ if (this.initialized) {
64
+ return;
65
+ }
66
+ const { preferWasm, enableFallback, logLevel } = this.options;
67
+ if (preferWasm) {
68
+ // Wasmを優先
69
+ this.primaryClient = new Z3WasmClient(this.options);
70
+ if (enableFallback) {
71
+ this.fallbackClient = new Z3ProcessFallback(this.options);
72
+ }
73
+ }
74
+ else {
75
+ // Processを優先
76
+ this.primaryClient = new Z3ProcessFallback(this.options);
77
+ if (enableFallback) {
78
+ this.fallbackClient = new Z3WasmClient(this.options);
79
+ }
80
+ }
81
+ // プライマリクライアントの初期化を試行
82
+ try {
83
+ await this.primaryClient.initialize();
84
+ if (this.primaryClient.isAvailable()) {
85
+ this.activeClient = this.primaryClient;
86
+ if (logLevel !== 'silent') {
87
+ console.log(`[Z3Adapter] Using primary client: ${preferWasm ? 'Wasm' : 'Process'}`);
88
+ }
89
+ }
90
+ }
91
+ catch (error) {
92
+ if (logLevel !== 'silent') {
93
+ console.warn('[Z3Adapter] Primary client initialization failed:', error);
94
+ }
95
+ }
96
+ // フォールバックを試行
97
+ if (!this.activeClient && this.fallbackClient && enableFallback) {
98
+ try {
99
+ await this.fallbackClient.initialize();
100
+ if (this.fallbackClient.isAvailable()) {
101
+ this.activeClient = this.fallbackClient;
102
+ if (logLevel !== 'silent') {
103
+ console.log(`[Z3Adapter] Using fallback client: ${preferWasm ? 'Process' : 'Wasm'}`);
104
+ }
105
+ }
106
+ }
107
+ catch (error) {
108
+ if (logLevel !== 'silent') {
109
+ console.warn('[Z3Adapter] Fallback client initialization failed:', error);
110
+ }
111
+ }
112
+ }
113
+ this.initialized = true;
114
+ if (!this.activeClient) {
115
+ throw new Error('Z3 is not available. Install z3-solver package (npm install z3-solver) ' +
116
+ 'or ensure Z3 is installed on your system and available in PATH.');
117
+ }
118
+ }
119
+ /**
120
+ * SMT-LIB2形式のアサーションの充足可能性をチェック
121
+ */
122
+ async checkSat(smtLib2) {
123
+ this.ensureInitialized();
124
+ return this.activeClient.checkSat(smtLib2);
125
+ }
126
+ /**
127
+ * モデルを取得(sat の場合のみ有効)
128
+ */
129
+ async getModel(smtLib2) {
130
+ this.ensureInitialized();
131
+ return this.activeClient.getModel(smtLib2);
132
+ }
133
+ /**
134
+ * 証明を取得(unsat の場合のみ有効)
135
+ */
136
+ async getProof(smtLib2) {
137
+ this.ensureInitialized();
138
+ return this.activeClient.getProof(smtLib2);
139
+ }
140
+ /**
141
+ * リソースを解放
142
+ */
143
+ async dispose() {
144
+ if (this.primaryClient) {
145
+ await this.primaryClient.dispose();
146
+ this.primaryClient = null;
147
+ }
148
+ if (this.fallbackClient) {
149
+ await this.fallbackClient.dispose();
150
+ this.fallbackClient = null;
151
+ }
152
+ this.activeClient = null;
153
+ this.initialized = false;
154
+ }
155
+ /**
156
+ * クライアントが利用可能かどうか
157
+ */
158
+ isAvailable() {
159
+ return this.activeClient?.isAvailable() ?? false;
160
+ }
161
+ /**
162
+ * 現在使用中のクライアントタイプを取得
163
+ */
164
+ getActiveClientType() {
165
+ if (!this.activeClient)
166
+ return null;
167
+ if (this.activeClient instanceof Z3WasmClient)
168
+ return 'wasm';
169
+ if (this.activeClient instanceof Z3ProcessFallback)
170
+ return 'process';
171
+ return null;
172
+ }
173
+ /**
174
+ * バックエンドタイプを取得(getActiveClientTypeのエイリアス)
175
+ */
176
+ getBackendType() {
177
+ const type = this.getActiveClientType();
178
+ return type ?? 'none';
179
+ }
180
+ /**
181
+ * 初期化状態を確認
182
+ */
183
+ ensureInitialized() {
184
+ if (!this.initialized || !this.activeClient) {
185
+ throw new Error('Z3Adapter not initialized. Use Z3Adapter.create() to create an instance.');
186
+ }
187
+ }
188
+ }
189
+ //# sourceMappingURL=Z3Adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Z3Adapter.js","sourceRoot":"","sources":["../../src/z3/Z3Adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Z3 Process Fallback Client
3
+ *
4
+ * ネイティブZ3コマンドラインツールを使用するフォールバッククライアント
5
+ *
6
+ * @implements {Z3Client}
7
+ */
8
+ import type { Z3Client, Z3Result, Z3Options } from './types.js';
9
+ /**
10
+ * Z3プロセスフォールバッククライアント
11
+ *
12
+ * z3-wasmが利用できない場合のフォールバックとして、
13
+ * システムにインストールされたZ3コマンドラインツールを使用します。
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const client = new Z3ProcessFallback({ timeout: 10000 });
18
+ * await client.initialize();
19
+ * if (client.isAvailable()) {
20
+ * const result = await client.checkSat('(declare-const x Int) (assert (> x 0))');
21
+ * }
22
+ * ```
23
+ */
24
+ export declare class Z3ProcessFallback implements Z3Client {
25
+ private z3Path;
26
+ private initialized;
27
+ private available;
28
+ private readonly options;
29
+ constructor(options?: Z3Options);
30
+ /**
31
+ * Z3コマンドラインツールの存在を確認
32
+ */
33
+ initialize(): Promise<void>;
34
+ /**
35
+ * Z3実行ファイルを検索
36
+ */
37
+ private findZ3Executable;
38
+ /**
39
+ * コマンドを実行
40
+ */
41
+ private runCommand;
42
+ /**
43
+ * SMT-LIB2形式のアサーションの充足可能性をチェック
44
+ */
45
+ checkSat(smtLib2: string): Promise<Z3Result>;
46
+ /**
47
+ * Z3プロセスを実行
48
+ */
49
+ private runZ3;
50
+ /**
51
+ * モデルを取得(sat の場合のみ有効)
52
+ */
53
+ getModel(smtLib2: string): Promise<string | null>;
54
+ /**
55
+ * 証明を取得(unsat の場合のみ有効)
56
+ */
57
+ getProof(smtLib2: string): Promise<string | null>;
58
+ /**
59
+ * リソースを解放
60
+ */
61
+ dispose(): Promise<void>;
62
+ /**
63
+ * クライアントが利用可能かどうか
64
+ */
65
+ isAvailable(): boolean;
66
+ }
67
+ //# sourceMappingURL=Z3ProcessFallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Z3ProcessFallback.d.ts","sourceRoot":"","sources":["../../src/z3/Z3ProcessFallback.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAkB,YAAW,QAAQ;IAChD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;gBAExB,OAAO,GAAE,SAAc;IAQnC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCjC;;OAEG;YACW,gBAAgB;IAyB9B;;OAEG;IACH,OAAO,CAAC,UAAU;IA+BlB;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiDlD;;OAEG;IACH,OAAO,CAAC,KAAK;IAsCb;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmCvD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiCvD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;OAEG;IACH,WAAW,IAAI,OAAO;CAGvB"}
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Z3 Process Fallback Client
3
+ *
4
+ * ネイティブZ3コマンドラインツールを使用するフォールバッククライアント
5
+ *
6
+ * @implements {Z3Client}
7
+ */
8
+ import { spawn } from 'child_process';
9
+ import { writeFile, unlink, mkdtemp } from 'fs/promises';
10
+ import { tmpdir } from 'os';
11
+ import { join } from 'path';
12
+ /**
13
+ * Z3プロセスフォールバッククライアント
14
+ *
15
+ * z3-wasmが利用できない場合のフォールバックとして、
16
+ * システムにインストールされたZ3コマンドラインツールを使用します。
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const client = new Z3ProcessFallback({ timeout: 10000 });
21
+ * await client.initialize();
22
+ * if (client.isAvailable()) {
23
+ * const result = await client.checkSat('(declare-const x Int) (assert (> x 0))');
24
+ * }
25
+ * ```
26
+ */
27
+ export class Z3ProcessFallback {
28
+ z3Path = null;
29
+ initialized = false;
30
+ available = false;
31
+ options;
32
+ constructor(options = {}) {
33
+ this.options = {
34
+ timeout: options.timeout ?? 30000,
35
+ logLevel: options.logLevel ?? 'silent',
36
+ memoryLimit: options.memoryLimit ?? 512,
37
+ };
38
+ }
39
+ /**
40
+ * Z3コマンドラインツールの存在を確認
41
+ */
42
+ async initialize() {
43
+ if (this.initialized) {
44
+ return;
45
+ }
46
+ try {
47
+ // z3コマンドの存在確認
48
+ const z3Path = await this.findZ3Executable();
49
+ if (z3Path) {
50
+ this.z3Path = z3Path;
51
+ this.available = true;
52
+ if (this.options.logLevel !== 'silent') {
53
+ console.log(`[Z3ProcessFallback] Found Z3 at: ${z3Path}`);
54
+ }
55
+ }
56
+ else {
57
+ this.available = false;
58
+ if (this.options.logLevel !== 'silent') {
59
+ console.warn('[Z3ProcessFallback] Z3 executable not found in PATH');
60
+ }
61
+ }
62
+ this.initialized = true;
63
+ }
64
+ catch (error) {
65
+ this.available = false;
66
+ this.initialized = true;
67
+ if (this.options.logLevel !== 'silent') {
68
+ console.error('[Z3ProcessFallback] Initialization error:', error);
69
+ }
70
+ }
71
+ }
72
+ /**
73
+ * Z3実行ファイルを検索
74
+ */
75
+ async findZ3Executable() {
76
+ const candidates = ['z3', 'z3.exe'];
77
+ for (const candidate of candidates) {
78
+ try {
79
+ const result = await this.runCommand('which', [candidate]);
80
+ if (result.exitCode === 0 && result.stdout.trim()) {
81
+ return result.stdout.trim();
82
+ }
83
+ }
84
+ catch {
85
+ // Windows では where を使用
86
+ try {
87
+ const result = await this.runCommand('where', [candidate]);
88
+ if (result.exitCode === 0 && result.stdout.trim()) {
89
+ return result.stdout.trim().split('\n')[0].trim();
90
+ }
91
+ }
92
+ catch {
93
+ // continue
94
+ }
95
+ }
96
+ }
97
+ return null;
98
+ }
99
+ /**
100
+ * コマンドを実行
101
+ */
102
+ runCommand(command, args) {
103
+ return new Promise((resolve, reject) => {
104
+ const proc = spawn(command, args, {
105
+ timeout: 5000,
106
+ shell: true,
107
+ });
108
+ let stdout = '';
109
+ let stderr = '';
110
+ proc.stdout?.on('data', (data) => {
111
+ stdout += data.toString();
112
+ });
113
+ proc.stderr?.on('data', (data) => {
114
+ stderr += data.toString();
115
+ });
116
+ proc.on('close', (code) => {
117
+ resolve({ stdout, stderr, exitCode: code ?? 1 });
118
+ });
119
+ proc.on('error', (error) => {
120
+ reject(error);
121
+ });
122
+ });
123
+ }
124
+ /**
125
+ * SMT-LIB2形式のアサーションの充足可能性をチェック
126
+ */
127
+ async checkSat(smtLib2) {
128
+ if (!this.initialized) {
129
+ throw new Error('Z3ProcessFallback not initialized. Call initialize() first.');
130
+ }
131
+ if (!this.available || !this.z3Path) {
132
+ return 'error';
133
+ }
134
+ let tempDir = null;
135
+ let tempFile = null;
136
+ try {
137
+ // 一時ファイルにSMT-LIB2スクリプトを書き込む
138
+ tempDir = await mkdtemp(join(tmpdir(), 'z3-'));
139
+ tempFile = join(tempDir, 'input.smt2');
140
+ const fullScript = `${smtLib2}\n(check-sat)\n(exit)`;
141
+ await writeFile(tempFile, fullScript, 'utf-8');
142
+ // Z3を実行
143
+ const result = await this.runZ3(tempFile);
144
+ const output = result.stdout.toLowerCase();
145
+ if (output.includes('unsat')) {
146
+ return 'unsat';
147
+ }
148
+ else if (output.includes('sat')) {
149
+ return 'sat';
150
+ }
151
+ else if (output.includes('unknown')) {
152
+ return 'unknown';
153
+ }
154
+ return 'unknown';
155
+ }
156
+ catch (error) {
157
+ if (this.options.logLevel !== 'silent') {
158
+ console.error('[Z3ProcessFallback] checkSat error:', error);
159
+ }
160
+ return 'error';
161
+ }
162
+ finally {
163
+ // 一時ファイルを削除
164
+ if (tempFile) {
165
+ await unlink(tempFile).catch(() => { });
166
+ }
167
+ if (tempDir) {
168
+ await unlink(tempDir).catch(() => { });
169
+ }
170
+ }
171
+ }
172
+ /**
173
+ * Z3プロセスを実行
174
+ */
175
+ runZ3(inputFile) {
176
+ return new Promise((resolve, reject) => {
177
+ if (!this.z3Path) {
178
+ reject(new Error('Z3 path not set'));
179
+ return;
180
+ }
181
+ const args = [
182
+ `-T:${Math.floor(this.options.timeout / 1000)}`,
183
+ `-memory:${this.options.memoryLimit}`,
184
+ inputFile,
185
+ ];
186
+ const proc = spawn(this.z3Path, args, {
187
+ timeout: this.options.timeout,
188
+ });
189
+ let stdout = '';
190
+ let stderr = '';
191
+ proc.stdout?.on('data', (data) => {
192
+ stdout += data.toString();
193
+ });
194
+ proc.stderr?.on('data', (data) => {
195
+ stderr += data.toString();
196
+ });
197
+ proc.on('close', (code) => {
198
+ resolve({ stdout, stderr, exitCode: code ?? 1 });
199
+ });
200
+ proc.on('error', (error) => {
201
+ reject(error);
202
+ });
203
+ });
204
+ }
205
+ /**
206
+ * モデルを取得(sat の場合のみ有効)
207
+ */
208
+ async getModel(smtLib2) {
209
+ if (!this.available || !this.z3Path) {
210
+ return null;
211
+ }
212
+ let tempDir = null;
213
+ let tempFile = null;
214
+ try {
215
+ tempDir = await mkdtemp(join(tmpdir(), 'z3-'));
216
+ tempFile = join(tempDir, 'input.smt2');
217
+ const fullScript = `${smtLib2}\n(check-sat)\n(get-model)\n(exit)`;
218
+ await writeFile(tempFile, fullScript, 'utf-8');
219
+ const result = await this.runZ3(tempFile);
220
+ if (!result.stdout.toLowerCase().includes('sat')) {
221
+ return null;
222
+ }
223
+ // モデル部分を抽出
224
+ const modelMatch = result.stdout.match(/\(model[\s\S]*\)/);
225
+ return modelMatch ? modelMatch[0] : result.stdout;
226
+ }
227
+ catch (error) {
228
+ if (this.options.logLevel !== 'silent') {
229
+ console.error('[Z3ProcessFallback] getModel error:', error);
230
+ }
231
+ return null;
232
+ }
233
+ finally {
234
+ if (tempFile)
235
+ await unlink(tempFile).catch(() => { });
236
+ if (tempDir)
237
+ await unlink(tempDir).catch(() => { });
238
+ }
239
+ }
240
+ /**
241
+ * 証明を取得(unsat の場合のみ有効)
242
+ */
243
+ async getProof(smtLib2) {
244
+ if (!this.available || !this.z3Path) {
245
+ return null;
246
+ }
247
+ let tempDir = null;
248
+ let tempFile = null;
249
+ try {
250
+ tempDir = await mkdtemp(join(tmpdir(), 'z3-'));
251
+ tempFile = join(tempDir, 'input.smt2');
252
+ const fullScript = `(set-option :produce-proofs true)\n${smtLib2}\n(check-sat)\n(get-proof)\n(exit)`;
253
+ await writeFile(tempFile, fullScript, 'utf-8');
254
+ const result = await this.runZ3(tempFile);
255
+ if (!result.stdout.toLowerCase().includes('unsat')) {
256
+ return null;
257
+ }
258
+ return result.stdout;
259
+ }
260
+ catch (error) {
261
+ if (this.options.logLevel !== 'silent') {
262
+ console.error('[Z3ProcessFallback] getProof error:', error);
263
+ }
264
+ return null;
265
+ }
266
+ finally {
267
+ if (tempFile)
268
+ await unlink(tempFile).catch(() => { });
269
+ if (tempDir)
270
+ await unlink(tempDir).catch(() => { });
271
+ }
272
+ }
273
+ /**
274
+ * リソースを解放
275
+ */
276
+ async dispose() {
277
+ this.z3Path = null;
278
+ this.available = false;
279
+ }
280
+ /**
281
+ * クライアントが利用可能かどうか
282
+ */
283
+ isAvailable() {
284
+ return this.available && this.z3Path !== null;
285
+ }
286
+ }
287
+ //# sourceMappingURL=Z3ProcessFallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Z3ProcessFallback.js","sourceRoot":"","sources":["../../src/z3/Z3ProcessFallback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Z3 WebAssembly Client
3
+ *
4
+ * z3-wasmを使用したブラウザ/Node.js両対応のZ3クライアント
5
+ *
6
+ * @implements {Z3Client}
7
+ */
8
+ import type { Z3Client, Z3Result, Z3Options } from './types.js';
9
+ /**
10
+ * Z3 WebAssemblyクライアント
11
+ *
12
+ * z3-wasmパッケージを使用してZ3ソルバーをWebAssemblyで実行します。
13
+ * ネイティブZ3が利用できない環境でのフォールバックとして機能します。
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const client = new Z3WasmClient({ timeout: 5000 });
18
+ * await client.initialize();
19
+ * const result = await client.checkSat('(declare-const x Int) (assert (> x 0))');
20
+ * console.log(result); // 'sat'
21
+ * ```
22
+ */
23
+ export declare class Z3WasmClient implements Z3Client {
24
+ private z3Instance;
25
+ private initialized;
26
+ private readonly options;
27
+ constructor(options?: Z3Options);
28
+ /**
29
+ * Z3 WebAssemblyモジュールを初期化
30
+ *
31
+ * @throws {Error} z3-wasmモジュールのロードに失敗した場合
32
+ */
33
+ initialize(): Promise<void>;
34
+ /**
35
+ * SMT-LIB2形式のアサーションの充足可能性をチェック
36
+ */
37
+ checkSat(smtLib2: string): Promise<Z3Result>;
38
+ /**
39
+ * モデルを取得(sat の場合のみ有効)
40
+ */
41
+ getModel(smtLib2: string): Promise<string | null>;
42
+ /**
43
+ * 証明を取得(unsat の場合のみ有効)
44
+ */
45
+ getProof(smtLib2: string): Promise<string | null>;
46
+ /**
47
+ * リソースを解放
48
+ */
49
+ dispose(): Promise<void>;
50
+ /**
51
+ * クライアントが利用可能かどうか
52
+ */
53
+ isAvailable(): boolean;
54
+ }
55
+ //# sourceMappingURL=Z3WasmClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Z3WasmClient.d.ts","sourceRoot":"","sources":["../../src/z3/Z3WasmClient.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAa,YAAW,QAAQ;IAC3C,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;gBAExB,OAAO,GAAE,SAAc;IAQnC;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BjC;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiDlD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA6BvD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA6BvD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;OAEG;IACH,WAAW,IAAI,OAAO;CAGvB"}