Z3 (使用默认值检查sat)或类似选项?

Z3 (使用默认值检查sat)或类似选项?,z3,Z3,当Z3在没有指定逻辑的情况下运行,并且发出(check sat)时,中的逻辑用于有条件地调用“最佳”解算器。我想从SMT-LIB2接口访问这个默认策略 我尝试将default_tractic.cpp中的逻辑转换为SMT-LIB,并得出以下结论: (check-sat-using (and-then simplify (cond is-qfbv qfbv (cond is-qflia qflia (cond is-qflra qflra (cond is-qfnra

当Z3在没有指定逻辑的情况下运行,并且发出
(check sat)
时,中的逻辑用于有条件地调用“最佳”解算器。我想从SMT-LIB2接口访问这个默认策略

我尝试将default_tractic.cpp中的逻辑转换为SMT-LIB,并得出以下结论:

(check-sat-using (and-then simplify
    (cond is-qfbv qfbv
    (cond is-qflia qflia
    (cond is-qflra qflra
    (cond is-qfnra qfnra
    (cond is-qfnia qfnia
    (cond is-nra nra
    (cond is-lira lira
    (cond is-qffpabv qffpa
    smt))))))))))
这种“几乎”是有效的,如果您删除了带有
nra
lira
qffpa
的行,那么Z3将毫无问题地执行此操作。这三种策略似乎没有在Z34.4.1的SMT-LIB2接口中公开。不过,这方面的另一个问题是,如果在Z3的未来版本中更新了默认策略,那么任何像我上面所写的硬编码策略都不会更新


我真正想做的是发出一个命令,如
(使用默认值检查sat)
,或类似的命令,并获得与使用
(检查sat)
获得的结果相同的结果。这可能吗?

您引用的文件非常旧。Z3已移至,最新版本的default_tractic.cpp为

QF_FP的默认策略现在称为
qffp
,此后也导出了
lira
策略,我也导出了
nra
(截至)



编辑:截至,默认的
策略也已导出,因此现在可以根据请求编写
(使用默认值检查sat)

您引用的文件非常旧。Z3已移至,最新版本的default_tractic.cpp为

QF_FP的默认策略现在称为
qffp
,此后也导出了
lira
策略,我也导出了
nra
(截至)



编辑:截至,默认的
策略也已导出,因此现在可以根据要求编写
(使用默认值检查sat)

非常感谢。如果我克隆并构建z3 master,并修改我上面写的内容以匹配最新版本的
default\u-tractic.cpp
,那么我将使用
check-sat-using
获得一个策略,该策略与
check-sat
的行为相匹配。这仍然存在一个问题,即如果
default\u-tractic.cpp
被更新,那么自定义
(用……<代码>命令检查SAT将不会从更新中受益。相反,我尝试将默认策略添加到<代码> Debug Traceal.H./C>中,类似于您添加到 NRAiTrase.H./Cuth>中的一个,这非常有效!如果我提交并在GITHUB上提出拉取请求,您会考虑将其合并为主机吗?当然,我们我肯定会考虑它。它可能有点多余(因为检查SAT)和(应用默认)相同。,但我想您有一些将默认策略与其他策略相结合的用例?好的,很好。是的,我们的想法是允许用户构建默认策略。感谢您的考虑。非常感谢。如果我克隆并构建z3 master,并修改我上面写的内容以匹配最新版本的
default\u tractic.cpp
,那么我就可以使用与
检查sat
的行为相匹配的
检查sat的策略。这仍然存在一个问题,即如果更新了
默认策略.cpp
,则自定义
(使用……<代码>命令检查SAT将不会从更新中受益。相反,我尝试通过添加一行到默认的策略,将代码添加到<代码> Debug Typ策略。h < /C> >类似于您添加到代码> nRAiTrase.H./Cuff>中的一个,这太好了!如果我提交并在GITHUB上提出一个拉请求,您会考虑将其合并为MrAb吗?当然,我们我肯定会考虑它。它可能有点冗余(检查SAT)与(应用默认)相同,但是我想你有一些使用默认策略与其他策略结合的用例吗?好的,很棒。是的,这个想法是允许用户建立默认策略。谢谢考虑。