我想知道是否可以在 Z3 中限定一个普遍量化变量的值范围。
例如,假设我有一个名为“time”的 Real 类型变量,它用于对系统中的时间进行建模。假设我有一个断言,它说某个一元函数“func1”的值应始终在 1 到 100 之间。该函数将输入作为时间变量。在 Z3 中表示,我将属性编码如下:
ForAll(time, And(func1(time) >= 1, func1(time) <= 100))
请注意,我明确需要对时间变量进行普遍量化,因为如果我注入以下类型的属性,我希望 Z3 能够让我感到不安:
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
它仅对时间值有效。