当前位置:   article > 正文

mark点Z3学习资料整理_z3-solver opf

z3-solver opf

Anything is Nothing

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

通常使用方式: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仓库源码就完全够用了。

简短的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:

在这里插入图片描述

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

classes

更加详细类关系鸟瞰整体结构可以浏览器打开看我之前用pyreverse从源码生成的类UML关联图svg的Z3classes.svgpip 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也不是不行。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号