SAT和SMT

SAT

1. introduction


在逻辑和计算机科学中,布尔可满足性问题(有时称为命题可满足性问题,缩写为SATISFIABILITY,SAT或B-SAT)是确定是否存在满足给定布尔公式的解释的问题。 换句话说,它询问给定布尔公式的变量是否可以用值TRUE或FALSE一致地替换,以使该公式的值为TRUE。 在这种情况下,该公式称为可满足的。 另一方面,如果不存在这样的分配,则对于所有可能的变量分配,由公式表示的函数为FALSE,并且该公式不满足要求。 例如,公式“ a AND NOT b”是可满足的,因为可以找到a = TRUE和b = FALSE的值,这使得(a AND NOT b)= TRUE。 相反,“ a AND NOT a”是不可满足的。

尽管SAT问题被证明是NP问题,截至2007年,启发式SAT算法仍能够解决涉及数以万计的变量和由数百万个符号组成的公式的问题实例,足以解决人工智能、电路设计、自动定理证明等许多实际的SAT问题。

2. Basic definitions and terminology


命题逻辑公式(也称为布尔表达式)是根据变量,运算符AND(连接),OR(连接),NOT(否定)和括号构建的。 如果可以通过为其变量分配适当的逻辑值(即TRUE,FALSE)将其设为TRUE,则认为该公式是可满足的。 给布尔可满足性问题(SAT)给出一个公式,以检查它是否可满足。 这个决策问题在计算机科学的许多领域都至关重要,包括理论计算机科学,复杂性理论,算法,密码学和人工智能。

布尔可满足性问题有几种特殊情况,其中要求公式具有特定的结构。 文字是一个变量,称为正文字,或者一个变量的取反,称为负文字。 子句是文字(或单个文字)的析取。 如果一个子句最多包含一个正文字,则该子句称为Horn子句。 如果公式是子句(或单个子句)的连接,则它是合取范式(CNF)。

例如,x1是一个正文字,¬x2是一个负文字,x1∨¬x2是一个字句。 表达式 ( x 1 ∨ ¬ x 2 ) ∧ ( ¬ x 1 ∨ x 2 ∨ x 3 ) ∧ x 1 (x_1∨¬x_2)∧(¬x_1∨x_2∨x_3)∧x_1 (x1¬x2)(¬x1x2x3)x1为合取范式; 它的第一和第三子句是Horn子句,但第二子句不是。 若 x 1 = F A L S E x_1 = FALSE x1=FALSE x 2 = F A L S E x_2 = FALSE x2=FALSE,x3随意选择可以满足该公式。相反,由一个文字的两个子句组成的CNF公式 a ∧ ¬ a a∧¬a a¬a是不满足的。

使用布尔代数定律,每个命题逻辑公式都可以转换为等效的合取范式,但是形式可能更长。 例如,将公式 ( x 1 ∧ y 1 ) ∨ ( x 2 ∧ y 2 ) ∨ . . . ∨ ( x n ∧ y n ) (x1∧y1)∨(x2∧y2)∨...∨(xn∧yn) (x1y1)(x2y2)...(xnyn)转换为合取范式
在这里插入图片描述
前者是n个2个变量的合取的析取,后者是n个变量的 2 n 2^n 2n个字句组成。

3. Complexity and restricted versions


3.1 Unrestricted satisfiability (SAT)

Main article: Cook–Levin theorem

SAT是第一个已知的NP完全问题。 在此之前,甚至不存在NP完全问题的概念。 证明表明,对于CNF公式,复杂度NP中的每个决策问题都可以简化为SAT问题(称为CNFSAT)。 库克归约法的一个有用特性是,它保留了接受答案的数量。 例如,确定给定图是否具有3色是NP中的另一个问题。 如果图形具有17种有效的3种颜色,则由Cook-Levin归约法产生的SAT公式将具有17个令人满意的赋值。

NP完整性仅指最坏情况实例的运行时间。 在实际应用中发生的许多情况可以更快地解决。 请参阅下面的求解SAT的算法。

3.2 some restricted satisfiability

4. Algorithms for solving SAT


由于SAT问题是NP完全问题,因此仅知道具有指数最坏情况复杂度的算法。 尽管如此,在2000年代开发了高效且可扩展的SAT算法,并为我们自动解决涉及数万个变量和数百万个约束(即子句)的问题实例的能力做出了巨大进步。 电子设计自动化(EDA)包括形式对等检查,模型检查,流水线微处理器的形式验证,自动测试模式生成,FPGA布线,计划和调度问题,等等。 如今,SAT求解器引擎已被视为EDA工具箱中的重要组成部分。

