2011-08-02 21 views
4

私は再帰関数を含むa Z3 tutorialの例のいくつかを試しています。私は次の例を試しました。Z3は再帰関数を含む数式の充足可能性をチェックできますか?

  1. Fibonacci(セクション8.3)
  2. IsNat(セクション8.3)
  3. Inductive(セクション10.5)

Z3タイムアウト上記実施例の全てに。しかし、このチュートリアルでは、Inductiveだけが終了していないことを暗示しているようです。

Z3は、再帰関数を含む数式の充足可能性をチェックできますか、帰納的な事実を処理できませんか?

答えて

9

Z3チュートリアルのこれらの例は、Z3の背後にある技術の限界を説明するものです。

  1. Z3によって生成モデルは、各解釈機能シンボルの解釈を割り当てる:

    Z3は、2つの理由のために、これらの実施例に失敗します。モデルは、機能的なプログラムとして見ることができます。現在のバージョンは再帰的な定義を生成しません。最初の例は充足可能ですが、再帰的定義をサポートしていないため、Z3はfibの解釈を生成できません。 Z3をこの方向に拡張する予定です。

  2. Z3は誘導によるプルーフをサポートしていません。実施例2および3は満足できるものではないが、誘発による証明を支持しないためZ3は失敗する。 基本的なサポートを追加する予定もあります。

これらの項目は私のTODOリストにありますが、今年は作業を開始しません。

+0

お返事ありがとうございました。再帰関数をサポートするSMTソルバについて知っていますか? – reprogrammer

+0

SMTソルバは、基本的な合同閉包アルゴリズムがあまりにも多くの値に対して式をインスタンス化するため、再帰関数のサポートに本質的に制限がありますか? – reprogrammer

+0

Z3の固定小数点拡張(http://research.microsoft.com/en-us/um/redmond/projects/z3/fixedpoints-index.html)は、再帰関数の処理におけるZ3の制限に対処することを目的としていますか? – reprogrammer

関連する問題