2022Fall_FormalMethod Review

  • 课程主页: 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


例子:

决策过程优化方法:

  • 纯变量

  • 内存分区

    例子:

理论结合

  • 例子

    不同理论分开求解