DPLL SAT求解器采用系统的回溯搜索过程来探索变量分配的(指数大小)空间,以寻找令人满意的分配。 1960年代初期,在两篇开创性的论文中提出了基本搜索程序(请参见下面的参考文献),现在通常将其称为Davis-Putnam-Logemann-Loveland算法(“ DPLL”或“ DLL”)。 从DPLL算法派生出许多现代的实际SAT解决方法,它们共享相同的结构。 通常,它们只会提高某些SAT问题的效率,例如工业应用中出现的实例或随机生成的实例。 从理论上讲,已经证明了DPLL系列算法的指数下界。

SMT

1. introduction

在计算机科学和数学逻辑中,关于经典一阶逻辑具有相等性的背景理论的组合,可满足性模理论问题是逻辑公式的决策问题。 计算机科学中通常使用的理论示例包括实数理论,整数理论以及各种数据结构(例如列表,数组,位向量等)的理论。 SMT可以看作是约束满足问题的一种形式,因此可以看作是约束编程的一种形式化方法。

2. 基本术语

从形式上来讲,SMT实例是一阶逻辑中的一个公式,其中某些函数和谓词符号具有附加的解释,而SMT是确定此类公式是否可满足的问题。换句话说,想象一个布尔可满足性问题(SAT)的实例,其中一些二进制变量被适合的一组非二进制变量上的谓词替换。谓词是非二进制变量的二进制值函数。谓词示例包括线性不等式(例如, 3 x + 2 y − z ≥ 4 3x + 2y − z ≥ 4 3x+2yz4)或包含未解释术语和函数符号的等式(例如, f ( f ( u , v ) , v ) = f ( u , v ) f(f(u, v), v)= f(u, v) f(f(u,v),v)=f(u,v),其中f是两个自变量的某些未指定函数)。这些谓词根据分配的每个相应理论进行分类。例如,使用线性实数算术理论的规则评估实变量上的线性不等式,而使用具有相等性的未解释函数的理论规则评估涉及未解释项和函数符号的谓词(有时称为空论) )。其他理论包括数组和列表结构的理论(对计算机程序的建模和验证很有用),以及位向量的理论(对建模和验证硬件设计有用)。子理论也是可能的:例如,差分逻辑是线性算术的子理论,其中对于变量x和y以及常数c,每个不等式都被限制为具有x − y> c的形式。

3. 定义

T = ( Σ , I ) T = (\Sigma,I) T=(Σ,I)
T T T指Theory理论, Σ \Sigma Σ指词汇表signatrue, I I I指一个interpretation解释的类

如果说解释I使公式 ϕ \phi ϕ满足,则称I是T的模型。

词汇表

和英语之类的自然语言不同,一阶逻辑的语言是完全形式的,因为可以机械式地判断一个给定的表示式是否合法。存在两种合法的表示式:“项”(直观上代表物件)和“公式”(直观上代表可真或伪的断言)。一阶逻辑的项与公式是一串符号,这些符号一起形成了这个语言的词汇表。如同所有的形式语言一般,符号本身的性质不在形式逻辑讨论的范围之内;它们通常只被当成字母及标点符号。

一般会将词汇表中的符号分成“逻辑符号”(总有相同的意思)及“非逻辑符号”(意思依解释不同而变动)。例如,逻辑符号 总是解释成“且”,而绝不会解释成“或”。另一方面,一个非逻辑断言符号,如Phil(x) ,可以解释成“x是哲学家”、“x的个名为Phil的人”或任何其他的1元断言,单看其解释为何。

  1. 逻辑符号
    词汇表中存在若干个逻辑符号,虽然会因作者而异,但通常包括:

    1. 量化符号任意及存在。
    2. 逻辑联结词:或 、且 、条件 、双条件 及否定 。偶尔还会包括一些其他的逻辑联结词。
    3. 括号、方括号及其他标点符号。此类符号的选择依文章不同而有所不同。
    4. 无限集的变数,通常标记为英文字母末端的小写字母 ,也常会使用下标来区别不同的变数: 。
    5. 一个等式符号= 。详见下面的“等式”一节。
      需注意,并不是所有的符号都需要,只要有量化符号的其中一个、否定及且、变数、括号及等式就足够了。还存在许多定义了额外逻辑符号的变体:
    6. 有时也会包括真值常数,用T、Vpq或 来表示“真”,并用F、Opq或 来表示“假”。若没有此类零参数的逻辑算符,这两个常数就只能用量化来表示。
    7. 有时也会包括额外的逻辑联结词,如谢费尔竖线、NAND及异或。
  2. 非逻辑符号
    非逻辑符号用来表示论域上的断言(关系)、函数及常数。以前标准上会对所有不同的用途使用相同的无限集的非逻辑符号,而最近则会根据应用的不同而使用不同的非逻辑符号。因此变得需要列举出使用于一特定应用中的所有非逻辑符号。其选择是经由标识来形成的。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值