二进制级别自动漏洞检测(四)

关于SMT(Satisfiability Modulo Theories)学习

SAT解决器是自动的、有效的。所以它们通常被用于软件检测的“引擎”。但是通常系统以一种比布尔要高级的语言形式来设计,并且将这种逻辑转化到布尔逻辑的做法是很昂贵的。所以SMT(Satisfiability Modulo Theories)就是一种有效的推理“引擎”能在更高的抽象级别上进行本地推理,同时能保证SAT高效率和全自动的能力。
将从以下的几个方面来阐述:

  • 一阶逻辑
  • 具体理论问题
  • 如何理论解决
  • 结合理论的具体解决方式
  • 联合SAT
  • SMT模型
    先附上关于离散数学的中英文对照表来方便之后的学习。
    离散数学中英文对照表

一阶逻辑

SAT求解器的语言是布尔逻辑,而SMT求解器的语言是一阶逻辑。该语言包含布尔逻辑的布尔运算,但使用了更复杂的表达式,包括常量、函数和谓词符号,而不是命题变量。和命题逻辑一样,一阶逻辑表达式是由符号序列组成的。而符号分为逻辑符号非逻辑符号参数
逻辑符号:

  • 括号:( )
  • 命题连接词:¬,∨, ∧, →, ↔
  • 变量:v1,v2…
  • 量词:∀,∃

参数:

  • 等于符号:=
  • 谓词符号:p(x),x>y
  • 常量符号:0,John
  • 函数符号:f(x),x+y

每一个谓词和函数符号都有一个关联参数(arity,就是关系中的参数):一个自然数,指示它需要多少个参数。等于符号是一个需要两个的关联参数的特殊谓词。常量符号也可以被认为是函数,其关联参数是0。
一阶逻辑语言首先需要明确它的参数
对于有n个关联参数的函数符号f,我们定义了一个术语构建的操作符F:F(a1,…,an)=fa1,…,an;所以说术语集是通过F的操作从常量符号和变量生成的表达式集,该表达式也是用于命名对象的表达式。原子公式是一个P t1,…,tn的表达式形式,其中P有n个关联参数的谓语并且t1,…,tn是术语。如果语言中包括等于符号,我们认为等号是一个有两个关联参数的特数谓词。
我们定义以下构建的表达式来解释上面的定义:

  1. E¬(α) = (¬α)
  2. E→(α, β) = (α → β)
  3. Qi(α) = ∀ vi α
    一系列定义好的公式是由一些原子公式表达式产生的,而这些原子表达式是由操作数E和Qi(α) i=1,2…;接下来有一些例子来联系关于上面提到得概念。几个例子
    自由变量和约束变量在一个含有量词的命题形式中,区分个体词受量词的约束还是不受量词的约束时重要的。无论在定义合式公式以及对个体变量作为代入时都需要区分这两种情况。所以,若P(x)表示x是有理数,这是变量x不受任何量词约束,就称为自由变量。而(∀x)P(x)中的两处出现的变量x都受量词∀的约束,便称作约束变量,受约束的变量也称被量词量化的变量。
    接下来讲解语义,首先从语义学角度来解析。简单地说,所谓语义,不管是自然语言的语义还是形式语言的语义,基本上就是两个系统之间的映射关系。自然语言的语义,是语言符号和我们大脑中概念之间对应;而形式语言的语义,则是符号系统和某个学科的知识体系之间建立的对应关系,现在研究最多的是符号系统与数学结构之间的映射关系,以及符号系统与哲学体系之间的对应关系。如果要用一个统一的概念表达符号系统所对应的其它学科知识体系,那么这个概念就是【模型】。
    所以简明扼要的表示为:语义:符号系统->模型
    模型,在我们日常生活语言中,通常称作“语境”、“上下文”、“世界”、“背景”、“客观环境”等,但是这些表达通常意义模糊,无法准确、精确地把握模型的基本概念。模型的概念,在数学中,又称作结构,这是对任何数学分支、数学对象的一种统称。不过在逻辑学,模型是更广泛使用的概念,故我们这里通常使用“模型”作为基本的术语。
    一个一阶谓词逻辑系统,就是这样的形式语言符号系统,它的的句法成分就是我们前面内容所介绍的常项、变项、谓词、量词和句子。它的句法规则就是我们用统一的归纳法所定义的规则程式:1. 设定基本概念为该语言的良形表达式(wff);2. 如果表达式A是wff,则操作φ(A)生成的表达式也是wff;3. 如果表达式A是wff且表达式B是wff,则操作ψ(A, Β)生成的表达式也是wff 4. 本语言的任何表达式是wff当且当该表达式是由上述1-3规则生成。
    由这样的句法规则生成的句子的集合,称作一阶语言(first order language)。通常一阶语言的句法层面称作该语言的形式层面。一阶语言的形式层面就是一个由有限多、或无限多没有任何意义的符号按照上面的规则建立的字符串集合。如果要让我们的一阶语言产生意义,就必须要创建/设定一个模型,按照一定的映射规则建立该语言元素与模型对象之间的对应,或者称作绑定。这里要注意的是,这个被映射模型,并不属于一阶语言,模型只是某个特定学科、知识体系的数学化表示,或者称作‘建模’
    形式语言的基本元素则没有固定的(predefined)语义,或者说根本就没有语义,只有在和一个特定的模型人为‘绑定’之后才产生语义,这时我们可以说,这个语言得到了‘解释’ (interpretation)。而‘解释’,并不属于这个形式语言的一部分。因为我可以拿这个语言和其它结构建立绑定关系,这个时候语言中的元素得到新的‘解释’。换句话说,形式语言的语义论并不属于相关形式系统的一部分,因为其语义解释端看和哪个模型绑定。形式语言的这种特性,使得它可以作为多种学科的基础语言,这也是为什么逻辑学是多门学科精密化基础的原因。
    语义,在命题逻辑中,公式的真值是由命题符号上的真值分配决定的。而在一阶逻辑中,我们用模型(也被称作是结构)来决定这个公式的真假。一个签名是一系列非逻辑符号(谓词,常量和函数),给定一个签名Σ,这个Σ的一个模型M包含以下内容:
  4. 一个称作域M的非空集,写作dom(M);dom(M)的元素也成为M的元素。
  5. 一个在Σ中每个常量c到M中的一个元素cM的映射。
  6. 一个在Σ中的每个函数符号f映射到[dom(M)]中的函数[dom(M)]n。
  7. 一个在Σ中的每个谓词符号p映射到pM ⊆ [dom(M)]n,一个n-ary关联到dom(M)。
    通常我们在讨论签名模型时经常用一种简写模式。签名的简写列出了所有在签名中的符号;而模型的简写列出了签名的域和每个符号的解释。因此集合论的签名可以描述为(∈,∅)。

