z3 - z3 从 int 到 float 的转换,反之亦然,适用于任何表达式
问题描述
说一个python表达式,例如
float(x + 1 * 2) * 2 == 2
我如何将其转换为 z3 表达式?使用明显的ToReal(x + 1 * 2)
不起作用。在旁注中,我已经使用z3.ToReal
并且我什至无法获得简单的示例来坐下,但是ToInt
按预期工作。例如
from z3 import *
a = Int("a")
b = Real("b")
s = Solver()
s.add(ToReal(a) == 1.1)
s.check()
>>> unsat
s.reset()
s.add(ToInt(b) + 1.1 == 2)
s.check()
>>> sat
解决方案
我不知道你为什么这么说it doesn't work
。它似乎按预期工作:
>>> from z3 import *
>>> x = Int('x')
>>> s = Solver()
>>> s.add(ToReal(x + 1 * 2) * 2 == 2)
>>> print(s.check())
sat
>>> print(s.model())
[x = -1]
事实上,对于整数值x = -1
,你想要的平等确实成立。
您必须更清楚您的预期是什么,以及 z3 做了什么(或没有做什么!)。
推荐阅读
- azure-devops - 如何在 DevOps 构建管道中创建条件构建属性
- css - 导入的角度模块在第一次访问路线时不起作用,但在后续访问中起作用
- reactjs - 安装 Webpack 5 时 preact build 不起作用
- php - php curlstrapi cms 多张图片上传
- amazon-web-services - “Invoke_endpoint”调用能否使 lambda 函数超时?
- json - 如何在 Perl 中遍历 JSON 对象?
- react-native - Mapbox React Native - 使用表达式格式化 textField 样式属性
- javascript - 以编程方式从 InlineKeyboardMarkup 获取隐藏消息
- javascript - 为什么 php://input 在 JS fetch post 请求上返回 null?
- android - (Unity) Firebase 不适用于 Android 构建