自动推理笔记

news/2024/11/20 23:20:47/文章来源:https://www.cnblogs.com/redwind/p/18286564

命题逻辑(还记得我吗?)

命题公式

由若干布尔变量和运算符($\neg, \cap, \cup, \rightarrow, \leftrightarrow$)得到的公式

有一些命题,我们能否从中得到另一个命题

将问题转化成更“正式”的问题

使用自动化程序解决“正式”的问题

 

通过形式化,可以将每个概念转化成符号

 

方法1:真值表证明该式为重言式,如果能证明是重言式,那么就能证明

但是,这个方法是O(2^n)的,虽然在这里还可以,但是如果n再大就不好用了

方法2:可满足式

一个式子是可满足的,如果其值可以为真

反之,如果其值恒为假,那么则不可满足

 如果一个式子是重言式,那么这个式子的否命题就是不可满足式

判定一个式子是否是可满足式的任务被称为SAT(short for satisfiability)

许多问题可以变成SAT,比如想要检测一个微处理器是否运作正常,可以用另一个微处理器与其比较,如果非(micro1<->micro2)不可满足

不过,所有已知的方法最差的情况下都是指数级的

鸽巢公式:一个不可满足公式,但想要证明公式本身不可满足比较困难

有n*(n+1)个布尔变量

设$C_n=\bigwedge_{j=1}^{n+1}(\bigvee_{i=1}^{n}P_{ij})$

$R_n=\bigwedge_{i=1...n, 1\leq j <k \leq n+1}(\neg P_{ij} \cup \neg P_{ik})$

$PF_n=C_n \cap R_n$

 

Same for disjunction

可以把上面的式子换成矩阵

 

于是,$C_n$的意思就是,对于第j列,至少有一项为真,而j从1至n,所以就是每一列都要有至少一项为真

所以至少有n+1项为真

而对于$R_n$的意思,对于第i行而言,每两个变量里至多有一个为真,所以n行最多有n个变量为真

而$PF_n$要求$C_n$和$R_n$都为真,这是不可能的。

鸽巢原理:如果有n+1个鸽子进了n个巢穴,至少有一个巢穴进了两个鸽子

注意到,所有的约束都是必须的,如果有一个约束被移除,那么式子就变成可满足式了

这里我们也看到了$C_n$是至少一个而$R_n$是至多一个,我们之后会经常用到。

使用计算机证明鸽巢式是很困难的

接下来我们会见识一种无关可满足性,常用自动推理解决的问题

模型验证:

 

如果二者为真,那么给二者赋假

问题:能否从全真到全假?

同样,类似的问题可能有很多状态,如果想要一个一个搜索过去会很困难

模型检测:

有有限个状态,有起始状态、转移方式,一些需要到达的状态,问是否能到达

程序检验:可能需要同时考虑多种状态转移,非确定性的状态

我们称初始状态的描述以及状态转移的描述为模型,因此检测一个模型是否具有某些性质就叫模型检验

将模型的描述形式化为符号,之后作检验的方法称为符号模型检验

自然,我们检验可以用SAT,但我们需要考虑更好的模型,这被称作重要的(Crucial)模型

SAT的解法:Z3、Yices

 一种基本的符号模型检测方法:Binary Decision Diagrams(二进制决策图),NuSMV。

并非所有命题都可以转化成命题逻辑,首先是SMT:Satisfiablity Modulo Theories,可满足性模型理论,这里主要研究线性不等式的理论,即变量不只是布尔,而是整数和实数

注意,SMT依然适用SAT的一些术语,比如说给整数赋值如果能满足,那么依然称为SAT

SMT-LIB语法

 

 

注意是语法使用的是前缀表达式,2*a=(* 2 a)

 

 

SMT可以转化成SAT解决

当然,还有比命题逻辑更难的逻辑,谓词逻辑

 不再限制域在数值上,而是在集合上

$\forall$ and $\exists$

等式逻辑

 基本上就是数理逻辑的完整部分了

模型逻辑/时序逻辑(temporal logic)

Computation Tree Logic,计算树逻辑

首先是命题逻辑

时间复杂性和空间复杂性

magnitude,规模

$f(n)=O(g(n))$

注意$\Omega$是指式子大于等于

SAT无线性时间

决策问题

决策问题是指你问一种事,回答你是或者否

P是指所有有多项式算法的决策问题,即在多项式时间内可以回答你问的事

引入证据(certificate,验证方法,中文常常称作解而且不这么说)一词

NP问题是指:

如果一个决策问题的正确结果是否,那么其一定没有可供验证的解

如果正确结果是真,那么我们可以在多项式时间内验证某个解是否符合要求

以SAT为例子,如果决策问题结果本身就绝对不可满足,那么自然不可能找到一个解,而如果可满足,那么才能多项式时间内验证

对于大部分问题这挺显然的,不过对于素数判定似乎有点问题,可以开学问老师

