首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >z3中的"simplify“和"ctx-solver-simplify”有什么区别?

z3中的"simplify“和"ctx-solver-simplify”有什么区别?
EN

Stack Overflow用户
提问于 2012-08-04 21:29:54
回答 1查看 2K关注 0票数 5

从当前版本开始,在“ctx-solver-simplify”中存在一些问题,例如http://rise4fun.com/Z3/CqRv z3给出了错误的答案。我把"ctx-solver-simplify“换成了"simplify”,就像http://rise4fun.com/Z3/x9X4一样我在想,这两种策略"simplify“和"ctx-solver-simplify”有什么区别?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-05 01:54:38

策略simplify只执行“局部简化”。对于每个术语t,我们都认为simplify(t)是一个新术语,等同于t。此外,simplify(t)的结果不依赖于发生t的上下文。通过上下文,我指的是发生t的断言F和所有其他断言。因为,simplify是本地的,所以它非常高效。实现本质上是基于自下而上的简化规则的应用。此外,由于simplify(t)的结果不依赖于上下文信息,因此我们可以缓存它。因此,即使t在公式F中出现N次,我们也只需要简化它一次。Z3中的所有内置求解器都应用了这种简化。因此,像simplify这样的策略已经经过了广泛的测试。

策略ctx-solver-simplify使用t发生的上下文来应用简化。基本思想是通过使用求解器S遍历公式求解器来简化公式F。求解器上下文实际上包含“S”。只要S.check()返回unsat,我们就知道当前的上下文不一致,那么我们就可以用false替换当前的公式。ctx-solver-simplify的价格要贵得多。首先,它执行许多对S.check()的调用。这些调用中的每一个都可能非常昂贵。缓存中间结果也要困难得多。Z3可能需要多次简化子公式t,因为它出现在不同的上下文中。

您在问题中报告的错误已修复。该修复将在下一个版本(4.1版)中提供。如果您需要,我们可以为您提供Z3 4.1的预发布版本

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11809034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档