@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.
- package/README.md +62 -0
- package/dist/converters/EarsToSmtConverter.d.ts +102 -0
- package/dist/converters/EarsToSmtConverter.d.ts.map +1 -0
- package/dist/converters/EarsToSmtConverter.js +368 -0
- package/dist/converters/EarsToSmtConverter.js.map +1 -0
- package/dist/converters/index.d.ts +6 -0
- package/dist/converters/index.d.ts.map +1 -0
- package/dist/converters/index.js +5 -0
- package/dist/converters/index.js.map +1 -0
- package/dist/converters/types.d.ts +103 -0
- package/dist/converters/types.d.ts.map +1 -0
- package/dist/converters/types.js +7 -0
- package/dist/converters/types.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/formal-verify-tools.d.ts +60 -0
- package/dist/tools/formal-verify-tools.d.ts.map +1 -0
- package/dist/tools/formal-verify-tools.js +371 -0
- package/dist/tools/formal-verify-tools.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +5 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/traceability/ImpactAnalyzer.d.ts +103 -0
- package/dist/traceability/ImpactAnalyzer.d.ts.map +1 -0
- package/dist/traceability/ImpactAnalyzer.js +281 -0
- package/dist/traceability/ImpactAnalyzer.js.map +1 -0
- package/dist/traceability/TraceabilityDB.d.ts +123 -0
- package/dist/traceability/TraceabilityDB.d.ts.map +1 -0
- package/dist/traceability/TraceabilityDB.js +379 -0
- package/dist/traceability/TraceabilityDB.js.map +1 -0
- package/dist/traceability/index.d.ts +8 -0
- package/dist/traceability/index.d.ts.map +1 -0
- package/dist/traceability/index.js +6 -0
- package/dist/traceability/index.js.map +1 -0
- package/dist/traceability/types.d.ts +156 -0
- package/dist/traceability/types.d.ts.map +1 -0
- package/dist/traceability/types.js +7 -0
- package/dist/traceability/types.js.map +1 -0
- package/dist/verifiers/PostconditionVerifier.d.ts +105 -0
- package/dist/verifiers/PostconditionVerifier.d.ts.map +1 -0
- package/dist/verifiers/PostconditionVerifier.js +326 -0
- package/dist/verifiers/PostconditionVerifier.js.map +1 -0
- package/dist/verifiers/PreconditionVerifier.d.ts +87 -0
- package/dist/verifiers/PreconditionVerifier.d.ts.map +1 -0
- package/dist/verifiers/PreconditionVerifier.js +286 -0
- package/dist/verifiers/PreconditionVerifier.js.map +1 -0
- package/dist/verifiers/index.d.ts +7 -0
- package/dist/verifiers/index.d.ts.map +1 -0
- package/dist/verifiers/index.js +6 -0
- package/dist/verifiers/index.js.map +1 -0
- package/dist/verifiers/types.d.ts +109 -0
- package/dist/verifiers/types.d.ts.map +1 -0
- package/dist/verifiers/types.js +7 -0
- package/dist/verifiers/types.js.map +1 -0
- package/dist/z3/Z3Adapter.d.ts +92 -0
- package/dist/z3/Z3Adapter.d.ts.map +1 -0
- package/dist/z3/Z3Adapter.js +189 -0
- package/dist/z3/Z3Adapter.js.map +1 -0
- package/dist/z3/Z3ProcessFallback.d.ts +67 -0
- package/dist/z3/Z3ProcessFallback.d.ts.map +1 -0
- package/dist/z3/Z3ProcessFallback.js +287 -0
- package/dist/z3/Z3ProcessFallback.js.map +1 -0
- package/dist/z3/Z3WasmClient.d.ts +55 -0
- package/dist/z3/Z3WasmClient.d.ts.map +1 -0
- package/dist/z3/Z3WasmClient.js +172 -0
- package/dist/z3/Z3WasmClient.js.map +1 -0
- package/dist/z3/index.d.ts +9 -0
- package/dist/z3/index.d.ts.map +1 -0
- package/dist/z3/index.js +7 -0
- package/dist/z3/index.js.map +1 -0
- package/dist/z3/types.d.ts +82 -0
- package/dist/z3/types.d.ts.map +1 -0
- package/dist/z3/types.js +7 -0
- package/dist/z3/types.js.map +1 -0
- 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":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,GAAkB,IAAI,CAAC;IAC7B,WAAW,GAAG,KAAK,CAAC;IACpB,SAAS,GAAG,KAAK,CAAC;IACT,OAAO,CAAY;IAEpC,YAAY,UAAqB,EAAE;QACjC,IAAI,CAAC,OAAO,GAAG;YACb,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;YACjC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ;YACtC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;SACxC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,cAAc;YACd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE7C,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBAEtB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBAEvB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACvC,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;YAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAExB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB;QAC5B,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEpC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC3D,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;gBACvB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC3D,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;wBAClD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACpD,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,WAAW;gBACb,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,UAAU,CAChB,OAAe,EACf,IAAc;QAEd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;gBAChC,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC/B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC/B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzB,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,QAAQ,GAAkB,IAAI,CAAC;QAEnC,IAAI,CAAC;YACH,4BAA4B;YAC5B,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/C,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAEvC,MAAM,UAAU,GAAG,GAAG,OAAO,uBAAuB,CAAC;YACrD,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAE/C,QAAQ;YACR,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAE1C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,OAAO,OAAO,CAAC;YACjB,CAAC;iBAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;gBAAS,CAAC;YACT,YAAY;YACZ,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAiB;QAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG;gBACX,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAQ,GAAG,IAAI,CAAC,EAAE;gBAChD,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACrC,SAAS;aACV,CAAC;YAEF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;gBACpC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC/B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC/B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzB,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,QAAQ,GAAkB,IAAI,CAAC;QAEnC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/C,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAEvC,MAAM,UAAU,GAAG,GAAG,OAAO,oCAAoC,CAAC;YAClE,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAE1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,WAAW;YACX,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC3D,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,QAAQ;gBAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACrD,IAAI,OAAO;gBAAE,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,QAAQ,GAAkB,IAAI,CAAC;QAEnC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/C,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAEvC,MAAM,UAAU,GAAG,sCAAsC,OAAO,oCAAoC,CAAC;YACrG,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAE1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,QAAQ;gBAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACrD,IAAI,OAAO;gBAAE,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -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"}
|