程序验证(一):命题逻辑
程序验证(一):命题逻辑
概念
命题逻辑
例如 P ∨ ¬ Q → R P\vee \neg Q \to R P∨¬Q→R
- 一个原子(atom)是一个或为真或为假的判断。
- 一个文字(literal)是一个原子或它的非。
- 命题公式(propositional formulas)由文字和逻辑连接符组成。
合式公式
合式公式(well-formed formulas) 由以下语法得到:
- ⟨ a t o m ⟩ \langle atom\rangle ⟨atom⟩ ::= ⊤ ( t r u e ) ∣ ⊥ ( f a l s e ) ∣ P , Q , . . . ( 命 题 变 量 ) \top (true) | \bot (false)|P,Q, ... (命题变量) ⊤(true)∣⊥(false)∣P,Q,...(命题变量)
- ⟨ l i t e r a l ⟩ \langle literal\rangle ⟨literal⟩::= ⟨ a t o m ⟩ \langle atom\rangle ⟨atom⟩| ¬ \neg ¬ ⟨ a t o m ⟩ \langle atom\rangle ⟨atom⟩(非)
- ⟨ f o r m u l a ⟩ \langle formula\rangle ⟨formula⟩::= ⟨ l i t e r a l ⟩ \langle literal\rangle ⟨literal⟩
| ¬ \neg ¬ ⟨ f o r m u l a ⟩ \langle formula\rangle ⟨formula⟩ (negation)
| ⟨ f o r m u l a ⟩ \langle formula\rangle ⟨formula⟩ ∧ \wedge ∧ ⟨ f o r m u l a ⟩ \langle formula\rangle ⟨formula⟩ (conjunction)
| ⟨ f o r m u l a ⟩ \langle formula\rangle ⟨formula⟩ ∨ \vee ∨ ⟨ f o r m u l a ⟩ \langle formula\rangle ⟨formula⟩ (disjunction)
| ⟨ f o r m u l a ⟩ \langle formula\rangle ⟨formula⟩ → \to → ⟨ f o r m u l a ⟩ \langle formula\rangle ⟨formula⟩ (implication)
| ⟨ f o r m u l a ⟩ \langle formula\rangle ⟨formula⟩ ↔ \leftrightarrow ↔ ⟨ f o r m u l a ⟩ \langle formula\rangle ⟨formula⟩ (equivalence)
举例:
公式 | 是否为合式公式 |
---|---|
⊤ \top ⊤ | 是 |
P ∧ ( Q ∨ R → P ) P\wedge (Q \vee R\to P) P∧(Q∨R→P) | 是 |
P P P | 是 |
P ⇒ Q P\Rightarrow Q P⇒Q | 否 |
语义
目的:给命题逻辑赋予涵义
把布尔值赋值给(公式,解释)对
即
F o r m u l a : F + I n t e r p r e t a t i o n : I = T r u t h V a l u e ( t r u e , f a l s e ) Formula: F + Interpretation: I=TruthValue(true, false) Formula:F+Interpretation:I=TruthValue(true,false)
什么是解释?
对于一个命题公式 F F F,一个解释 I I I将 F F F中每个命题变元映射为一个布尔值,也就是说:
I = P ↦ t r u e , Q ↦ f a l s e , R ↦ f a l s e , . . . I={P\mapsto true, Q\mapsto false, R\mapsto false,...} I=P↦true,Q↦false,R↦false,...
满足解释:
如果命题公式在解释 I I I下值为真,那么说 I I I是 F F F的满足解释(satisfying interpretation),记作:
I ⊨ F I \models F I⊨F
不满足解释:
如果命题公式在解释 I I I下值为假,那么说 I I I是 F F F的不满足解释(falsifying interpretation),记作:
I ⊭ F I \not \models F I⊨F
语义的归纳定义:
首先定义原子的涵义,然后根据这些定义,定义每个逻辑连接的涵义。
举例:
F : P ∧ Q → P ∨ ¬ Q F: P\wedge Q \to P\vee \neg Q F:P∧Q→P∨¬Q
I : { P ↦ t r u e , Q ↦ f a l s e } I:\{P\mapsto true,Q\mapsto false\} I:{P↦true,Q↦false}
Step No. | Step | Reason |
---|---|---|
(1) | I ⊨ P I\models P I⊨P | I [ P ] = t r u e I[P]=true I[P]=true |
(2) | I ⊭ Q I\not\models Q I⊨Q | I [ Q ] = f a l s e I[Q]=false I[Q]=false |
(3) | I ⊨ ¬ Q I\models\neg Q I⊨¬Q | ( 2 ) a n d ¬ (2) and \neg (2)and¬ |
(4) | I ⊭ P ∧ Q I\not\models P\wedge Q I⊨P∧Q | ( 2 ) a n d ∧ (2) and \wedge (2)and∧ |
(5) | I ⊨ P ∧ Q → P ∨ ¬ Q I\models P\wedge Q\to P\vee \neg Q I⊨P∧Q→P∨¬Q | ( 4 ) a n d → (4) and \to (4)and→ |
可满足性与永真性
一个公式 F F F是可满足的(satisfiable)当且仅当存在一个解释 I I I使得 I ⊨ F I\models F I⊨F。
一个公式 F F F是永真的(valid)当且仅当对于所有解释 I I I, I ⊨ F I\models F I⊨F。
注意:可满足性与永真性是成对的(dual)符号,即 F F F是永真的当且仅当 ¬ F \neg F ¬F是不可满足的。
如何证明可满足性?
- 真值表穷举:蛮力搜索复杂度为 2 n 2^n 2n,其中 n n n为变元的数量
- 演绎推理:语义讨论
- 假定 F F F为非永真的,即存在 I I I, I ⊭ F I\not \models F I⊨F
- 应用推理规则
- 如果每一分支都得到矛盾,那么 F F F是永真的
- 如果没有矛盾,且不能进一步应用推理规则,那么 F F F是非永真的
语义规则
公式
I ⊨ ¬ F I ⊭ F \frac{I\models \neg F}{I\not \models F} I⊨FI⊨¬F
I ⊭ ¬ F I ⊨ F \frac{I\not \models \neg F}{I\models F} I⊨FI⊨¬F
I ⊨ F ∧ G I ⊨ F I ⊨ G \frac{I\models F\wedge G}{I\models F ~ I\models G} I⊨F I⊨GI⊨F∧G
I ⊭ F ∧ G I ⊭ F ∣ I ⊭ G \frac{I\not\models F\wedge G}{I\not \models F | I\not\models G} I⊨F∣I⊨GI⊨F∧G这个规则产生了分支
I ⊨ F ∨ G I ⊨ F ∣ I ⊨ G \frac{I\models F\vee G}{I\models F | I\models G} I⊨F∣I⊨GI⊨F∨G
I ⊭ F ∨ G I ⊭ F I ⊭ G \frac{I\not\models F\vee G}{I\not\models F~I\not \models G} I⊨F I⊨GI⊨F∨G
I ⊨ F → G I ⊭ F ∣ I ⊨ G \frac{I\models F\to G}{I\not\models F | I\models G} I⊨F∣I⊨GI⊨F→G
I ⊭ F → G I ⊨ F I ⊭ G \frac{I\not\models F\to G}{I\models F~I\not\models G} I⊨F I⊨GI⊨F→G
I ⊨ F ↔ G I ⊨ F ∧ G ∣ I ⊨ ¬ F ∧ ¬ G \frac{I\models F\leftrightarrow G}{I\models F\wedge G|I\models \neg F\wedge \neg G} I⊨F∧G∣I⊨¬F∧¬GI⊨F↔G
I ⊭ F ↔ G I ⊨ F ∧ ¬ G ∣ I ⊨ ¬ F ∧ G \frac{I\not \models F\leftrightarrow G}{I\models F\wedge \neg G|I\models \neg F\wedge G} I⊨F∧¬G∣I⊨¬F∧GI⊨F↔G
举例
- F : P ∧ Q F: P\wedge Q F:P∧Q
步骤 | 推理 | 备注 |
---|---|---|
1 | I ⊭ P ∧ Q I\not\models P\wedge Q I⊨P∧Q | assumption |
2 | $I\not\models P | 1 and ∧ \wedge ∧, case A |
3 | $I\not\models Q | 1 and ∧ \wedge ∧, case B |
- F : P ∧ Q → P ∨ ¬ Q F: P\wedge Q \to P\vee \neg Q F:P∧Q→P∨¬Q
步骤 | 推理 | 备注 |
---|---|---|
1 | I ⊭ F I\not \models F I⊨F | assum. |
2 | I ⊨ P ∧ Q I\models P\wedge Q I⊨P∧Q | 1 and → \to → |
3 | I ⊭ P ∨ ¬ Q I\not\models P\vee\neg Q I⊨P∨¬Q | 1 and → \to → |
4 | I ⊨ P I\models P I⊨P | 2 and ∧ \wedge ∧ |
5 | I ⊭ P I\not\models P I⊨P | 3 and ∨ \vee ∨ |
6 | ⊥ \bot ⊥ | 4 and 5 |
发现矛盾,所以 F F F是永真的。
注意: ⇒ \Rightarrow ⇒这样的双线箭头不属于命题逻辑的符号集。
范式(Normal Forms)
概念
一种逻辑的范式,应当:
- 限制公式的语法(Restricts the syntax of formulas)
- 对于此逻辑中的任意公式,范式具有等价的表达能力(Has equivalent representation for any formula in the logic)
三种主要范式
Negation Normal Form (NNF)
只包含 ∧ \wedge ∧, ∨ \vee ∨, ¬ \neg ¬三个符号,且 ¬ \neg ¬只能用于文字(literal)
Disjunctive Normal Form (DNF)
合取子句的析取
Conjunctive Normal Form (CNF)
析取子句的合取
举例:
命题 | 是否正确 |
---|---|
¬ P ∧ ¬ ( P ∨ Q ) \neg P\wedge\neg(P\vee Q) ¬P∧¬(P∨Q)是NNF | 否 |
¬ P ∧ ¬ Q ∨ R \neg P\wedge\neg Q\vee R ¬P∧¬Q∨R是DNF | 是 |
( ¬ P ∨ Q ) ∧ ( P → R ) (\neg P\vee Q)\wedge (P\to R) (¬P∨Q)∧(P→R)是CNF | 否 |
¬ P ∧ P \neg P\wedge P ¬P∧P是CNF | 是 |
范式转化
由于主流的SAT solver(就是一个程序,输入一个公式,输出这个公式是否是可满足的,例子见一个简单的DPLL实现)一般接受CNF为输入,所以面对一个一般的公式,我们需要先把它转化为一个CNF。如何实现?等价的转换比较困难,但是我们可以采用一种逻辑上更弱的方法,即进行可满足性等价(equisatisfiability)转换。也就是说,我不要求转换后的CNF与原来的公式在所有的解释下真值都一样,我只要求若CNF可满足,则原公式可满足;若原公式可满足,则CNF可满足。
转换的方法,可采用Tseitin 算法.
程序验证(一):命题逻辑相关推荐
- 安装oracle11g client 【INS-30131】执行安装程序验证所需的初始设置失败的解决方法
安装oracle11g client [INS-30131]执行安装程序验证所需的初始设置失败的解决方法 参考文章: (1)安装oracle11g client [INS-30131]执行安装程序验证 ...
- 人工智能——命题逻辑与谓词逻辑
图1 命题逻辑与谓词逻辑 1. 命题 具有真假意义的语句.无法表达结构和逻辑关系. 2. 谓词 谓词=谓词名+个体.谓词名:刻画个体的性质.状态.关系.大写字母表示.个体:独立存在的事物或抽象的概念. ...
- 【语言处理与Python】10.1自然语言理解\10.2命题逻辑
10.1自然语言理解 查询数据库 如果有人提出一个问题: Which country is Athens in? 得到的回答应该是: Greece. 这个数据可以通过数据库语言得到答案: SELECT ...
- [INS-30131] 执行安装程序验证所需的初始设置失败。
安装oracle11g或12C碰到"无法访问临时位置"的问题,详细信息如下: [INS-30131]执行安装程序验证所需的初始设置失败(原因:无法访问临时位置) 操作 - 请确保当 ...
- 计算理论入门 1.1 命题逻辑
1.1 命题逻辑 原文:Foundations of Computation 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 一个命题是一个或真或假的陈述. 在命题逻辑中,我们将 ...
- 离散数学知识点总结-命题逻辑
目录 命题 逻辑连接词 命题符号化 命题公式及其赋值 命题公式的等价 重言式与矛盾式 重言蕴含式 范式 主析取范式 主合取范式 命题逻辑推理 直接推理 间接推理 命题 命题是表达判断的陈述句. 判断一 ...
- 离散数学笔记(一)【集合、命题逻辑 、谓词逻辑】
一.集合 证明集合相等 n元集的子集个数 幂集 差集 对称差集 集合运算的基本等式 等势 Tips: 集族 Eg: 二.命题逻辑 命题 Tips:首先得是陈述句 否定连接词 合取连接词 Tips: 析 ...
- 【离散数学】数理逻辑 第一章 命题逻辑(5) 对偶式、对偶原理
本文属于「离散数学」系列文章之一.这一系列着重于离散数学的学习和应用.由于内容随时可能发生更新变动,欢迎关注和收藏离散数学系列文章汇总目录一文以作备忘.此外,在本系列学习文章中,为了透彻理解数学知识, ...
- 布尔-施罗德逻辑代数中的命题逻辑-- 布尔逻辑之七(尾篇**)
布尔-施罗德逻辑代数中的命题逻辑– 布尔逻辑之七(尾篇) 一.一级命题与二级命题 布尔在他的<思维法则研究>一书中,给出了他有关命题的一个新理论,建立在他的类逻辑演算的基础上.布尔不愧是想 ...
最新文章
- Oracle 变量绑定与变量窥视合集系列二
- 分享Kali Linux 2016.2第42周镜像文件
- operator conv_transpose1‘s input 1 is not linked
- python语音在线编辑-Python:语音处理,实现在线朗读RFC文档或本地文本文件
- 【SpringBoot专题】监控健康状况
- dubbo源码深度解析_Spring源码深度解析:手把手教你搭建Spring开发环境
- vue中router使用keep-alive缓存页面的注意事项
- php xml表格形式输出,PHP XML如何输出nice格式
- 凭借Google新算法 机器人自学行走平均只需3.5小时
- 实作 ASP.NET 多笔数据离线编辑
- springboot + mybatis +easyUI整合案例
- sublime text3 中 python3编译出现中文乱码解决方法
- redhat linux 设置ip,REDHAT LINUX企业版更改IP地址,网关,DNS和MAC地址----字符界面
- 单元测试报告软件测试,软件单元测试报告-模板
- 老卫带你学---DDSM乳腺癌数据研究
- Python使用matplotlib可视化哑铃图、强调从一个点到另一个点的变化、数量的变化、客户满意度的变化等(Dumbbell Plot)
- 小学计算机课第二课堂活动总结,小学课外活动总结范文_2020小学第二课堂工作总结精选...
- has been blocked by CORS policy: Response to preflight request doesn‘t pass access control check
- android 手机模拟低内存
- IntelliJ IDEA终于支持对Redis 的可视化窗口操作了,真香!