程序验证(一):命题逻辑

概念

命题逻辑

例如 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为变元的数量
  • 演绎推理:语义讨论
  1. 假定 F F F为非永真的,即存在 I I I, I ⊭ F I\not \models F I​⊨F
  2. 应用推理规则
  3. 如果每一分支都得到矛盾,那么 F F F是永真的
  4. 如果没有矛盾,且不能进一步应用推理规则,那么 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​

举例

  1. 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
  1. 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 算法.

程序验证(一):命题逻辑相关推荐

  1. 安装oracle11g client 【INS-30131】执行安装程序验证所需的初始设置失败的解决方法

    安装oracle11g client [INS-30131]执行安装程序验证所需的初始设置失败的解决方法 参考文章: (1)安装oracle11g client [INS-30131]执行安装程序验证 ...

  2. 人工智能——命题逻辑与谓词逻辑

    图1 命题逻辑与谓词逻辑 1. 命题 具有真假意义的语句.无法表达结构和逻辑关系. 2. 谓词 谓词=谓词名+个体.谓词名:刻画个体的性质.状态.关系.大写字母表示.个体:独立存在的事物或抽象的概念. ...

  3. 【语言处理与Python】10.1自然语言理解\10.2命题逻辑

    10.1自然语言理解 查询数据库 如果有人提出一个问题: Which country is Athens in? 得到的回答应该是: Greece. 这个数据可以通过数据库语言得到答案: SELECT ...

  4. [INS-30131] 执行安装程序验证所需的初始设置失败。

    安装oracle11g或12C碰到"无法访问临时位置"的问题,详细信息如下: [INS-30131]执行安装程序验证所需的初始设置失败(原因:无法访问临时位置) 操作 - 请确保当 ...

  5. 计算理论入门 1.1 命题逻辑

    1.1 命题逻辑 原文:Foundations of Computation 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 一个命题是一个或真或假的陈述. 在命题逻辑中,我们将 ...

  6. 离散数学知识点总结-命题逻辑

    目录 命题 逻辑连接词 命题符号化 命题公式及其赋值 命题公式的等价 重言式与矛盾式 重言蕴含式 范式 主析取范式 主合取范式 命题逻辑推理 直接推理 间接推理 命题 命题是表达判断的陈述句. 判断一 ...

  7. 离散数学笔记(一)【集合、命题逻辑 、谓词逻辑】

    一.集合 证明集合相等 n元集的子集个数 幂集 差集 对称差集 集合运算的基本等式 等势 Tips: 集族 Eg: 二.命题逻辑 命题 Tips:首先得是陈述句 否定连接词 合取连接词 Tips: 析 ...

  8. 【离散数学】数理逻辑 第一章 命题逻辑(5) 对偶式、对偶原理

    本文属于「离散数学」系列文章之一.这一系列着重于离散数学的学习和应用.由于内容随时可能发生更新变动,欢迎关注和收藏离散数学系列文章汇总目录一文以作备忘.此外,在本系列学习文章中,为了透彻理解数学知识, ...

  9. 布尔-施罗德逻辑代数中的命题逻辑-- 布尔逻辑之七(尾篇**)

    布尔-施罗德逻辑代数中的命题逻辑– 布尔逻辑之七(尾篇) 一.一级命题与二级命题 布尔在他的<思维法则研究>一书中,给出了他有关命题的一个新理论,建立在他的类逻辑演算的基础上.布尔不愧是想 ...

最新文章

  1. Oracle 变量绑定与变量窥视合集系列二
  2. 分享Kali Linux 2016.2第42周镜像文件
  3. operator conv_transpose1‘s input 1 is not linked
  4. python语音在线编辑-Python:语音处理,实现在线朗读RFC文档或本地文本文件
  5. 【SpringBoot专题】监控健康状况
  6. dubbo源码深度解析_Spring源码深度解析:手把手教你搭建Spring开发环境
  7. vue中router使用keep-alive缓存页面的注意事项
  8. php xml表格形式输出,PHP XML如何输出nice格式
  9. 凭借Google新算法 机器人自学行走平均只需3.5小时
  10. 实作 ASP.NET 多笔数据离线编辑
  11. springboot + mybatis +easyUI整合案例
  12. sublime text3 中 python3编译出现中文乱码解决方法
  13. redhat linux 设置ip,REDHAT LINUX企业版更改IP地址,网关,DNS和MAC地址----字符界面
  14. 单元测试报告软件测试,软件单元测试报告-模板
  15. 老卫带你学---DDSM乳腺癌数据研究
  16. Python使用matplotlib可视化哑铃图、强调从一个点到另一个点的变化、数量的变化、客户满意度的变化等(Dumbbell Plot)
  17. 小学计算机课第二课堂活动总结,小学课外活动总结范文_2020小学第二课堂工作总结精选...
  18. has been blocked by CORS policy: Response to preflight request doesn‘t pass access control check
  19. android 手机模拟低内存
  20. IntelliJ IDEA终于支持对Redis 的可视化窗口操作了,真香!

热门文章

  1. c++课设学生成绩与学籍管理系统
  2. 微信小程序下拉框之二维数组或对象
  3. 建筑工程项目财务管理风险及防控浅析
  4. 成都玖益科技:优化店铺关键词的技巧
  5. 使用快客引流脚本,你不得不知的引流脚本相关知识
  6. Firefox 55 默认不激活 Flash
  7. ubuntu18.04切换用户
  8. 在cmd里怎样复制和粘贴
  9. VNC服务器搭建及局域网使用
  10. 尚硅谷和尚学堂的区别_传智播客和尚学堂哪个更好些啊?