(Z3Py) 函数声明有什么限制吗?

2024-01-23

函数声明有什么限制吗?

例如,这段代码返回 unsat。

from z3 import *

def one_op (op, arg1, arg2):
    if op==1:
        return arg1*arg2
    if op==2:
        return arg1-arg2
    if op==3:
        return arg1+arg2

    return arg1+arg2 # default

s=Solver()

arg1, arg2, result, unk_op=Ints ('arg1 arg2 result unk_op')

s.add (unk_op>=1, unk_op<=3)

s.add (arg1==1)
s.add (arg2==2)
s.add (result==3)
s.add (one_op(unk_op, arg1, arg2)==result)

print s.check()

Z3Py如何解释声明的函数?是只是有时会调用它还是有一些隐藏的机制也在这里?


在函数调用中one_op(unk_op, arg1, arg2), unk_op是 Z3 表达式。然后,诸如此类的表达式op==1 and op==2(在定义中one_op) 也是 Z3 符号表达式。自从op==1不是Python布尔表达式False。功能one_op将始终返回 Z3 表达式arg1*arg2。我们可以通过执行来检查print one_op(unk_op, arg1, arg2)。请注意,if定义中的语句one_op是Python语句。

我相信您的真正意图是返回包含条件表达式的 Z3 表达式。您可以通过定义来实现这一点one_op as:

def one_op (op, arg1, arg2):
    return  If(op==1,
               arg1*arg2,
               If(op==2,
                  arg1-arg2,
                  If(op==3,
                     arg1+arg2,
                     arg1+arg2)))

现在,命令If构建 Z3 条件表达式。通过使用这个定义,我们可以找到令人满意的解决方案。这是完整的示例:

from z3 import *

def one_op (op, arg1, arg2):
    return  If(op==1,
               arg1*arg2,
               If(op==2,
                  arg1-arg2,
                  If(op==3,
                     arg1+arg2,
                     arg1+arg2)))

s=Solver()

arg1, arg2, result, unk_op=Ints ('arg1 arg2 result unk_op')

s.add (unk_op>=1, unk_op<=3)
s.add (arg1==1)
s.add (arg2==2)
s.add (result==3)
s.add (one_op(unk_op, arg1, arg2)==result)

print s.check()
print s.model()

结果是:

sat
[unk_op = 3, result = 3, arg2 = 2, arg1 = 1]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(Z3Py) 函数声明有什么限制吗? 的相关文章

