【Static Program Analysis - Chapter 4】格理论(Lattice Theory)与程序分析
# 从一个例子说起,


**任务:给定这样一段代码,假设我们想分析出这段代码中,每个数值型变量和表达式的符号,即正数,负数或0。**
此外,还有可能出现两种情况就是:
1.我们无法分析出结果,即我们无法确定符号,用(?)表示;
2.有些表达式的值并不是一个数字(例如,有可能是个指针)或者在执行的过程中没有被赋值(有可能是因为对于给定的输入,没有执行到,unreachable),用(⊥)表示。
因此,对于每一个变量或者是表达式,我们会有5种结果(这里将其表征成“格”的形式):

(?)可能的原因是:
1.执行多次,变量c是正数或者是负数的结果都出现过。所以标记为(?)更加保险;
2.分析方法无法证明结果的确定性。如,执行多次变量都是正数,但是分析方法无法证明变量一定是正数。
# 格理论(Lattice Theory)
## 偏序集合(Partially ordered set,简写poset)
首先了解一个概念叫*偏序集合*,(英语:Partially ordered set,简写poset)是数学中,特别是序理论中,指配备了部分排序关系的集合。 这个理论将排序、顺序或排列这个集合的元素的直觉概念抽象化。这种排序不必然需要是全部的,就是说不必要保证此集合内的所有对象的相互可比较性。部分排序集合定义了部分排拓扑。(更多详细的介绍见维基百科)
偏序:集合内只有部分元素之间在这个关系下是可以比较的。
比如:比如复数集中并不是所有的数都可以比较大小,那么“大小”就是复数集的一个偏序关系。
全序:集合内任何一对元素在在这个关系下都是相互可比较的。
比如:有限长度的序列按字典序是全序的。最常见的是单词在字典中是全序的。
偏序关系即给定集合S,“≤”是S上的二元关系,若“≤”满足:
则称“≤”是S上的非严格偏序或自反偏序。
全序关系即集合X上的反对称的、传递的和完全的二元关系(一般称其为≤)。
若X满足全序关系,则下列陈述对于X中的所有a, b和c成立:
- 反对称性:若a ≤ b且b ≤ a则a = b
- 传递性:若a ≤ b且b ≤ c则a ≤ c
- 完全性:a ≤ b或b ≤ a
注意:完全性(全序)本身也包括了自反性。
所以,全序关系必是偏序关系。
## 格,a lattice is a pair(S,⊑)
在数学中,格是其非空有限子集都有一个上确界(叫并)和一个下确界(叫交)的偏序集合(poset)。格也可以特征化为满足特定公理恒等式的代数结构。因为两个定义是等价的,格理论从序理论和泛代数二者提取内容。半格包括了格,依次包括海廷代数和布尔代数。这些"格样式"的结构都允许序理论和抽象代数的描述。(更多详细的介绍见维基百科)
序理论定义
考虑任意一个偏序集合(L,≤),如果对集合L中的任意元素a,b,使得a,b在L中存在一个最大下界,和最小上界,则(L,≤)是一个格。
这里对于取a,b的最大下界的操作用{\displaystyle a\wedge b}表示;
对于取a,b的最小上界操作用 {\displaystyle a\vee b}表示。
有界格有一个最大元素和一个最小元素,按惯例分别指示为1和0(也叫做顶和底)。任何格都可以通过增加一个最大元素和最小元素而转换成有界格。
使用容易的归纳论证,你可以演绎出任何格的所有非空有限子集的上确界(并)和下确界(交)的存在。一个很重要的格的种类是完全格。一个格是完全的,如果它的所有子集都有一个交和一个并,这对比于上述格的定义,这里只要求所有非空有限子集的交和并的存在。

例子:
任何一个有限的偏序集合可以表示成一张哈斯图(Hasse diagram,每个元素代表一个节点,顺序关系是边的传递闭包,由低到高),如,
以上都是格,以下都不是格:

其他一些例子:


## 不动点(fixed-points)

这里引用王千祥老师的slide作为补充:









【Static Program Analysis - Chapter 4】格理论(Lattice Theory)与程序分析的更多相关文章
- 【Static Program Analysis - Chapter 1】 Introduction
Regarding correctness, programmers routinely use testing to gain confidence that their programs work ...
- 【Static Program Analysis - Chapter 3】Type Analysis
类型分析,个人理解就是(通过静态分析技术)分析出代码中,哪些地方只能是某种或某几种数据类型,这是一种约束. 例如,给定一个程序: 其中,我们可以很直接地得到一些约束: 最后,经过简化可以得到: 对 ...
- 【Static Program Analysis - Chapter 2】 代码的表征之控制流图
(a) an if-then-else (b) a while loop (c) a natural loop with two exits, e.g. while with an if...br ...
- 【Static Program Analysis - Chapter 2】 代码的表征之抽象语法树
抽象语法树:AbstractSyntaxTrees 定义(wiki): 在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是 ...
- 南京大学 静态软件分析(static program analyzes)-- introduction 学习笔记
一.Programming Languages体系 静态程序分析是编程语言中应用层面下的一个细分领域,它是一个非常重要的核心内容. 在理论部分,考虑的是如何设计一个语言的语法和语义,如何设计语言的类型 ...
- The Ultimate List of Open Source Static Code Analysis Security Tools
https://www.checkmarx.com/2014/11/13/the-ultimate-list-of-open-source-static-code-analysis-security- ...
- Top 40 Static Code Analysis Tools
https://www.softwaretestinghelp.com/tools/top-40-static-code-analysis-tools/ In this article, I have ...
- 静态时序分析(static timing analysis)
静态时序分析(static timing analysis,STA)会检测所有可能的路径来查找设计中是否存在时序违规(timing violation).但STA只会去分析合适的时序,而不去管逻辑操作 ...
- static timing analysis 基础
此博文依据 特权同学在电子发烧友上的讲座PPT进行整理而成. static timing analysis 静态时序分析基础 过约束:有不必要的约束,或者是约束不能再某一情况下满足.——约束过头了 ...
随机推荐
- visual studio 设计第一个WinForm小程序
WinForm小程序之消息框 首先打开visual studio 软件,然后[文件]-[新建]-[项目]-[Visual C#]-[Windows],选择Windows窗体应用程序,根据自己的需要修改 ...
- Ubuntu1404安装eclipse(目的是为了运行python,当然java更可以)
原创文章,不得转载 我是彩印网(www.caiyin.com) 的技术开发人员,在这里首先请允许我做下业务的介绍 彩印网是由北京出彩电子商务有限公司运营的专业印刷电商,集线上购物.支付.设计.制作.配 ...
- APP中的图片如何长按可以下载并保存图片到相册
直接上图 方式一: 实现方式二: 方式三:
- APB协议
https://wenku.baidu.com/view/2663f629ef06eff9aef8941ea76e58fafab04592.html https://www.cnblogs.com/l ...
- vue-cli配置多入口多出口,实现一个项目两个访问地址,区分不同上线环境
最近工作中需要把项目分割成两块,一块需要跑在微信中,通过微信jdk获取用户资料默认登录,一部分需要给原生app做webview的内嵌页面,当然这部分内容是不跑在微信中的. 所以我想到了把项目分成两部分 ...
- hive sql 里面的注释方式
如果建表ddl 用 comment 这个没问题 那么在sql 语句里面呢,这个貌似不像mysql 那样能用 # // /* */ (左边这些都不行) 其实用 -- comment 就行啦 貌似上面的- ...
- Android、iOS、和Web如何做灰度发布?
主要参考了: https://www.zhihu.com/question/21714205 https://www.zhihu.com/question/28296375 一.概述 ...
- 使用wrk进行压力测试
最近需要对新的服务进行压力测试.比较了ab和jemeter以及wrk.最终选择wrk来作为压力测试工具,可以把cpu压到100%. 官方源码: https://github.com/wg/wrk 安装 ...
- 在GDAL中添加GDALRasterizeGeometriesBuf函数
缘起 GDAL的栅格化算法中有GDALRasterizeLayers.GDALRasterizeLayersBuf和GDALRasterizeGeometries函数,但是没有GDALRasteriz ...
- memcache源码编译安装
问题描述: memcached未授权漏洞.运行账户root,对未授权,官方也没有账户认证,也想不明白,为啥不搞个账户认证memcached..... 问题解决: 未授权,网上大部分通过防火墙实现对未知 ...