非确定性线性时间

很显然,P问题全都是NP问题

但是我们无法确定NP问题是否都是P问题

NP完全问题:如果有一个NP问题A,而且假设A也是P的,那么可以得到P=NP,那么称A为NP完全。或者也就是说所有NP问题可以归约到这个问题上

(注意,规约并不是双向的,考虑解二元一次方程和解一元一次方程,二元一次方程归约到一元一次方程是可能的,但反过来是不可能的)

SAT是NP完全的,因此许多其他问题也是NP完全的。此外,SAT可以规约到其他一切问题上,但反之则不可

由于NP完全问题存在,所以不太可能有P的

SAT是地基

一些典型NPC问题:走过所有点,是否有路径≤n?

这一问题与TSP密切相关(自我练习TSP<->SAT)

给一个无向图,是否存在一个哈密尔顿回路,经过每个点恰好一次?

给一些东西,能否将其分成两组,两组重量相同?

命题逻辑中的算数:二进制算术=命题逻辑算数

由于算数可以转化成二进制算术,而二进制算术可以使用SAT来考虑性质,所以我们可以将算术问题转化成SAT

 

乘法也可以做,不过考虑到乘法其实是加法的重复,所以可以重用加法,我们后面会进一步了解这方面的内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/740053.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springmvc中转发和重定向

配置IndexControllerpackage com.powernode.springmvc.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView;@Controller public class Inde…

编译过程简介

编译过程一般可以分为6步:扫描、语法分析、语义分析、源代码优化、代码生成和目标代码优化。整个过程词法分析:扫描器扫描代码之后,将代码生成一个个token 语法分析:语法分析器对token进行语法分析,最后生成一个语法树对于不同的编程语言,可以共用一个语法分析器,因为只…

回顾 DTC 2024 大会——聚焦数据技术创新:揭秘下一代纯实时搜索引擎 INFINI Pizza

2024 年 4 月 12 日至 13 日,备受瞩目的第十三届“数据技术嘉年华”(DTC2024)在北京新云南皇冠假日酒店盛大开幕。本次大会由中国 DBA 联盟(ACDU)与墨天轮社区联合主办,以“智能云原生一体化——DB 与 AI 协同创新,模型与架构融合发展”为主题,旨在推动数据技术的创新与…

Java 字符串拼接原理

原文:Java 字符串拼接原理我们知道 Java 可以直接使用加号+来拼接字符串。 字符串+拼接的本质是使用StringBuilder.append()(已在Java8测试通过),最终如果要赋值给字符串变量时,会调用toString()。 /*** 字符串追加*/ @Test public void testStrAppend() {/** + 之前先隐式…

scope-sentry-数据泄露规则提取

工具简述 Scope Sentry是一款具有资产测绘、子域名枚举、信息泄露检测、漏洞扫描、目录扫描、子域名接管、爬虫、页面监控功能的工具,通过构建多个节点,自由选择节点运行扫描任务。当出现新漏洞时可以快速排查关注资产是否存在相关组件。 对该工具分析主要是分析内部的信息泄…

es8.x 版本使用及 java api client

1.为什么不使用High Level REST Client 了 那在 ElasticSearch 7.15.0 版本开始,官方又不建议使用 High Level REST Client 了,为什么呢?因为它是基于原生的 REST API,而这些 API 在某些情况下限制了某些功能的性能优化。与此同时,官方也推出了 Elasticsearch Java 客户端…

7.7-DPday1

动态规划理论基础什么是动态规划 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的 在关于贪心…

gitlab私有仓库搭建

安全:关闭防火墙,selinux 1.安装GItlab所需的依赖包 yum install curl policycoreutils-python openssh-server postfix wget -y安装gitlab 获取gitlab源码包 选择各种yum源去安装 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.3-ce.0.el7.x86_64…

[LeetCode] 134. Gas Station

想到了提前判断和小于0的情况,懒得写,果然被阴间用例10万个加油站坑了。 class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:#1n = len(gas)if n ==1:if gas[0] >= cost[0]:return 0else:return -1#-1startpoint =[gas[x] - cost[…

算法金 | 推导式、生成器、向量化、map、filter、reduce、itertools,再见 for 循环

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」不要轻易使用 For 循环 For 循环,老铁们在编程中经常用到的一个基本结构,特别是在处理列表、字典这类数据结构时。但是,这东西真的是个双刃剑。虽然看起来挺直白,一…

(三)变分自动编码器

过去虽然没有细看,但印象里一直觉得变分自编码器(Variational Auto-Encoder,VAE)是个好东西。于是趁着最近看概率图模型的三分钟热度,我决定也争取把VAE搞懂。于是乎照样翻了网上很多资料,无一例外发现都很含糊,主要的感觉是公式写了一大通,还是迷迷糊糊的,最后好不容…