逻辑和编程语言(PTIME 的逻辑/命题和谓词逻辑)
天真的连接:
逻辑公式和程序具有相似的构建块。
逻辑运算符在编程中大量使用。
隐含、递归、if else 构造、for 循环等。
更深层次的联系:
(1)分离逻辑(自动化程序验证中的应用)
推理操作指针数据结构的程序。
公式描述堆内存的属性
(2)库里-霍华德对应
函数式编程和逻辑之间的联系
逻辑公式是数据类型
公式证明是计算类型之间函数的程序。
逻辑作为数据库查询语言
(1)关系数据库是关系结构。
(2)关系代数和谓词逻辑可以表达相同的查询。
(3)SQL:从 GradeList 中选择学生、年级、课程
WHERE Grade >= 70 and Course = ‘COM2107’
(4)FO:{(x1,x2,x3)| ∃~y (GradeList(x1, x2, x3, ~y) ∧ x1 ≥ 70 ∧ x2 = COM2107)}
逻辑作为规范语言来表达数据库中的完整性约束
(1)数据库管理系统需要验证某些数据库依赖关系成立。 (例如,外键约束、包含依赖项)
(2)逻辑用于不同数据交换和数据集成的核心系统(例如 IBM Clio 项目)。
描述复杂性理论:
不通过决定属性所需的资源来表征属性,
而是通过表达属性所需的语言的丰富性。
∃:存在量词,意思是“存在(至少一个)
∀:谓词演算等中用来表示全称量词的符号,意思是“对所有人”
逻辑和自动机
有限自动机和正则表达式生成正则语言。
一元二阶逻辑是常规语言的特征。
谓词逻辑表征无星语言。
逻辑和复杂性类
存在二阶逻辑表征 NP。
谓词逻辑在有序结构上表征 PTIME。
主要未解决的问题:是否存在表征 PTIME 的逻辑?
PTIME 的逻辑
基本设置:
- 系统(例如,软件或硬件)描述系统行为的 Kripke 结构 单次运行系统
- 由 Kripke 结构生成的迹线系统的一个属性(例如,每个请求最终都会被授予)
- 表达属性的某种形式语言的公式
模型检查:
检查给定系统是否满足给定规范。
SAT解决:
检查是否可以实现给定的规范(或集合)
逻辑是自动推理的核心
陈述的正式语言。
公理和证明规则为自动推理创建了一个设置。
自动化和交互式定理证明器基于形式逻辑
在定理证明器中形式化你的定理(和背景理论)。
让证明者证明你的定理。
命题和谓词逻辑中的形式证明是什么?
证明系统的健全性和完整性。
命题逻辑的有效性是 coNP 完全的。
(参见 P 与 NP:证明很容易检查,但可能很难创建。)
谓词逻辑的有效性是不可判定的(RE-complete)。
(参见谓词逻辑只能定义图的多项式时间属性。)