首页 > 其他分享 >A Primer on Boolean Satisfiability 布尔满足性入门介绍

A Primer on Boolean Satisfiability 布尔满足性入门介绍

时间:2023-02-01 23:55:14浏览次数:51  
标签:f1 f2F Satisfiability F2 满足 Boolean Primer true SAT

SAT问题: 给定一个布尔表达式,看是否有一组赋值使得表达式为true.

SAT属于典型的NP完全问题,决定SAT的最坏情况是2的n次方,尝试n个变量的所有可能的组合。

涉及到的名词:

语法:命题逻辑中的公式,由常量、变量和逻辑连接符组成。两个常量符号⊤(true)和⊥(false)

  • 原子
    • 一个常数 ⊤(真)⊥(假)
    • 一个变量 .x 1,x2,x 3,...
  • 文字是一个原子或者对应的非值¬
  • 公式是一个原子或逻辑连接词对公式的应用:
    • f1¬f1(非)
    • f1∧f2F 1∧F2(和)
    • f1∨f2F 1∨F2(或)
    • f1→f2F 1→F2(单向映射)
    • f1↔f2F 1↔F2(双向映射)

 

语义学:公式的含义是真值的一种解释,比如{X1 -> false, X2 ->true} is one possible interpretation for the formula ¬x1∧x2

如果表达式f 在解释I 下 取值为true, 则表示为 I |= f

逻辑关系:

 

 可满足性:表达式 f 在且仅在解释 I 下为真, 称为f为可满足式   ,否则f为不满足式。

 确定性:表达式f 当且仅当在解释I 下结果为真。

 

 二重性:满足性和有效性是彼此相辅相成的

 如果有办法检查可满足性,也可以用同样的办法检查确定性。所以SAT 求解器可以用来解决这两个问题。

 检查满足性 和 有效性  

两种方式:搜索和演绎

搜索的思路:在每一个可能的解释下,计算其结果是否为True

演绎的思路:假设f 不确定,推导所有可能的假设

 

 一般情况下SAT的形式

三种范式

NNF 否定范式 negation normal form 

DNF 析取范式 disjunctive normal form

CNF 合取范式 conjunctive normal form

 

 

SAT求解器的输入是CNF,原因在于 如果将一个公式转换为等效的DNF,可能会导致复杂度呈指数增长。

 

 

 

 

 

 

 

FROM

Emina Torlak:布尔满足性入门 (washington.edu)

标签:f1,f2F,Satisfiability,F2,满足,Boolean,Primer,true,SAT
From: https://www.cnblogs.com/oceaning/p/17084538.html

相关文章

  • Boolean.getBoolean(String name) 和Boolean.parseBoolean(String s)的区别
    最近在使用Boolean.场景是String的true,或者false转换成boolean基本类型的布尔型。随意的选了一个getBoolen但是在做单元测试的时候验证不通过。仔细看了下Boolean的源......
  • PostgreSQL数据类型-boolean
    PostgreSQL支持SQL标准的​​boolean​​​数据类型。​​boolean​​只能有"true"(真)或"false"(假)两个状态之一,第三种"unknown"(未知)状态,用NULL表示。真值的有效......
  • C Primer Plus (6.16) 編程練習
    /*CPrimerPlus(6.15)6*/1#include<stdio.h>2intmain()3{4inti,j;5for(inti=0;i<4;i++)6{7for(intj=0;j<8;j++)8{9printf("$");1......
  • C++ Primer第三章知识点(想起来啥记啥版)
    命名空间#include<iostream>//using声明,当我们使用名字cin时,从命名空间std中获取它usingstd::cin;intmain(){inti;cin>>i;//正确:cin和st......
  • C++ Primer知识点(想起来啥记啥版)
    使用作用域操作符获取全局变量的值#include<iostream>//该程序仅用于说明:函数内部不宜定义与全局变量同名的新变量intreused=42;intmain(){intunique=......
  • Java千问10:你知道Java语言boolean类型的变量到底占多大空间吗?
    ​我们都知道,Java语言中有个boolean类型。每个boolean类型的变量中存储的是一个true或者是false的逻辑值。那么存储这个逻辑值,需要多大的空间呢?从理论上来讲,存储这个逻辑值......
  • mysql监测工具tuning-primer.sh
    下载地址:​​https://launchpad.net/mysql-tuning-primer​​将tuning-primer.sh放在mysql所在的server,若出现如下错误[root@hbase1~]#shtuning-primer.shallwhich:......
  • C Primer Plus 5.11 編程練習
    /*CPrimerPlus(5.10)9*/1#include<stdio.h>2#defineG1033intmain()4{5charch=96;67while(ch++<G)8{9printf......
  • C++Primer
    第2章2.1基本内置类型1、表示整数、字符和布尔值的算术类型合称为**整型**2、0值算术类型代表false,任何非0的值都代表true3、在一行末尾加“\”,可将此行和下一行当......
  • IfcBooleanChoose
    IfcBooleanChoose功能定义如果为TRUE,则返回第一个选项,否则返回第二个选项。 注:根据ISO/IEC10303-42:1992的定义此函数根据布尔输入参数的值返回两个选项之一。这两......