- 课程主页: Formal Methods Foundation (csslab-ustc.github.io)
- 课程逻辑
- 课程大纲
- 考试内容: 开卷
- 命题逻辑(证明树推导, 规则使用)
- 构造逻辑(与命题逻辑区别)
- SAT(是命题逻辑部分的可满足性问题)
- Theory(谓词逻辑满足性定理)
- 符号执行/混合执行
_数学基础
计算复杂性理论
上下文无关文法
具体例子:
- 上述推导 _存在二义性:
结构化归纳法
例子:
命题逻辑
证明系统: 自然演绎(经典命题逻辑)
基本概念
环境: 一组命题 假定是真的
断言:
( |- 的意思是 等价 )
证明规则
合取(Conjunction理解为And)
析取(Disjunction理解为Or)
蕴含
否定
证明–历年考题(证明规则的运用)
推导的循序是自下往上
历史考题1
考试题型: 证明题
构造逻辑
- 不能使用反证法
SAT(布尔可满足性)问题/DPLL算法
SAT是针对命题逻辑的可满足性问题
例:
穷举法
但时间增长速度快(指数级)
提出了DPLL
DPLL算法的输入必须是合取范式CNF
CNF(合取范式)
合取范式中:
- 最外层的符号都是合取
- 否定符号一定出现在原子命题前
- 不能有蕴含(->)符号
转换命题为CNF范式:
增加了优先级
例子:
可能会考到
_解析和传播
不做过多解释
CNF不可解–解析推出矛盾
CNF解析不冲突–传播
DPLL
- bcp(P)
单元解析: 两个子句之间必须有一个是原子命题
bcp通俗来说: 两个命题中有一个是原子命题(p), 另一个是含有p析取(~/否定)的复合命题, 传播得出等价的不含原子命题的新命题(q)
例子
上面的过程完成了一次布尔约束传播(bcp)_选择变量(递归地)
SAT vs. valid
SAT基于的是命题逻辑(不接受排中律, 可以用反证法)
谓词逻辑
谓词逻辑是命题逻辑的细化
- 增加了原子逻辑上更细化的定义
- 引入了一些量词(全称, 存在)
新增(相对命题逻辑)的概念:
x是自由变量, y是绑定变量, 替换操作只能针对自由变量. α重命名不能让变量名冲突
计算绑定变量
输入: 谓词逻辑命题
输出: 绑定变量集合
例子:
计算自由变量
例子:
一个变量有可能同时是绑定变量和自由变量(例子中的y)
替换规则
输入: 命题
输出: 命题
只替换自由变量, 替换前要求解绑定/自由变量, 自由变量替换前要进行α重命名
例子:
证明系统: 自然演绎
原先的命题逻辑规则和推导方法证明系统: 自然演绎(经典命题逻辑) 在这里也适用, 这里只列出了新增的四条规则
- 全称量词的引入
- 存在量词的引入
- 全称量词的消去
- 存在量词的消去
例题:
SMT可满足性模理论
求解谓词逻辑可满足性求解
理论是谓词逻辑语法的子集
等式理论/EUF理论
- 未解释函数定义
- EUF(等式与未解释函数定义)
- 全等定理
用于证明函数之间等价
例子1: 证明两个程序等价
改写为静态单赋值(SSA)形式
把乘法(*)抽象为抽象函数
例子2: 编译
线性算数(LA)理论
消元法
做题中
- 右边改成0
- 符号改成一样
例子 : (考试要考消元法)
往上代入, 有一组解
说明这一组约束是可满足的
_单纯形法
不考
…
_分支定界
不考
…
比特向量理论
语法
语义
把bit向量映射到正数域:
- 有符号
- 无符号
bitBlast()
比特爆炸
递归生成树:genCons()
生成限制
数组理论
数组读写的消去
例子:
分类讨论: z<i / z=i / z>i
指针理论: 内存模型
地址T 值类型E 关系R 复合命题P
例子:
决策过程优化方法:
纯变量
内存分区
例子:
理论结合
- 例子
不同理论分开求解