我可以在z3中设置布尔变量的优先级吗?

我可以在z3中设置布尔变量的优先级吗?,z3,Z3,由于这个问题有点难以描述,我将用一个小例子来描述我的问题。 假设有一个命题公式集,其元素是布尔变量a、b和c。 当使用z3获得该公式集的真值赋值时,是否存在设置变量优先级的方法?我的意思是,如果优先级是a>b>c,那么在搜索过程中,z3首先假定a为真,如果a不可能为真,则假定b为真,依此类推。换句话说,如果z3给出了一个真值赋值:在上述优先级下不是a,b,c,这意味着a不可能是真的,因为a的优先级比b高。希望我能把问题描述清楚 在当前版本(v4.3.1)中,没有简单的方法可以做到这一点。我能看到

由于这个问题有点难以描述,我将用一个小例子来描述我的问题。 假设有一个命题公式集,其元素是布尔变量a、b和c。
当使用z3获得该公式集的真值赋值时,是否存在设置变量优先级的方法?我的意思是,如果优先级是a>b>c,那么在搜索过程中,z3首先假定a为真,如果a不可能为真,则假定b为真,依此类推。换句话说,如果z3给出了一个真值赋值:在上述优先级下不是a,b,c,这意味着a不可能是真的,因为a的优先级比b高。希望我能把问题描述清楚

在当前版本(v4.3.1)中,没有简单的方法可以做到这一点。我能看到的唯一方法是破解/修改Z3源代码()。我们同意设置优先级对于某些应用程序来说是一个有用的功能,但也存在一些问题

首先,Z3在解决问题之前应用几个转换(也称为预处理步骤)。创建并消除变量。因此,对于Z3解决的实际问题(应用所有转换后生成的问题),原始问题的案例分割优先级可能没有意义

一个引人注目的例子是只包含位向量的公式。默认情况下,Z3将把这个公式简化为命题逻辑,并调用命题SAT解算器。在这种缩减中,消除了所有位向量变量

Z3是解算器和预处理器的集合。默认情况下,Z3将自动为用户选择解算器。其中一些解算器使用完全不同的算法。因此,所提供的优先级对于正在使用的解算器可能是无用的

如前所述,可以为特定解算器设置相位选择策略。有关更多详细信息,请参见他评论中的帖子。

可能相关: