mark点Z3学习资料整理

文章目录

  • Anything is Nothing
    • Less is More
    • SMT
    • z3 classes
      • logic programming Reasoning符号推理策略strategies
      • Fixed-point关系代数datalog程序分析验证

Anything is Nothing

前几个月科研用到z3-solver,学习了下,主要注释写在源码上进行学习和试验,现在记下相关的学习资源方便自己日后查用。

  • github仓库相关官方资料论文资料汇总:(大部分都不需要着急看,进阶按需查找才需要)
    https://github.com/Z3Prover/z3/wiki#background

  • 官方的document汇总
    https://github.com/Z3Prover/z3/wiki/Documentation

通常使用方式:z3是一个底层的工具,它最好是作为一个组件应用到其它需要求解逻辑公式的工具中,例如KLEE。为了方便使用,z3提供了很多的API,这些api支持的语言有C, .NET, and OCaml。当然,z3也可以通过命令行的方式来执行。

- 汇总多语言api入口 目前支持的语言:

语言API链接
C语言http://z3prover.github.io/api/html/group__capi.html
C++http://z3prover.github.io/api/html/namespacez3.html
.NEThttp://z3prover.github.io/api/html/namespace_microsoft_1_1_z3.html
Javahttp://z3prover.github.io/api/html/namespacecom_1_1microsoft_1_1z3.html
Pythonhttp://z3prover.github.io/api/html/namespacez3py.html
在线运行https://rise4fun.com/z3/tutorial
OCaml (ML)http://z3prover.github.io/api/html/ml/index.html
F# Ocamlhttps://github.com/sishtiaq/compose-z3-tutorial

Z3完整的API文档在这:感觉python迭代勤快更好用,墙裂推荐使用python调用z3 https://z3prover.github.io/api/html/namespacez3py.html
z3 pydoc格式的api文档 http://z3prover.github.io/api/html/z3.html
python api https://z3prover.github.io/api/html/namespacez3py.html 比如 api 命名空间 https://z3prover.github.io/api/html/namespace_microsoft_1_1_z3.htm。

更快cpp

Cpp-API接口:https://z3prover.github.io/api/html/group__cppapi.html 这里更新一篇C++的较完整教程example.cpp :http://www.cs.utah.edu/~vinu/research/formal/tools/notes/z3-notes.html 官方example.cpp文档:https://github.com/Z3Prover/z3/blob/master/examples/c%2B%2B/example.cpp 第二个入门教程也非常不错,里面包含了环境的搭建,例子的说明(其实就是C++的较完整教程example.cpp的说明) cpp项目中如果要使用z3则在install之后要在文件中包含z3++.h头文件,而且在编译参数上要加上-lz3


Less is More

私以为,看下面前两个官方教程及其github仓库源码就完全够用了。

  • 先过一遍python官方F4(狗头) doc-z3 项目下html的几个网页版本教程其中Basic就是这里这页 http://www.cs.tau.ac.il/~msagiv/courses/asv/z3py/guide-examples.htm 中文翻译第一页Basic 及其对应代码仓库https://github.com/TysonSir/z3-solver 。然后剩下来的是符号推理策略strategies-examples,fixedpoint engine主要功能是基本的Datalog引擎,具有关系代数的引擎和基于属性定向可达性算法通用化的引擎,微软F4之4进阶主题
  • 微软研究院写的教程入门python全面programmingZ3全场最佳触及本质元认知 https://theory.stanford.edu/~nikolaj/programmingz3.html 本教程提供了一个程序员’满意度模理论求解器Z3的介绍。它描述了如何通过Python脚本语言提供的脚本使用Z3,并描述了Z3内部决策过程的几种算法。它旨在广泛涵盖Z3的几乎所有可用功能以及基础算法的本质。
  • smt-lib2.0在线运行官方教程简短教程,其中介绍了Z3的基础功能和简单的SMT-LIB语法。https://rise4fun.com/z3/tutorialcontent/guide 中文翻译 1 中文翻译 2
  • 实例中学习,多看几个仓库高玩骚操作:案例PKHG/doc z3-playground ,包括github相关仓库多种实例。

简短的github gist记录下面这些cpp smt2接口用法,smt-lib2.0在线运行官方教程简短教程,F4-4进阶主题,和programmingz3.mdk了解z3py相关概念汇总精要,所需要知道的元认知和结构概览,结合源码本地修改注释,当遇到困惑点Stackoverflow、github issuses搜一下就行。

SMT

  • 电子书《SAT/SMT by Example》 使用Z3的python接口精心设计并激发示例的优秀资源 https://sat-smt.codes/main.html 主页,前面官方链接给出下面两张图:

  • SATCore:

在这里插入图片描述

  • SMTCore:
    在这里插入图片描述

前文微软F4教程(狗头)给了下面两张架构图:

SMTNutshell
SMTTheorysolvers

符号主义old but fashion的AI ,Z3Overall:
Z3Overall
SystemDiagrams:
在这里插入图片描述

z3 classes

Z3packages:

在这里插入图片描述

  • 只需要2个API:z3py命名空间查出现或者需要的函数源码用法结构,比如issubclass()等。
  • 类关系看祖先节点网络图往下选继承对象的说明就行,有疑惑就print(type(想了解的对象))进入文档查看。

然后vscode停留看源码,ctrl点进去细细研究就行,python多半只是接口,实际函数实现都封装在底层,最好还是看github源码仓库,其实根据需要Doxygen生成文档也很简单。

classes

更加详细类关系鸟瞰整体结构可以浏览器打开看我之前用pyreverse从源码生成的类UML关联图svg的Z3classes.svg—pip install z3-solver 4.8.10.0版 类图。

logic programming Reasoning符号推理策略strategies

Z3 implements a methodology for orchestrating reasoning engines where “big” symbolic reasoning steps are represented as functions known as tactics大的符号推理步骤写成函数, and tactics are composed using combinators known as tacticals组成成分. Tactics process sets of formulas called Goals被处理的公式集.

符号推理策略strategies-examples,

Probes are used to inspect a goal (aka problem) and collect information that may be used to decide which solver and/or preprocessing step will be used.

Z3, we say a clause is any constraint of the form Or(f_1, ..., f_n). The tactic split-clause will select a clause Or(f_1, ..., f_n) in the input goal, and split it n subgoals. One for each subformula f_i.

Fixed-point关系代数datalog程序分析验证

fixedpoint engine,主要功能是基本的Datalog引擎,具有关系代数(数据库的代数语义)的引擎和基于属性定向可达性算法通用化的引擎。有些静态语言分析会用到这种就像是prolog查询般的语言,在做符号执行属实是相当神奇的一群人。


一般对我而言,入门=知悉相关术语框架,重要概念,遇到问题知道去哪儿找答案,能明白最基本的原理demo是基于什么实现的,有需要的时候可以快速定位找到答案或者源码可供参考部分实现,更多内容看文档API。

妙就妙在"SAT是个筐,什么问题都往里装!",CSP约束可满足编程问题,妙哉。

因为在做规划类的问题,z3就是一阶语言,构造代数数据结构和Coq,Haskell也没太大差别的样子。面向约束可满足问题的通用规划,进而实现自动程序设计。就像c-like语言盛行靠近底层,很多时候为了效率规划问题求解都是用自动机,多叉树启发式搜索来做的固化,譬如PRP,MyND,但是FOND-SAT的确走的是old but fashion的AI符号演算路子,MiniSAT可以,z3也不是不行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381801.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

z3 guide

Z3是微软研究院开发的高性能定理证明程序。Z3有许多应用场合,如:软件/硬件验证和测试,约束求解,混合系统的分析,安全,生物(硅分析),几何问题。 Z3发行版还包含C、C、.Net、Java和OCaml 的api。Z3Py的源代码…

【Django】无法从“django.utils.encoding”导入名称“force_text”

整晚处理 Django 的导入错误。 我将把它作为提醒,希望处于相同情况的人数会减少。 原因 某些软件包版本不支持Django 4 请看下表并决定Django和Python的版本 方案 如果出现难以响应,或者更改环境麻烦,请尝试以下操作 例如出现以下错误 …

走迷宫(maze) 难度**

题目描述 有一个 mn 格的迷宫(表示有 m 行、n 列),其中有可走的也有不可走的,如果用 11 表示可以走,00 表示不可以走。 文件读入这 mn 个数据和起 始点、结束点(起始点和结束点都是用两个数据来描述的,分别表示这个点的行号和列…

地下迷宫

import java.util.*;/*** 题目大意:n*m格迷宫,1代表青蛙可以通过,0不能通过* 青蛙体力值P,每次走一步,横向走消耗体力值1,向下走不消耗体力,* 向上走消耗体力值3.* 青蛙初始位置(0,0),迷宫出口(0,m-1)* 求青蛙走出迷宫的路径*/ public class Main {static class Node {int x;in…

7-2 地下迷宫探索

7-2 地下迷宫探索 分数 30 全屏浏览题目 切换布局 作者 DS课程组 单位 浙江大学 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式。地道网是房连房、街连街、村连村的地下工事,如下图所示。 我们在回顾前辈们艰苦卓绝…

走迷宫图解

本节利用栈的思想用试探法进行了迷宫一条路径的探索。其中主要的操作是找到下一个空格、如果空格不再可行退回上一个格、每走过一个格子将走过的格子标记为-1防止循环走。 原理如下图: 具体的代码如下: #走一个任意的5*5迷宫 #mg可以为[[1,1,1,1,1,1],…

C/C++编程:获取路径中的文件名

文件是否存在 bool fileExists(const char *fileName) {ifstream infile(fileName);return infile.good(); }C/C获取路径中的文件名 void getfilename(const char *filename, char *name)//从完整路径名中解析出文件名称,例如:/home/test/abc.txt,解析…

Linux C 文件路径中获取文件名及路径

编程中有时会遇到需要把文件路径中的文件名或者路径提取出来的情况&#xff0c;发现了两个好用的函数记录一下。 一、提取文件名 头文件&#xff1a;#include <libgen.h> **函数&#xff1a;**char *basename(char *path); 注&#xff1a;这个函数不会修改传入的 path …

从路径名中得到文件名 MFC

从路径名中得到文件名 MFC 转载▼ strFileNamestrPathName.Mid(strPathName.ReverseFind( \\ )1); //若去掉.txt .exe .doc等后缀&#xff0c;共4个字符 strFileNamestrPathName.Mid(strPathName.ReverseFind( \\ )1&#xff0c;strPathName.length()-4); CString CFile…

C++读取特定路径下文件目录及文件名称

C读取特定路径下文件目录及文件名称亲测有效。主要用到了以下几个头文件(类)&#xff1a;io.h&#xff0c;fstream&#xff0c;string&#xff0c;vector 1、读取某给定路径下所有文件夹与文件名称&#xff0c;并带完整路径。代码如下&#xff1a; 1 void getAllFiles(string…

C++读取文件夹中文件名以及文件路径

文章目录 1 获取文件夹中所有文件名&#xff0c;包含子文件夹中的文件名2 获取文件夹中所有文件路径&#xff0c;包含子文件夹中的文件路径3 获取母文件夹中所有文件名&#xff0c;不包含子文件夹中的文件名4 只获取母文件夹中的文件路径&#xff0c;不包含子文件夹中的文件5 主…

C++ 获取文件路径和文件名

C 获取文件路径和文件名 就是基本的字符串截取 const char * filePath“F:\a.txt”; string filePath_strfilePath; string fileNamefilePath_str.substr(filePath.find_last_of(’\\’)1); const char *filename_cfileName.c_str(); ** 1. string 转换 成 const char *…

如何设置打印机?

1.取消禁用Guest用户&#xff0c;因为别人要访问安装打印机的按个电脑就是以guest账户访问的。 点击【开始】按钮&#xff0c;在【计算机】上右键&#xff0c;选择【管理】&#xff0c;如下图所示&#xff1a; 在弹出的【计算机管理】窗口中找到【Guest】用户 双击【Guest】&am…

Epson 打印机设置

在新到的 680 的打印机打印新的电费收据&#xff0c; 驱动选择 Windows 自带的 1600k 驱动&#xff1b;后进连打&#xff0c;左边卡位在 4 处。 一、 问题现象 如果您&#xff08;比如使用了进纸旋钮调整页顶位置之后&#xff0c;或者在使用专用软件打印套打票据的时候&a…

Excel的公式和函数

目录 运算符 地址的引用 逻辑函数 文本函数 统计函数 查找与引用函数 日期函数 常见出错信息 一、运算符 算术运算符 若要进行基本的数学运算&#xff08;如加法、减法、乘法或除法&#xff09;、合并数字以及生成数值结果&#xff0c;请使用以下算术运算符。 比较运算符 可以使…

excel 数据计算

简单计算&#xff1a; 算销售额&#xff0c;B2*C2&#xff0c;右下双击填充下面的 计算 D2&#xff1a;D6 到 D7 函数计算 日期计算 DATEDIF(start,date,end_date,unit) 返回两个日期之间的年/月/日间隔数 unit&#xff1a;有 Y&#xff1a;指时间段中的整年数 M&#xff1…

计算机二级MS office之excel常用函数

总结一下计算机二级excel中常用的函数&#xff0c;如果有错误的地方&#xff0c;希望小伙伴们可以多多指教❤️。 本文主要介绍了以下函数(可根据序号进行查阅)&#xff1a; 序号函数名称函数类别1VLOOKUP查询函数2MID、 LEFT、RIGHT文本函数3LOOKUP数组查询函数4RANK排名函数…

[Excel函数] 计算统计类函数

Excel公式规范: (1) 在Excel中输入函数时&#xff0c;是不区分大小写的 (2) 在公式函数中&#xff0c;每个参数都是用逗号分隔的 (3) 参数中的文本要用双引号引起来&#xff0c;对于单纯的数字是不用双引号的 (4) 一定要在英文半角状态下输入标点符号&#xff0c;不能在中文状态…

Chrome浏览器导出插件并安装到其他电脑浏览器上的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Excel计算函数(计算机二级)

Excel计算函数 一、Sum()求和函数1.sum()2.sumif()3.sumifs() 二、Average()求平均值函数三、Max()求最大值函数四、Min()求最小值函数五、Count()求最个数函数1.count()2.counta()3.countif()4.countifs() 六、if()函数七、rank()排名函数 一、Sum()求和函数 1.sum() 双击底下…