为了形成模型映射可以写成以下模式,给定一个模型M,一个变量分配任务是一个函数s完成的,它给每个变量赋值一个M中的一个元素。给定一个合取公式φ,我们说M用s求解了φ,并且如果在M中用s来做变量赋值让φ为真,则记作**|=M φ[s]**。为了定义这个概念并公式化,我们首先定义这个扩展式:s : T → dom(M ),一个从集合T的所有项映射到M的定义域的函数:

  1. 对于每个变量x,s1(x) = s2(x)
  2. 对于每个常量符号c,s1©=cM
  3. 如果t1,…,t2是术语,f是有n个关联参数的函数符号,那么s1(ft₁, . . . , tn) = f M (s1(t₁), . . . , s1(tn))

模型映射
(s(x|d)表示这个函数除了x处的值是d之外,其他地方都和s相同)

逻辑的定义,假设Σ是一个签名,一个Σ公式是一个标准格式,并且带有无逻辑符号公式。命名Γ为一组Σ公式, 写|=M Γ[s]表明 |=M φ[s] 对Γ中每一个都进行了映射φ ∈ Γ。通过上面的定义(Γ是一组Σ公式,φ是这组公式中的任意一个)可以说 Γ逻辑蕴含φ,记作Γ |= φ,即如果 |=M Γ[s] 那么 |=M φ[s]。ψ |= φ 是 {ψ} |= φ 的缩写;ψ和φ是逻辑等价记作ψ |==| φ ;如果Ø |= φ ,φ是Σ公式中的部分,记作 |= φ (比如|=M φ[s] 是对每个M和s)。
证明SMT理论

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值