Z3 で普遍的に量化された変数の値の範囲を制限できるかどうかを知りたいです。
たとえば、システム内の時間をモデル化するために使用される「time」と呼ばれる Real 型の変数があるとします。ある単項関数「func1」の値は常に 1 から 100 の間でなければならないというアサーションがあるとします。関数は入力を時間変数とします。Z3 で表現すると、次のようにプロパティをエンコードしました。
ForAll(time, And(func1(time) >= 1, func1(time) <= 100))
次のタイプのプロパティを注入すると、Z3 で unsat が返されるようにするため、時間変数を普遍的に定量化する必要があることに注意してください。
Exists(time, func1(time) == 101)
Z3 に関する私の理解では、すべての定数は数学的な (理論上の) 実装であり、コンピューターによる (実用的な) 実装ではありません。時間を使用してシステムの時間をモデル化し、システムの制約に従って x 時間以上実行できないと仮定します。これを使用して、時間の値が 0 から x*60'*60 の間で最大値を与えることができます。秒単位の実行時間。次のアサーションを使用して、時間の許容値をアサートできることを知っています。
And(time >= 0, time <= x*60*60)
しかし、それは1で与えられた普遍的な数量化に影響を与えますか?
したがって、これは、プロパティ 2 が注入され、指定した時間の値に対して が設定されている場合、 は時間の値に対してのみ有効であるため、x*60*60 + 1
設定を解除すべきではないという状況につながるはずです。ForAll