@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,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Precondition Verifier
|
|
3
|
+
*
|
|
4
|
+
* 事前条件の形式検証を行うクラス
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 事前条件検証器
|
|
8
|
+
*
|
|
9
|
+
* Z3ソルバーを使用して事前条件の充足可能性と妥当性を検証します。
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const z3 = await Z3Adapter.create();
|
|
14
|
+
* const verifier = new PreconditionVerifier(z3);
|
|
15
|
+
*
|
|
16
|
+
* const result = await verifier.verify({
|
|
17
|
+
* condition: { expression: 'amount > 0', format: 'javascript' },
|
|
18
|
+
* variables: [{ name: 'amount', type: 'Int' }],
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* if (result.status === 'valid') {
|
|
22
|
+
* console.log('Precondition is satisfiable');
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export class PreconditionVerifier {
|
|
27
|
+
z3;
|
|
28
|
+
constructor(z3Client) {
|
|
29
|
+
this.z3 = z3Client;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 事前条件を検証
|
|
33
|
+
*
|
|
34
|
+
* @param input - 検証入力
|
|
35
|
+
* @returns 検証結果
|
|
36
|
+
*/
|
|
37
|
+
async verify(input) {
|
|
38
|
+
const startTime = Date.now();
|
|
39
|
+
try {
|
|
40
|
+
// SMT-LIB2スクリプトを生成
|
|
41
|
+
const smtScript = this.buildSmtScript(input);
|
|
42
|
+
if (input.options?.verbose) {
|
|
43
|
+
console.log('[PreconditionVerifier] SMT Script:', smtScript);
|
|
44
|
+
}
|
|
45
|
+
// Z3で検証
|
|
46
|
+
const result = await this.z3.checkSat(smtScript);
|
|
47
|
+
const duration = Date.now() - startTime;
|
|
48
|
+
return this.buildResult(input.condition, result, duration, input, smtScript);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const duration = Date.now() - startTime;
|
|
52
|
+
return {
|
|
53
|
+
status: 'error',
|
|
54
|
+
condition: input.condition,
|
|
55
|
+
duration,
|
|
56
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 事前条件の充足可能性をチェック
|
|
62
|
+
*
|
|
63
|
+
* 事前条件を満たす入力が存在するかを確認
|
|
64
|
+
*/
|
|
65
|
+
async checkSatisfiability(input) {
|
|
66
|
+
const result = await this.verify(input);
|
|
67
|
+
return result.status === 'valid';
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 事前条件の妥当性をチェック
|
|
71
|
+
*
|
|
72
|
+
* 事前条件が常に真であるかを確認(否定がunsatなら常に真)
|
|
73
|
+
*/
|
|
74
|
+
async checkValidity(input) {
|
|
75
|
+
try {
|
|
76
|
+
// 否定を追加したスクリプトを生成
|
|
77
|
+
const smtScript = this.buildValidityScript(input);
|
|
78
|
+
if (input.options?.verbose) {
|
|
79
|
+
console.log('[PreconditionVerifier] Validity Script:', smtScript);
|
|
80
|
+
}
|
|
81
|
+
const result = await this.z3.checkSat(smtScript);
|
|
82
|
+
// unsatなら妥当(常に真)
|
|
83
|
+
return result === 'unsat';
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* SMT-LIB2スクリプトを構築
|
|
91
|
+
*/
|
|
92
|
+
buildSmtScript(input) {
|
|
93
|
+
const lines = [];
|
|
94
|
+
// ロジック設定
|
|
95
|
+
lines.push('(set-logic ALL)');
|
|
96
|
+
// 変数宣言
|
|
97
|
+
for (const variable of input.variables) {
|
|
98
|
+
lines.push(this.declareVariable(variable));
|
|
99
|
+
}
|
|
100
|
+
// コンテキスト条件
|
|
101
|
+
if (input.context) {
|
|
102
|
+
for (const ctx of input.context) {
|
|
103
|
+
const smtExpr = this.conditionToSmt(ctx);
|
|
104
|
+
lines.push(`(assert ${smtExpr})`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// 事前条件
|
|
108
|
+
const precondSmt = this.conditionToSmt(input.condition);
|
|
109
|
+
lines.push(`(assert ${precondSmt})`);
|
|
110
|
+
return lines.join('\n');
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 妥当性検証用のSMT-LIB2スクリプトを構築
|
|
114
|
+
*/
|
|
115
|
+
buildValidityScript(input) {
|
|
116
|
+
const lines = [];
|
|
117
|
+
lines.push('(set-logic ALL)');
|
|
118
|
+
for (const variable of input.variables) {
|
|
119
|
+
lines.push(this.declareVariable(variable));
|
|
120
|
+
}
|
|
121
|
+
if (input.context) {
|
|
122
|
+
for (const ctx of input.context) {
|
|
123
|
+
const smtExpr = this.conditionToSmt(ctx);
|
|
124
|
+
lines.push(`(assert ${smtExpr})`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// 事前条件の否定をアサート
|
|
128
|
+
const precondSmt = this.conditionToSmt(input.condition);
|
|
129
|
+
lines.push(`(assert (not ${precondSmt}))`);
|
|
130
|
+
return lines.join('\n');
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 変数をSMT-LIB2形式で宣言
|
|
134
|
+
*/
|
|
135
|
+
declareVariable(variable) {
|
|
136
|
+
const smtType = this.typeToSmt(variable);
|
|
137
|
+
return `(declare-const ${variable.name} ${smtType})`;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* 型をSMT-LIB2形式に変換
|
|
141
|
+
*/
|
|
142
|
+
typeToSmt(variable) {
|
|
143
|
+
switch (variable.type) {
|
|
144
|
+
case 'Int':
|
|
145
|
+
return 'Int';
|
|
146
|
+
case 'Real':
|
|
147
|
+
return 'Real';
|
|
148
|
+
case 'Bool':
|
|
149
|
+
return 'Bool';
|
|
150
|
+
case 'String':
|
|
151
|
+
return 'String';
|
|
152
|
+
case 'Array':
|
|
153
|
+
const elemType = variable.elementType ? this.typeToSmt({ name: '', type: variable.elementType }) : 'Int';
|
|
154
|
+
return `(Array Int ${elemType})`;
|
|
155
|
+
case 'BitVec':
|
|
156
|
+
return `(_ BitVec ${variable.bitWidth ?? 32})`;
|
|
157
|
+
default:
|
|
158
|
+
return 'Int';
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 条件式をSMT-LIB2形式に変換
|
|
163
|
+
*/
|
|
164
|
+
conditionToSmt(condition) {
|
|
165
|
+
if (condition.format === 'smt') {
|
|
166
|
+
return condition.expression;
|
|
167
|
+
}
|
|
168
|
+
// JavaScript/自然言語からSMTへの変換
|
|
169
|
+
return this.convertToSmt(condition.expression);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* JavaScript式をSMT-LIB2に変換
|
|
173
|
+
*/
|
|
174
|
+
convertToSmt(expr) {
|
|
175
|
+
let smt = expr;
|
|
176
|
+
// 基本的な演算子変換
|
|
177
|
+
smt = smt.replace(/&&/g, ' and ');
|
|
178
|
+
smt = smt.replace(/\|\|/g, ' or ');
|
|
179
|
+
smt = smt.replace(/!/g, ' not ');
|
|
180
|
+
smt = smt.replace(/==/g, '=');
|
|
181
|
+
smt = smt.replace(/!=/g, ' distinct ');
|
|
182
|
+
smt = smt.replace(/>=/g, '>=');
|
|
183
|
+
smt = smt.replace(/<=/g, '<=');
|
|
184
|
+
// 二項演算をS式に変換
|
|
185
|
+
// 例: a > b → (> a b)
|
|
186
|
+
smt = this.infixToPrefix(smt);
|
|
187
|
+
return smt;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* 中置記法を前置記法(S式)に変換
|
|
191
|
+
*/
|
|
192
|
+
infixToPrefix(expr) {
|
|
193
|
+
const trimmed = expr.trim();
|
|
194
|
+
// 括弧で囲まれている場合は中身を処理
|
|
195
|
+
if (trimmed.startsWith('(') && trimmed.endsWith(')')) {
|
|
196
|
+
// 対応する括弧かチェック
|
|
197
|
+
let depth = 0;
|
|
198
|
+
let isMatching = true;
|
|
199
|
+
for (let i = 0; i < trimmed.length - 1; i++) {
|
|
200
|
+
if (trimmed[i] === '(')
|
|
201
|
+
depth++;
|
|
202
|
+
if (trimmed[i] === ')')
|
|
203
|
+
depth--;
|
|
204
|
+
if (depth === 0) {
|
|
205
|
+
isMatching = false;
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (isMatching) {
|
|
210
|
+
return trimmed; // すでにS式
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// and/or/not の処理
|
|
214
|
+
const andMatch = trimmed.match(/^(.+?)\s+and\s+(.+)$/i);
|
|
215
|
+
if (andMatch) {
|
|
216
|
+
return `(and ${this.infixToPrefix(andMatch[1])} ${this.infixToPrefix(andMatch[2])})`;
|
|
217
|
+
}
|
|
218
|
+
const orMatch = trimmed.match(/^(.+?)\s+or\s+(.+)$/i);
|
|
219
|
+
if (orMatch) {
|
|
220
|
+
return `(or ${this.infixToPrefix(orMatch[1])} ${this.infixToPrefix(orMatch[2])})`;
|
|
221
|
+
}
|
|
222
|
+
const notMatch = trimmed.match(/^\s*not\s+(.+)$/i);
|
|
223
|
+
if (notMatch) {
|
|
224
|
+
return `(not ${this.infixToPrefix(notMatch[1])})`;
|
|
225
|
+
}
|
|
226
|
+
// 比較演算子の処理
|
|
227
|
+
const operators = ['>=', '<=', '>', '<', '=', 'distinct'];
|
|
228
|
+
for (const op of operators) {
|
|
229
|
+
const parts = trimmed.split(new RegExp(`\\s*${op.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\s*`));
|
|
230
|
+
if (parts.length === 2) {
|
|
231
|
+
return `(${op} ${parts[0].trim()} ${parts[1].trim()})`;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// 算術演算子の処理
|
|
235
|
+
const arithmeticOps = ['+', '-', '*', '/'];
|
|
236
|
+
for (const op of arithmeticOps) {
|
|
237
|
+
const parts = trimmed.split(new RegExp(`\\s*\\${op}\\s*`));
|
|
238
|
+
if (parts.length === 2) {
|
|
239
|
+
return `(${op} ${this.infixToPrefix(parts[0])} ${this.infixToPrefix(parts[1])})`;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return trimmed;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* 検証結果を構築
|
|
246
|
+
*/
|
|
247
|
+
buildResult(condition, z3Result, duration, input, smtScript) {
|
|
248
|
+
const status = this.mapZ3ResultToStatus(z3Result);
|
|
249
|
+
const result = {
|
|
250
|
+
status,
|
|
251
|
+
condition,
|
|
252
|
+
duration,
|
|
253
|
+
details: {
|
|
254
|
+
smtScript,
|
|
255
|
+
z3Result,
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
// 反例の取得(invalidの場合)
|
|
259
|
+
if (status === 'invalid' && input.options?.generateCounterexample) {
|
|
260
|
+
// Note: 実際の反例取得はgetModelを使用
|
|
261
|
+
result.counterexample = {
|
|
262
|
+
assignments: {},
|
|
263
|
+
explanation: 'Counterexample generation requires sat result',
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Z3結果を検証ステータスにマッピング
|
|
270
|
+
*/
|
|
271
|
+
mapZ3ResultToStatus(z3Result) {
|
|
272
|
+
switch (z3Result) {
|
|
273
|
+
case 'sat':
|
|
274
|
+
return 'valid'; // 事前条件は充足可能(妥当)
|
|
275
|
+
case 'unsat':
|
|
276
|
+
return 'invalid'; // 事前条件は充足不可能
|
|
277
|
+
case 'unknown':
|
|
278
|
+
return 'unknown';
|
|
279
|
+
case 'error':
|
|
280
|
+
return 'error';
|
|
281
|
+
default:
|
|
282
|
+
return 'unknown';
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=PreconditionVerifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreconditionVerifier.js","sourceRoot":"","sources":["../../src/verifiers/PreconditionVerifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verifiers Module Exports
|
|
3
|
+
*/
|
|
4
|
+
export { PreconditionVerifier } from './PreconditionVerifier.js';
|
|
5
|
+
export { PostconditionVerifier } from './PostconditionVerifier.js';
|
|
6
|
+
export type { VariableType, VariableDeclaration, Condition, VerificationOptions, VerificationStatus, Counterexample, VerificationResult, PreconditionInput, PostconditionInput, } from './types.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verifiers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verifiers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verifier Types
|
|
3
|
+
*
|
|
4
|
+
* 事前条件/事後条件検証の型定義
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 変数の型宣言
|
|
8
|
+
*/
|
|
9
|
+
export type VariableType = 'Int' | 'Real' | 'Bool' | 'String' | 'Array' | 'BitVec';
|
|
10
|
+
/**
|
|
11
|
+
* 変数宣言
|
|
12
|
+
*/
|
|
13
|
+
export interface VariableDeclaration {
|
|
14
|
+
/** 変数名 */
|
|
15
|
+
name: string;
|
|
16
|
+
/** 変数の型 */
|
|
17
|
+
type: VariableType;
|
|
18
|
+
/** 配列の場合の要素型 */
|
|
19
|
+
elementType?: VariableType;
|
|
20
|
+
/** BitVecの場合のビット幅 */
|
|
21
|
+
bitWidth?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 条件式
|
|
25
|
+
*/
|
|
26
|
+
export interface Condition {
|
|
27
|
+
/** 条件式(自然言語またはSMT-LIB2) */
|
|
28
|
+
expression: string;
|
|
29
|
+
/** 条件式の形式 */
|
|
30
|
+
format: 'natural' | 'smt' | 'javascript';
|
|
31
|
+
/** 条件の説明(オプション) */
|
|
32
|
+
description?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 検証オプション
|
|
36
|
+
*/
|
|
37
|
+
export interface VerificationOptions {
|
|
38
|
+
/** タイムアウト(ミリ秒) */
|
|
39
|
+
timeout?: number;
|
|
40
|
+
/** 反例を生成するか */
|
|
41
|
+
generateCounterexample?: boolean;
|
|
42
|
+
/** 証明を生成するか */
|
|
43
|
+
generateProof?: boolean;
|
|
44
|
+
/** 詳細ログを出力するか */
|
|
45
|
+
verbose?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 検証結果のステータス
|
|
49
|
+
*/
|
|
50
|
+
export type VerificationStatus = 'valid' | 'invalid' | 'unknown' | 'error';
|
|
51
|
+
/**
|
|
52
|
+
* 反例
|
|
53
|
+
*/
|
|
54
|
+
export interface Counterexample {
|
|
55
|
+
/** 変数の値の割り当て */
|
|
56
|
+
assignments: Record<string, unknown>;
|
|
57
|
+
/** 説明 */
|
|
58
|
+
explanation?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 検証結果
|
|
62
|
+
*/
|
|
63
|
+
export interface VerificationResult {
|
|
64
|
+
/** 検証ステータス */
|
|
65
|
+
status: VerificationStatus;
|
|
66
|
+
/** 検証対象の条件 */
|
|
67
|
+
condition: Condition;
|
|
68
|
+
/** 検証にかかった時間(ミリ秒) */
|
|
69
|
+
duration: number;
|
|
70
|
+
/** 反例(invalidの場合) */
|
|
71
|
+
counterexample?: Counterexample;
|
|
72
|
+
/** 証明(validの場合) */
|
|
73
|
+
proof?: string;
|
|
74
|
+
/** エラーメッセージ(errorの場合) */
|
|
75
|
+
errorMessage?: string;
|
|
76
|
+
/** 詳細情報 */
|
|
77
|
+
details?: Record<string, unknown>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 事前条件検証入力
|
|
81
|
+
*/
|
|
82
|
+
export interface PreconditionInput {
|
|
83
|
+
/** 検証対象の事前条件 */
|
|
84
|
+
condition: Condition;
|
|
85
|
+
/** 変数宣言 */
|
|
86
|
+
variables: VariableDeclaration[];
|
|
87
|
+
/** 追加のコンテキスト条件 */
|
|
88
|
+
context?: Condition[];
|
|
89
|
+
/** 検証オプション */
|
|
90
|
+
options?: VerificationOptions;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 事後条件検証入力
|
|
94
|
+
*/
|
|
95
|
+
export interface PostconditionInput {
|
|
96
|
+
/** 事前条件 */
|
|
97
|
+
precondition: Condition;
|
|
98
|
+
/** 検証対象の事後条件 */
|
|
99
|
+
postcondition: Condition;
|
|
100
|
+
/** 変数宣言(事前状態) */
|
|
101
|
+
preVariables: VariableDeclaration[];
|
|
102
|
+
/** 変数宣言(事後状態) */
|
|
103
|
+
postVariables: VariableDeclaration[];
|
|
104
|
+
/** 遷移関係(事前→事後の変換) */
|
|
105
|
+
transition?: string;
|
|
106
|
+
/** 検証オプション */
|
|
107
|
+
options?: VerificationOptions;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/verifiers/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,gBAAgB;IAChB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa;IACb,MAAM,EAAE,SAAS,GAAG,KAAK,GAAG,YAAY,CAAC;IACzC,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,eAAe;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gBAAgB;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS;IACT,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc;IACd,MAAM,EAAE,kBAAkB,CAAC;IAC3B,cAAc;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW;IACX,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,kBAAkB;IAClB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,cAAc;IACd,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW;IACX,YAAY,EAAE,SAAS,CAAC;IACxB,gBAAgB;IAChB,aAAa,EAAE,SAAS,CAAC;IACzB,iBAAiB;IACjB,YAAY,EAAE,mBAAmB,EAAE,CAAC;IACpC,iBAAiB;IACjB,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/verifiers/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Z3 Adapter
|
|
3
|
+
*
|
|
4
|
+
* Z3WasmClient と Z3ProcessFallback を統合するアダプタークラス
|
|
5
|
+
* 自動フォールバック機能を提供
|
|
6
|
+
*/
|
|
7
|
+
import type { Z3Client, Z3Result, Z3Options } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Z3Adapterオプション
|
|
10
|
+
*/
|
|
11
|
+
export interface Z3AdapterOptions extends Z3Options {
|
|
12
|
+
/** WebAssemblyを優先するかどうか(デフォルト: true) */
|
|
13
|
+
preferWasm?: boolean;
|
|
14
|
+
/** フォールバックを有効にするか(デフォルト: true) */
|
|
15
|
+
enableFallback?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Z3アダプター
|
|
19
|
+
*
|
|
20
|
+
* Z3WasmClientとZ3ProcessFallbackを統合し、
|
|
21
|
+
* 環境に応じて最適なクライアントを自動選択します。
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // ファクトリーメソッドで作成(推奨)
|
|
26
|
+
* const z3 = await Z3Adapter.create();
|
|
27
|
+
* const result = await z3.checkSat('(declare-const x Int) (assert (> x 0))');
|
|
28
|
+
*
|
|
29
|
+
* // オプション指定
|
|
30
|
+
* const z3 = await Z3Adapter.create({
|
|
31
|
+
* timeout: 10000,
|
|
32
|
+
* preferWasm: true,
|
|
33
|
+
* enableFallback: true,
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare class Z3Adapter implements Z3Client {
|
|
38
|
+
private primaryClient;
|
|
39
|
+
private fallbackClient;
|
|
40
|
+
private activeClient;
|
|
41
|
+
private initialized;
|
|
42
|
+
private readonly options;
|
|
43
|
+
constructor(options?: Z3AdapterOptions);
|
|
44
|
+
/**
|
|
45
|
+
* Z3Adapterのファクトリーメソッド
|
|
46
|
+
*
|
|
47
|
+
* @param options - アダプターオプション
|
|
48
|
+
* @returns 初期化済みのZ3Adapter
|
|
49
|
+
* @throws {Error} Z3が利用できない場合
|
|
50
|
+
*/
|
|
51
|
+
static create(options?: Z3AdapterOptions): Promise<Z3Adapter>;
|
|
52
|
+
/**
|
|
53
|
+
* Z3クライアントを初期化
|
|
54
|
+
*
|
|
55
|
+
* preferWasm=trueの場合はWasmを優先し、失敗時にProcessFallbackを使用
|
|
56
|
+
* preferWasm=falseの場合はProcessFallbackを優先
|
|
57
|
+
*/
|
|
58
|
+
initialize(): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* SMT-LIB2形式のアサーションの充足可能性をチェック
|
|
61
|
+
*/
|
|
62
|
+
checkSat(smtLib2: string): Promise<Z3Result>;
|
|
63
|
+
/**
|
|
64
|
+
* モデルを取得(sat の場合のみ有効)
|
|
65
|
+
*/
|
|
66
|
+
getModel(smtLib2: string): Promise<string | null>;
|
|
67
|
+
/**
|
|
68
|
+
* 証明を取得(unsat の場合のみ有効)
|
|
69
|
+
*/
|
|
70
|
+
getProof(smtLib2: string): Promise<string | null>;
|
|
71
|
+
/**
|
|
72
|
+
* リソースを解放
|
|
73
|
+
*/
|
|
74
|
+
dispose(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* クライアントが利用可能かどうか
|
|
77
|
+
*/
|
|
78
|
+
isAvailable(): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* 現在使用中のクライアントタイプを取得
|
|
81
|
+
*/
|
|
82
|
+
getActiveClientType(): 'wasm' | 'process' | null;
|
|
83
|
+
/**
|
|
84
|
+
* バックエンドタイプを取得(getActiveClientTypeのエイリアス)
|
|
85
|
+
*/
|
|
86
|
+
getBackendType(): 'wasm' | 'process' | 'none';
|
|
87
|
+
/**
|
|
88
|
+
* 初期化状態を確認
|
|
89
|
+
*/
|
|
90
|
+
private ensureInitialized;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=Z3Adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Z3Adapter.d.ts","sourceRoot":"","sources":["../../src/z3/Z3Adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIhE;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kCAAkC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,SAAU,YAAW,QAAQ;IACxC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;gBAE/B,OAAO,GAAE,gBAAqB;IAU1C;;;;;;OAMG;WACU,MAAM,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC;IAMvE;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA+DjC;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKlD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKvD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKvD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAOhD;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,SAAS,GAAG,MAAM;IAK7C;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAK1B"}
|