随机推荐

  • 使用 postgresql 数据库时,uwsgi 下的 django 应用程序无法启动

    我设置了一个应用程序AWS 上的 Ubuntu 14 04 gt NGINX gt UWSGI gt DJANGO 应用程序 使用 sqlite3 时该应用程序运行完全正常 但是当我使用django db backends postgres
  • ZfcUser 中的用户状态到底是什么?

    谁能告诉我 用户状态 是什么ZfcUser https github com ZF Commons ZfcUser正在做什么以及为什么我们可能需要它 这个用户状态是什么意思 我认为这不是它所指的角色 可以通过向 zfcuser global
  • Android/SQLite - WHERE 子句上的位操作

    我想知道在 Android 中是否可以做这样的事情 public Cursor getFlowsByCategory int type int categoryID int limit SQLiteDatabase db dbHelper
  • canvas 与 openGL 的功能是什么?

    我知道如果你向 openGL 发送静态且很少变化的纹理 例如像图块一样 openGL 会产生奇迹 但当你有不断变化的精灵时就不行了 是否有可能纯粹从画布上创建类似绑架这样的游戏 它的性能如何 可以使用画布创建诸如绑架之类的游戏 但最终您将在
  • 在经典 ASP 中使用“错误继续下一步”,以及如何处理错误

    大家好 我想问一个关于on error resume next 假设我们有一个循环来浏览记录集 例如 Do while not rs EOF query UPDATE conn execute query rs movenext loop
  • 如何减小tesseract生成的PDF的大小?

    我的 网络 应用程序的设置如下 我获取用户上传的 PDF 文件 对它们运行 OCR 并向他们显示 OCRed PDF 由于一切都在线 因此最小化生成的 PDF 文件的大小是减少用户加载和等待时间的关键 我从用户那里收到的文件是sample
  • 从 preg_match_all() 获取行号

    我正在使用 PHP 的 preg match all 来搜索使用 file get contents 导入的字符串 正则表达式返回匹配项 但我想知道在哪个行号找到这些匹配项 实现这一目标的最佳技术是什么 我可以将文件作为数组读取 并为每一行
  • Jekyll 将每个换行符转换为换行符

    我正在使用 Jekyll 和 kramdown 来制作一个静态站点 今天我注意到每当我将同一个句子继续到新行时 Jekyll 就会插入一个 br 标记那里 以前从未发生过这种情况 由于我所有的 Markdown 文件都没有超过 80 个字符
  • 用于清除 RStudio 中命令历史记录的命令或键盘快捷键

    相当于按 RStudio 历史记录窗口中的小扫帚按钮清除当前会话中的整个历史记录缓冲区的命令或键盘快捷键是什么 Note that I don t mean Ctrl L which clears the command window I
  • 从模板创建用于在 Qt 中打印的 PDF 文档

    我编写一个应用程序 当用户在对话框窗口中插入数据 文档标题 发件人姓名和地址等 时 我的应用程序应该根据该用户数据生成一个 pdf 文件 PDF 文件应该有定义的布局 如下所示 我尝试这样做QPdfWriter但在 pdf 中对齐文本时遇到
  • 为什么接口方法没有主体

    要实现多重继承 我们必须使用接口 但是为什么接口方法没有主体 为什么必须在派生类中重写它们呢 我真的想要一个清晰的答案 不涉及太多计算机术语 我似乎无法理解这一点 我参考了各种参考资料 因为 Java 与 C 或 Eiffel 等语言相比
  • android recyclerView水平和垂直间距

    大家好 我对 android 很陌生 我在 recyclerview 方面遇到了问题 我试图在回收视图中的图像视图之间添加空间 但没有成功 我想要的是 怎么了 以下是我的实现ItemOffsetDecoration java public
  • EmberJS 中的 I18n(路由和一般情况)

    EmberJS 支持国际化应用程序的翻译路由吗 或者至少可以轻松扩展它以支持 i18n 路由 有人有这方面的经验吗 例如 可以以某种方式从语言环境文件动态设置路由字符串吗 另外 当使用 Ember 和 Rails 路由时不必指定两次 这会很
  • 无法分配 CursorWindow

    我正在操作SQLite3我的 Android 应用程序中的数据库 我刚刚从预填充的数据库中读取数据 该数据库有 20 万行和 14 列 条目是文字 所有列的数据类型都是文本 查询最多 11 个字母的单词 例如 ABANDONMENT 效果很
  • 使用 IMongoQueryable 进行单元测试

    我正在使用 NET Core 2 0 和 NET Core MongoDB 驱动程序 我创建了一个像这样的存储库 public interface IRepository
  • Laravel 5.1 eloquent 的 with() 方法中的使用限制

    Eloquent staffGroup StaffGroup where id id gt with staffGroupRight gt first In StaffGroup Model public function staffGro
  • 获取类的实例方法列表

    我有一堂课 class TestClass def method1 end def method2 end def method3 end end 我如何获得此类中的方法列表 method1 method2 method3 TestClas
  • 将参数添加到 @keyframes 属性 Less

    我有一处房产 keyframes 我用autoprefixer编译来添加所需的前缀 我想做的是向动画名称 或任何可能的地方 添加一个参数 以将属性值更改为关键帧键 这就是我现在所拥有的 keyframes loader 0 transfor
  • Node.js Express 模块未正确加载

    Geos Mac hone georgiana npm list Users georgiana local hone email protected cdn cgi l email protection email protected c
  • (Z3Py) 函数声明有什么限制吗?

    函数声明有什么限制吗 例如 这段代码返回 unsat from z3 import def one op op arg1 arg2 if op 1 return arg1 arg2 if op 2 return arg1 arg2 if o