Z3で普遍化された変数の値の範囲を束縛することが可能かどうかを知りたいと思います。普遍的な定量化変数の境界付け
たとえば、システムの時間をモデル化するために使用される「time」というタイプの変数があるとします。 私は単項関数 "func1"の値は常に1から100の間でなければならないという主張を持っているとしましょう。関数は入力に時間変数をとります。 Z3で表すと、私は次のようにプロパティをコード化している:
ForAll(time, And(func1(time) >= 1, func1(time) <= 100))
私は明示的に私はZ3は私が注入場合UNSAT私を与える行きたいので、普遍的に定量化するために時間変数が必要であることに注意してください次のタイプのプロパティ:
-
限り私の理解がZ3のために行くように、すべての定数は、数学的(理論値)といないコンピュータ(実用的)イムを持っていますつまり、それらの値は束縛されません(残念ながら、私は現時点でこれを読んだリソースを指摘できません)。私のシステムで時間をモデル化し、システムの制約に従って、x時間以上実行することはできないと仮定します。これは、時間の値が0とx * 60 '* 60の間で最大である実行時間(秒単位)。私は、次のアサーションとの時間のために許可された値を主張することができることを知っている:
And(time >= 0, time <= x*60*60)
が、それは1で与えられた普遍的定量化に影響を与えるのだろうか?
したがって、これはプロパティ2を注入し、時間の値のために、私はx*60*60 + 1
を指定した場合ForAll
だけ時間の値に対して有効であることから、それは設定を解除すべきではない状況につながるはずです。