2

次の設定で、MacOS 64 ビットで Scala^Z3 を使用しようとしています。

res0: 文字列 = Z3 4.0 (ビルド 0、リビジョン 0)、ScalaZ3 3.2.c (開発中)

ここで、ScalaZ3 のメイン ページからフィボナッチの例を実行しようとすると、次の出力が表示され、実行が停止します。

fib0 ::: (= (fib!0 0) 0)
fib1 ::: (= (fib!0 1) 1)
fibN ::: (forall (k!0 Int)
  (implies (> k!0 1) (= (fib!0 k!0) (+ (fib!0 (- k!0 1)) (fib!0 (- k!0 2)))))
  :pat {(fib!0 k!0)})
Query ::: (= x (fib!0 1))

私は数時間待っていましたが、それ以上何も起こっていません;)誰か、私が間違っていることについて何か考えがありますか? scala または z3 のバージョンが新しすぎますか? よろしく、フロリアン

4

1 に答える 1

1

(まだ最新バージョンの Z3 で Scala^Z3 をテストする機会がなかったことに注意してください。ここで開発してくれてありがとう。)

あなたが解決しようとしている問題には、全称量指定子が含まれており、充足可能です。Z3 の過去のバージョンは で終了しunknown、暫定的なモデルを要求できます (リンク先のドキュメント ページに示されているように)。新しいバージョンは、 return ではなく数式を反証するために非常に一生懸命に設定されているためunknown、終了しない可能性があります。

うまくいかないクエリを試すことができます。たとえば、試してみてください:

(= (fib 10) (fib 12))

Z3 は、数式が満足できないと結論付けるのに十分な回数、量指定子をインスタンス化できる必要があります。

于 2012-05-31T11:40:08.640 に答える