当前位置: 首页 > news >正文

有限状态系统的抽象定义及CEGAR分析解析理论篇

在这里插入图片描述

文章目录

  • 一、有限状态系统的抽象定义及相关阐述
    • 1、有限状态系统定义
    • 2、 有限状态系统间的抽象关系(Abstract)
      • 2.1 基于函数的抽象定义
      • 2.2 基于等价关系的抽象定义
  • 二、 基于上面的定义出发,提出的思考
    • 1. 为什么我们想要/需要进行抽象
    • 2. 抽象是否保留所有属性
    • 3. 示例:如果抽象是安全的,那么原始系统就是安全的
    • 4. 抽象总能证明一个安全系统的安全性吗
    • 5. 我们如何寻找“合适”的抽象
    • 6. 细化的定义
    • 7. 如何进行细化的方法
  • 三、CEGAR分析流程解析
    • 可达性问题设定
    • 1、 构建抽象系统 (抽象)
    • 2、 对抽象系统进行模型检查 (检查)
    • 3、 验证抽象反例 (验证)
      • 3.1 验证结果判断 - 存在具体反例, 不安全
      • 3.2 验证结果判断 - 不存在具体反例,虚假的
    • 4、利用虚假抽象反例进行细化 (细化)
  • 四、关于验证的详细说明
    • 1、反例表示
    • 2、验证的定义
    • 3、验证过程
    • 4、验证结果判定
  • 五、基于反例分析的细化过程介绍
  • 六、参考文献

一、有限状态系统的抽象定义及相关阐述

1、有限状态系统定义

有限状态系统(Finite state system, FSS) T T T 由多个关键部分构成:

  • 有限状态集合 Q Q Q:它代表系统所有可能处于的状态,是一个有限集。例如在简单的自动售货机模型中,状态可能包括 “空闲”“已投币”“商品已售出” 等,每个状态描述了系统在某一时刻的特定条件或配置。
  • 转移标签集合 Σ \Sigma Σ:这些标签表示能够触发系统状态间转移的符号。在自动售货机的例子里,转移标签可以是 “投币”“选择商品”“出货” 等,它们代表了能使系统从一个状态转变到另一个状态的事件或输入。
  • 初始状态 q i n i t q_{init} qinit:属于 Q Q Q 集合,是有限状态系统开始运行时所处的状态。对于自动售货机,初始状态可能就是 “空闲” 状态。
  • 转移函数 → ⊆ Q × Σ × Q \to\subseteq Q\times\Sigma\times Q →⊆Q×Σ×Q:此函数定义了系统如何基于输入符号从一个状态转移到另一个状态。若 ( q 1 , a , q 2 ) ∈ → (q_1, a, q_2)\in\to (q1,a,q2)∈→,意味着当系统处于状态 q 1 q_1 q1 且接收到输入符号 a ∈ Σ a\in\Sigma aΣ 时,会转移到状态 q 2 q_2 q2。比如,若 ( “空闲” , “投币” , “已投币” ) ∈ → (“空闲”, “投币”, “已投币”)\in\to (空闲,投币,已投币)∈→,表明自动售货机在 “空闲” 状态下接收到投币操作后,会转变为 “已投币” 状态。

2、 有限状态系统间的抽象关系(Abstract)

抽象关系的定义,可以基于函数,也可以基于等价关系来定义。

2.1 基于函数的抽象定义

T 1 T_1 T1 T 2 T_2 T2 为两个有限状态系统。若存在函数 α : Q 1 → Q 2 \alpha : Q_1 → Q_2 α:Q1Q2,满足以下两个条件,则称 T 2 T_2 T2 T 1 T_1 T1 的抽象,记为 T 1 ≺ T 2 T_1 ≺ T_2 T1T2

  • 初始状态对应 α ( q i n i t 1 ) = q i n i t 2 \alpha(q_{init}^1) = q_{init}^2 α(qinit1)=qinit2,即该函数将 T 1 T_1 T1 的初始状态 q i n i t 1 q_{init}^1 qinit1 映射到 T 2 T_2 T2 的初始状态 q i n i t 2 q_{init}^2 qinit2,确保两个系统的起始点以一致的方式关联。
  • 转移对应:对于 T 1 T_1 T1 中的每一个转移 q 1 → a 1 q 2 q_1\overset{a}{\to}_1 q_2 q1a1q2,在 T 2 T_2 T2 中都有对应的转移 α ( q 1 ) → a 2 α ( q 2 ) \alpha(q_1)\overset{a}{\to}_2\alpha(q_2) α(q1)a2α(q2)。这表明 T 1 T_1 T1 在输入 a a a 时的行为,通过函数 α \alpha α T 2 T_2 T2 中得到体现。

例如,设 T 1 T_1 T1 为一个较为详细的自动售货机有限状态系统,
其状态集 Q 1 = { q 空闲 , q 1 元币投入 , q 2 元币投入 , q 选择商品 , q 出货 } Q_1 = \{q_{空闲}, q_{1 元币投入}, q_{2 元币投入}, q_{选择商品}, q_{出货}\} Q1={q空闲,q1元币投入,q2元币投入,q选择商品,q出货}
转移标签集 Σ 1 = { 投 1 元币 , 投 2 元币 , 选择商品 , 出货 } \Sigma_1=\{投 1 元币, 投 2 元币, 选择商品, 出货\} Σ1={1元币,2元币,选择商品,出货}
初始状态 q i n i t 1 = q 空闲 q_{init}^1 = q_{空闲} qinit1=q空闲
转移关系为 { ( q 空闲 , 投 1 元币 , q 1 元币投入 ) , ( q 空闲 , 投 2 元币 , q 2 元币投入 ) , ( q 1 元币投入 , 选择商品 , q 选择商品 ) , ( q 2 元币投入 , 选择商品 , q 选择商品 ) , ( q 选择商品 , 出货 , q 出货 ) } \{(q_{空闲}, 投 1 元币, q_{1 元币投入}),(q_{空闲}, 投 2 元币, q_{2 元币投入}),(q_{1 元币投入}, 选择商品, q_{选择商品}),(q_{2 元币投入}, 选择商品, q_{选择商品}),(q_{选择商品}, 出货, q_{出货})\} {(q空闲,1元币,q1元币投入),(q空闲,2元币,q2元币投入),(q1元币投入,选择商品,q选择商品),(q2元币投入,选择商品,q选择商品),(q选择商品,出货,q出货)}
T 2 T_2 T2 为一个简化的自动售货机有限状态系统,
其状态集 Q 2 = { q 未投币 , q 已投币 , q 出货 } Q_2=\{q_{未投币}, q_{已投币}, q_{出货}\} Q2={q未投币,q已投币,q出货}
转移标签集 Σ 2 = { 投币 , 选择商品 , 出货 } \Sigma_2 = \{投币, 选择商品, 出货\} Σ2={投币,选择商品,出货}
初始状态 q i n i t 2 = q 未投币 q_{init}^2=q_{未投币} qinit2=q未投币
转移关系为 { ( q 未投币 , 投币 , q 已投币 ) , ( q 已投币 , 选择商品 , q 出货 ) , ( q 出货 , 出货 , q 出货 ) } \{(q_{未投币}, 投币, q_{已投币}),(q_{已投币}, 选择商品, q_{出货}),(q_{出货}, 出货, q_{出货})\} {(q未投币,投币,q已投币),(q已投币,选择商品,q出货),(q出货,出货,q出货)}

定义函数 α ( q 空闲 ) = q 未投币 \alpha(q_{空闲}) = q_{未投币} α(q空闲)=q未投币 α ( q 1 元币投入 ) = α ( q 2 元币投入 ) = q 已投币 \alpha(q_{1 元币投入})=\alpha(q_{2 元币投入}) = q_{已投币} α(q1元币投入)=α(q2元币投入)=q已投币 α ( q 选择商品 ) = α ( q 出货 ) = q 出货 \alpha(q_{选择商品})=\alpha(q_{出货}) = q_{出货} α(q选择商品)=α(q出货)=q出货。此时, α ( q i n i t 1 ) = α ( q 空闲 ) = q 未投币 = q i n i t 2 \alpha(q_{init}^1)=\alpha(q_{空闲}) = q_{未投币}=q_{init}^2 α(qinit1)=α(q空闲)=q未投币=qinit2,并且对于 T 1 T_1 T1 中的转移,如 q 空闲 → 投 1 元币 1 q 1 元币投入 q_{空闲}\overset{投 1 元币}{\to}_1 q_{1 元币投入} q空闲1元币1q1元币投入,在 T 2 T_2 T2 中有 α ( q 空闲 ) → 投币 2 α ( q 1 元币投入 ) \alpha(q_{空闲})\overset{投币}{\to}_2\alpha(q_{1 元币投入}) α(q空闲)投币2α(q1元币投入)(因为 α ( q 空闲 ) = q 未投币 \alpha(q_{空闲}) = q_{未投币} α(q空闲)=q未投币 α ( q 1 元币投入 ) = q 已投币 \alpha(q_{1 元币投入}) = q_{已投币} α(q1元币投入)=q已投币 q 未投币 → 投币 2 q 已投币 q_{未投币}\overset{投币}{\to}_2 q_{已投币} q未投币投币2q已投币),其他转移也类似满足对应关系,所以 T 2 T_2 T2 T 1 T_1 T1 的抽象( T 1 ≺ T 2 T_1\prec T_2 T1T2)。

2.2 基于等价关系的抽象定义

给定 T 1 T_1 T1 状态集 Q 1 Q_1 Q1 上的一个等价关系 ∼ ⊆ Q 1 × Q 1 \sim\subseteq Q_1 × Q_1 ∼⊆Q1×Q1,可按如下方式定义 T 1 T_1 T1 的抽象 T 2 = T 1 / ∼ T_2 = T_1/ \sim T2=T1/

  • 状态集 T 2 T_2 T2 的状态集 Q 2 = Q 1 / ∼ Q_2 = Q_1/ \sim Q2=Q1/,即 Q 2 Q_2 Q2 的元素是 Q 1 Q_1 Q1 在等价关系 ∼ \sim 下的等价类。
  • 转移关系:在 T 2 T_2 T2 中,当且仅当存在 q 1 ∈ q 2 q_1\in q_2 q1q2 q 1 ′ ∈ q 2 ′ q_1'\in q_2' q1q2(其中 q 2 q_2 q2 q 2 ′ q_2' q2 Q 2 Q_2 Q2 中的等价类),使得在 T 1 T_1 T1 中有 q 1 → a 1 q 1 ′ q_1\overset{a}{\to}_1 q_1' q1a1q1 时,才有转移 q 2 → a 2 q 2 ′ q_2\overset{a}{\to}_2 q_2' q2a2q2

继续以自动售货机为例,设 T 1 T_1 T1 的状态集 Q 1 = { q 空闲 , q 1 元币投入 , q 2 元币投入 , q 选择商品 , q 出货 , q 找零 } Q_1=\{q_{空闲}, q_{1 元币投入}, q_{2 元币投入}, q_{选择商品}, q_{出货}, q_{找零}\} Q1={q空闲,q1元币投入,q2元币投入,q选择商品,q出货,q找零},转移标签集 Σ 1 = { 投 1 元币 , 投 2 元币 , 选择商品 , 出货 , 找零 } \Sigma_1 = \{投 1 元币, 投 2 元币, 选择商品, 出货, 找零\} Σ1={1元币,2元币,选择商品,出货,找零},转移关系为 { ( q 空闲 , 投 1 元币 , q 1 元币投入 ) , ( q 空闲 , 投 2 元币 , q 2 元币投入 ) , ( q 1 元币投入 , 选择商品 , q 选择商品 ) , ( q 2 元币投入 , 选择商品 , q 选择商品 ) , ( q 选择商品 , 出货 , q 出货 ) , ( q 2 元币投入 , 找零 , q 找零 ) } \{(q_{空闲}, 投 1 元币, q_{1 元币投入}),(q_{空闲}, 投 2 元币, q_{2 元币投入}),(q_{1 元币投入}, 选择商品, q_{选择商品}), (q_{2 元币投入}, 选择商品, q_{选择商品}), (q_{选择商品}, 出货, q_{出货}),(q_{2 元币投入}, 找零, q_{找零})\} {(q空闲,1元币,q1元币投入),(q空闲,2元币,q2元币投入),(q1元币投入,选择商品,q选择商品),(q2元币投入,选择商品,q选择商品),(q选择商品,出货,q出货),(q2元币投入,找零,q找零)}

定义等价关系 ∼ \sim 如下:如果两个状态在货币处理方式上相同,则它们等价。即 q 1 元币投入 ∼ q 2 元币投入 q_{1 元币投入}\sim q_{2 元币投入} q1元币投入q2元币投入(因为都涉及投币操作,只是金额不同), q 空闲 q_{空闲} q空闲 自成一个等价类, q 选择商品 q_{选择商品} q选择商品 自成一个等价类, q 出货 q_{出货} q出货 自成一个等价类, q 找零 q_{找零} q找零 自成一个等价类。

那么 Q 2 = Q 1 / ∼ = { [ q 空闲 ] , [ q 1 元币投入 ] , [ q 选择商品 ] , [ q 出货 ] , [ q 找零 ] } Q_2 = Q_1/\sim=\{[q_{空闲}], [q_{1 元币投入}], [q_{选择商品}], [q_{出货}], [q_{找零}]\} Q2=Q1/∼={[q空闲],[q1元币投入],[q选择商品],[q出货],[q找零]}(其中 [ q 空闲 ] [q_{空闲}] [q空闲] q 空闲 q_{空闲} q空闲 的等价类, [ q 1 元币投入 ] [q_{1 元币投入}] [q1元币投入] q 1 元币投入 q_{1 元币投入} q1元币投入 q 2 元币投入 q_{2 元币投入} q2元币投入 的等价类等)。

对于 T 1 T_1 T1 中的转移 q 1 元币投入 → 选择商品 1 q 选择商品 q_{1 元币投入}\overset{选择商品}{\to}_1 q_{选择商品} q1元币投入选择商品1q选择商品,因为 q 1 元币投入 ∈ [ q 1 元币投入 ] q_{1 元币投入}\in[q_{1 元币投入}] q1元币投入[q1元币投入] q 选择商品 ∈ [ q 选择商品 ] q_{选择商品}\in[q_{选择商品}] q选择商品[q选择商品],所以在 T 2 = T 1 / ∼ T_2 = T_1/\sim T2=T1/ 中有 [ q 1 元币投入 ] → 选择商品 2 [ q 选择商品 ] [q_{1 元币投入}]\overset{选择商品}{\to}_2[q_{选择商品}] [q1元币投入]选择商品2[q选择商品]。同理,对于 T 1 T_1 T1 中的其他转移,也可按此规则确定 T 2 T_2 T2 中的转移关系。

二、 基于上面的定义出发,提出的思考

1. 为什么我们想要/需要进行抽象

  • 答案:为了获得“更简单”的系统
  • 解释:在实际应用中,复杂系统的分析和理解往往具有很高的难度。以自动售货机的有限状态系统为例,一个详细描述的自动售货机状态系统可能包含众多状态,如不同货币投入状态、各种商品选择状态、找零状态等,以及复杂的转移关系。这种复杂性使得对系统进行全面分析,例如验证其是否正常工作、是否存在安全漏洞等变得十分困难。通过抽象,我们可以将这些复杂的状态和关系进行简化,去除一些不必要的细节,从而得到一个更易于理解和处理的“更简单”的系统。例如,将不同货币投入状态合并为一个“已投币”状态,这样就减少了状态数量,使得系统结构更加清晰,便于我们进行分析和研究。

2. 抽象是否保留所有属性

  • 答案:不。它保留特定的属性。
  • 解释:抽象是对原始系统的一种简化表示,它必然会舍弃一些细节。在有限状态系统的抽象过程中,不是所有原始系统的属性都会被保留下来。例如,在自动售货机从详细状态系统到简化状态系统的抽象过程中,详细系统中关于投入不同金额货币的区分这一属性,在简化抽象系统中可能就不再保留。但抽象会保留某些特定属性,这些属性通常是与我们关注的系统关键行为或特性相关的。例如,系统从“未投币”状态经过“投币”操作可以进入“已投币”状态,进而进行“选择商品”和“出货”等基本行为属性会被保留,以确保抽象后的系统仍然能够反映原始系统的核心功能。

3. 示例:如果抽象是安全的,那么原始系统就是安全的

  • 解释:这是抽象保留特定属性的一个体现。在系统安全性方面,如果我们对一个系统进行抽象后,发现抽象后的系统满足安全要求,即不存在安全风险,那么可以推断原始系统也是安全的。这是因为抽象过程虽然简化了系统,但保留了与安全性相关的关键特征和行为。例如,在自动售货机系统中,如果抽象后的系统在各种操作流程下都不会出现商品未付款就出货、投币丢失等安全问题,那么由于抽象保留了这些关键行为的逻辑,原始的详细系统同样也不会出现这些安全问题。因为抽象系统是基于原始系统构建的,其安全行为是对原始系统安全相关行为的一种提炼和保留。

4. 抽象总能证明一个安全系统的安全性吗

  • 答案:不。可能没有得到合适的抽象。
  • 解释:虽然抽象在一定程度上能够反映原始系统的属性,但并不是所有的抽象都能有效地证明原始系统的安全性。如果抽象过程中过度简化,丢失了与安全性紧密相关的关键信息,那么即使抽象后的系统看起来是安全的,也不能确定原始系统一定安全。例如,在自动售货机系统中,如果抽象时将投币验证环节完全简化掉,使得抽象系统中不存在投币验证相关状态和转移,那么这个抽象系统可能看似“安全”(因为没有涉及投币验证相关的错误可能),但实际上原始系统中存在投币验证这一关键安全环节,所以不能依据这个抽象系统来证明原始系统的安全性。这就说明,只有合适的抽象,即保留了与安全性相关的关键属性和行为的抽象,才能用于证明原始安全系统的安全性。

5. 我们如何寻找“合适”的抽象

  • 答案:Refinement!(细化!)
  • 解释:细化是寻找合适抽象的一种方法。当我们最初得到的抽象可能不理想,没有保留我们所需要的关键属性时,就需要对抽象进行细化。以自动售货机为例,如果最初的抽象系统过于简化,丢失了投币验证环节,我们可以通过细化操作,重新引入与投币验证相关的状态和转移关系,使抽象系统更加接近原始系统的真实行为,从而保留关键属性。通过不断地对抽象进行调整和细化,使其既能简化原始系统以便于分析,又能保留我们关注的关键属性,如安全性、功能性等,最终得到一个“合适”的抽象,能够有效地用于对原始系统的分析和验证。

6. 细化的定义

  • “Let T1 be a FSS and T2 its abstraction.
  • “A refinement of T2 is an FSS T3 such that T1 ≺ T3 ≺ T2.”
    设T1是一个有限状态系统(FSS),T2是它的抽象。T2的一个细化是一个有限状态系统T3,使得T1 ≺ T3 ≺ T2。这里定义了细化的概念,即存在一个新的有限状态系统T3,它与T1和T2存在特定的抽象关系。T1是原始系统,T2是T1的抽象系统,而T3是对T2的细化,T3比T2更接近T1,在抽象程度上处于T1和T2之间。也就是说,T3相对于T2保留了更多T1的细节和特性,但又不像T1那样复杂,仍然具有一定的抽象性。

7. 如何进行细化的方法

一种方法是——反例引导的抽象细化(CEGAR)。CEGAR(Counter - Example - Guided Abstraction Refinement,反例引导的抽象细化)的方法。CEGAR方法通常基于对抽象系统分析过程中发现的反例,来指导对抽象系统进行细化,使其更精确地反映原始系统的行为,从而在抽象与原始系统之间找到一个更合适的中间系统,即实现对抽象系统的细化。

三、CEGAR分析流程解析

可达性问题设定

首先,我们面临一个可达性问题:给定一个状态 q f q_f qf,从有限状态系统 T 1 T_1 T1 的初始状态出发,能否到达该状态 q f q_f qf 呢?这个问题是整个分析流程的核心关注点,我们后续的所有操作都是围绕判断这个可达性展开。

在程序bug查错的问题中,可以将出错分支添加一个可达性检查,如果执行到出错分支,那么就说明程序出错了。

在这里插入图片描述

1、 构建抽象系统 (抽象)

为了简化问题的分析,我们构建一个 T 1 T_1 T1 的抽象系统 T 2 T_2 T2。通过抽象,我们将复杂的 T 1 T_1 T1 系统简化为一个更容易分析的 T 2 T_2 T2 系统,但同时保留了与可达性问题相关的关键特征。

2、 对抽象系统进行模型检查 (检查)

在得到抽象系统 T 2 T_2 T2 后,我们对其进行模型检查。具体检查的内容是:从 T 2 T_2 T2 的初始状态出发,能否到达状态 α ( q f ) \alpha(q_f) α(qf) 呢?这里的 α \alpha α 是从 T 1 T_1 T1 T 2 T_2 T2 的抽象映射函数,将 T 1 T_1 T1 中的状态 q f q_f qf 映射到 T 2 T_2 T2 中的 α ( q f ) \alpha(q_f) α(qf)

2.1 模型检查结果判断 - 答案为否, T 1 T_1 T1 是安全的

如果模型检查的答案是“否”,即从 T 2 T_2 T2 的初始状态无法到达 α ( q f ) \alpha(q_f) α(qf),那么我们可以得出结论: T 1 T_1 T1 是安全的。这是因为抽象系统 T 2 T_2 T2 虽然简化了 T 1 T_1 T1,但保留了可达性相关的关键属性。如果在 T 2 T_2 T2 中都无法到达对应的抽象状态,那么在更复杂的原始系统 T 1 T_1 T1 中也必然无法到达目标状态 q f q_f qf,所以可以判定 T 1 T_1 T1 是安全的。

2.2 模型检查结果判断 - 答案为是,不确定

如果模型检查的答案是“是”,即从 T 2 T_2 T2 的初始状态可以到达 α ( q f ) \alpha(q_f) α(qf),此时我们不能直接得出关于 T 1 T_1 T1 的确定性结论,只能说“不确定”。因为抽象系统可能因为简化而引入了一些在原始系统中不存在的“虚假”路径。

当答案为“是”时,模型检查会返回一条在 T 2 T_2 T2 中到达 α ( q f ) \alpha(q_f) α(qf) 的路径,这条路径被称为“ **抽象反例 **”。它展示了在抽象系统 T 2 T_2 T2 中从初始状态到 α ( q f ) \alpha(q_f) α(qf) 的一种可能的执行路径。

3、 验证抽象反例 (验证)

得到抽象反例后,我们需要检查这个抽象反例是否在原始系统 T 1 T_1 T1 中有对应的“具体反例”,这个过程称为验证。

3.1 验证结果判断 - 存在具体反例, 不安全

如果经过验证,发现抽象反例在原始系统 T 1 T_1 T1 中有对应的具体反例,那么我们就找到了一个真正的反例,这表明原始系统 T 1 T_1 T1 是不安全的。因为这个具体反例展示了从 T 1 T_1 T1 的初始状态可以到达我们关注的状态 q f q_f qf,而这个状态可能代表了某种不安全的情况,比如自动售货机在未付款时就出货的状态等。

3.2 验证结果判断 - 不存在具体反例,虚假的

如果验证后发现抽象反例在原始系统 T 1 T_1 T1 中没有对应的具体反例,那么这个抽象反例就是“虚假的“spurious””。也就是说,它是由于抽象过程的简化而产生的,在实际的原始系统 T 1 T_1 T1 中并不存在这样的执行路径。

4、利用虚假抽象反例进行细化 (细化)

对于虚假的抽象反例,我们利用它来对抽象系统 T 2 T_2 T2 进行细化。通过分析虚假抽象反例产生的原因,我们可以在抽象系统中添加更多的细节,使其更接近原始系统 T 1 T_1 T1 的真实行为,从而得到一个更精确的抽象系统。例如,如果虚假抽象反例是由于在抽象过程中忽略了某个关键状态或转移关系导致的,我们就可以在细化过程中重新引入这些元素。经过细化后,我们可以再次对新的抽象系统进行模型检查和后续的验证步骤,不断重复这个过程,直到能够确定原始系统 T 1 T_1 T1 的可达性情况。

通过这样的 CEGAR 分析流程,我们能够逐步深入地分析复杂的有限状态系统 T 1 T_1 T1 的可达性问题,通过抽象、检查、验证和细化等步骤,在简化分析的同时确保分析结果的准确性。

四、关于验证的详细说明

在有限状态系统(FSS)的分析过程中,验证是一个关键环节,用于确定从抽象系统(如 T 2 T_2 T2)中得到的反例在原始系统(如 T 1 T_1 T1)中是否真实存在。

1、反例表示

在抽象系统 T 2 T_2 T2 中,我们得到一个反例路径: σ 0 = q 0 1 → a 1 q 0 2 → a 2 q 0 3 ⋯ → a k q 0 k + 1 \sigma_0 = q_0^1 \xrightarrow{a_1} q_0^2 \xrightarrow{a_2} q_0^3 \cdots \xrightarrow{a_k} q_0^{k + 1} σ0=q01a1 q02a2 q03ak q0k+1,此路径作为 T 2 T_2 T2 中的反例。

2、验证的定义

验证的核心问题是:在原始系统 T 1 T_1 T1 中是否存在这样一条路径 σ = q 1 → a 1 q 2 → a 2 q 3 ⋯ → a k q k + 1 \sigma = q_1 \xrightarrow{a_1} q_2 \xrightarrow{a_2} q_3 \cdots \xrightarrow{a_k} q_{k + 1} σ=q1a1 q2a2 q3ak qk+1,满足以下条件:

  1. q 1 = q i n i t 1 q_1 = q_{init}^1 q1=qinit1,即路径起始于 T 1 T_1 T1 的初始状态。
  2. q k + 1 = q f q_{k + 1} = q_f qk+1=qf,即路径最终到达我们关注的状态 q f q_f qf
  3. 对于所有的 i i i,都有 α ( q i ) = q 0 i \alpha(q_i) = q_0^i α(qi)=q0i,这里的 α \alpha α 是从 T 1 T_1 T1 T 2 T_2 T2 的抽象映射函数,意味着 T 1 T_1 T1 路径上的状态通过抽象映射后与 T 2 T_2 T2 反例路径上的状态相对应。

3、验证过程

  • a. 定义可达状态集合:对于 1 ≤ i ≤ k + 1 1 \leq i \leq k + 1 1ik+1,我们计算 R e a c h i Reach_i Reachi,它表示所有能够 “模仿” q 0 i → a i ⋯ → a k q 0 k + 1 q_0^i \xrightarrow{a_i} \cdots \xrightarrow{a_k} q_0^{k + 1} q0iai ak q0k+1 并最终到 q f q_f qf 的状态集合。
  • b. 初始化 R e a c h k + 1 Reach_{k + 1} Reachk+1:首先,明确 R e a c h k + 1 = { q f } Reach_{k + 1} = \{q_f\} Reachk+1={qf},因为在路径的最后一步,只有目标状态 q f q_f qf 能够满足到达 q f q_f qf 的条件。
  • c. 计算其他 R e a c h i Reach_i Reachi 集合:对于 1 ≤ i ≤ k 1 \leq i \leq k 1ik,通过公式 R e a c h i = α − 1 ( q 0 i ) ∩ P r e ( R e a c h i + 1 , a i ) Reach_i =\alpha^{-1}(q_0^i) \cap Pre(Reach_{i + 1}, a_i) Reachi=α1(q0i)Pre(Reachi+1,ai) 来计算 R e a c h i Reach_i Reachi。其中, α − 1 ( q 0 i ) \alpha^{-1}(q_0^i) α1(q0i) 表示在 T 1 T_1 T1 中通过抽象映射 α \alpha α 能映射到 q 0 i q_0^i q0i 的所有状态集合; P r e ( R e a c h i + 1 , a i ) Pre(Reach_{i + 1}, a_i) Pre(Reachi+1,ai) 表示在 T 1 T_1 T1 中通过输入 a i a_i ai 能够到达 R e a c h i + 1 Reach_{i + 1} Reachi+1 集合中状态的所有前置状态集合。通过取这两个集合的交集,我们得到 R e a c h i Reach_i Reachi,即满足既能够通过抽象映射对应到 q 0 i q_0^i q0i,又能通过输入 a i a_i ai 到达下一步状态集合 R e a c h i + 1 Reach_{i +1} Reachi+1 的状态集合。

4、验证结果判定

存在具体的路径 σ \sigma σ(即原始系统 T 1 T_1 T1 中存在与抽象系统 T 2 T_2 T2 反例对应的真实反例)当且仅当(iff) R e a c h 0 ≠ ∅ Reach_0 \neq \varnothing Reach0=。如果 R e a c h 0 Reach_0 Reach0 不为空集,说明在 T 1 T_1 T1 的初始状态集合中,存在能够按照我们所期望的路径,通过一系列状态转移最终到达 q f q_f qf 的状态,也就意味着找到了与抽象反例对应的具体反例;反之,如果 R e a c h 0 Reach_0 Reach0 为空集,则表明在 T 1 T_1 T1 中不存在这样的路径,即抽象反例是虚假的,在原始系统中并不存在对应的真实反例。

通过以上验证过程,我们能够准确判断抽象系统中的反例在原始系统中是否真实有效,从而进一步对系统的安全性、可达性等性质进行准确分析。

五、基于反例分析的细化过程介绍

在对有限状态系统进行分析时,基于反例分析的细化是优化抽象系统的重要手段。以下详细阐述该细化过程:

1、确定关键索引 j j j

首先,我们通过反向计算来寻找一个关键的整数 j j j。在这个过程中,我们关注计算得到的一系列集合 R e a c h i Reach_i Reachi j j j 被定义为满足 R e a c h j = ∅ Reach_j = \varnothing Reachj= 的最大整数,也就是说,在反向计算过程中, R e a c h j Reach_j Reachj 是第一个变为空集的集合。这一步骤的关键在于通过分析 R e a c h Reach Reach 集合序列,找到抽象与原始系统行为出现偏差的关键位置,因为空集的出现暗示了在抽象过程中丢失了某些必要的状态或转移关系,需要进行修正。

2、分析集合关系

在确定了 j j j 之后,我们考察 P o s t ( α − 1 ( q 0 j ) ) Post(\alpha^{-1}(q_0^j)) Post(α1(q0j)) R e a c h j + 1 Reach_{j + 1} Reachj+1 这两个集合的关系。这里, α − 1 ( q 0 j ) \alpha^{-1}(q_0^j) α1(q0j) 表示在原始系统 T 1 T_1 T1 中通过抽象映射 α \alpha α 能映射到抽象系统 T 2 T_2 T2 中状态 q 0 j q_0^j q0j 的所有状态集合,而 P o s t ( α − 1 ( q 0 j ) ) Post(\alpha^{-1}(q_0^j)) Post(α1(q0j)) 则是这些状态通过一次转移后所能到达的状态集合。我们发现 P o s t ( α − 1 ( q 0 j ) ) ∩ R e a c h j + 1 = ∅ Post(\alpha^{-1}(q_0^j)) \cap Reach_{j + 1} = \varnothing Post(α1(q0j))Reachj+1=,这表明从能映射到 q 0 j q_0^j q0j 的原始状态出发,经过一次转移后到达的状态集合,与后续应该能够到达目标状态 q f q_f qf 的状态集合 R e a c h j + 1 Reach_{j + 1} Reachj+1 没有交集。这种不相交的情况进一步说明了在抽象过程中,状态 q 0 j q_0^j q0j 的抽象可能过度简化,导致了状态转移的不连续性,需要对其进行调整。

3、构建新的抽象系统 T 3 T_3 T3

为了修正这种过度简化的情况,我们对状态 q 0 j + 1 q_0^{j + 1} q0j+1 进行拆分。将 q 0 j + 1 q_0^{j + 1} q0j+1 拆分成两个状态,使得其中一个状态包含 P o s t ( α − 1 ( q 0 j ) ) Post(\alpha^{-1}(q_0^j)) Post(α1(q0j)),另一个状态包含 R e a c h j + 1 Reach_{j + 1} Reachj+1。通过这种拆分方式,我们在抽象系统中引入了更多的细节,使得抽象系统能够更好地反映原始系统的状态转移关系。经过这样的处理后,我们就得到了新的抽象系统 T 3 T_3 T3。这个新的抽象系统 T 3 T_3 T3 相较于之前的抽象系统 T 2 T_2 T2,在保留原始系统关键特性的同时,更准确地模拟了原始系统的行为,从而在后续的分析中能够提供更可靠的结果。

通过以上步骤,基于反例分析的细化过程能够有效地优化抽象系统,使其更符合原始系统的真实情况,为进一步准确分析系统的性质和行为提供了有力支持。

六、参考文献

主要参考:https://mitras.ece.illinois.edu/ECE584/Archives/2012/lectures/Lecture20.pdf

相关文章:

有限状态系统的抽象定义及CEGAR分析解析理论篇

文章目录 一、有限状态系统的抽象定义及相关阐述1、有限状态系统定义2、 有限状态系统间的抽象关系(Abstract)2.1 基于函数的抽象定义2.2 基于等价关系的抽象定义 二、 基于上面的定义出发,提出的思考1. 为什么我们想要/需要进行抽象2. 抽象是…...

Apache Hive用PySpark统计指定表中各字段的空值、空字符串或零值比例

from pyspark.sql import SparkSession from pyspark.sql.functions import col, coalesce, trim, when, lit, sum from pyspark.sql.types import StringType, NumericType# 初始化SparkSession spark SparkSession.builder \.appName("Hive Data Quality Analysis"…...

高校元宇宙实训室解决方案:以技术驱动教育,用数字人链接未来

在AIGC技术的浪潮下,AI数字人正成为数字营销、文化传播等领域的核心工具。为助力高校培养适应未来需求的新型人才,广州虚拟动力推出高校元宇宙实训室解决方案,通过动作捕捉设备与虚拟数字人技术,构建沉浸式教学场景,赋…...

提升编程效率,体验智能编程助手—豆包MarsCode一键Apply功能测评

提升编程效率,体验智能编程助手—豆包MarsCode一键Apply功能测评 🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 目录 引言豆包…...

【前端开发】query参数和params参数的区别

在Web开发中,query参数(URL查询参数)和params参数(路由参数)是两种不同的URL传参方式,它们的核心区别如下: 一、 位置不同 query参数params参数位置URL中?之后,用&连接多个参数…...

推荐系统召回算法

推荐系统召回算法 召回算法UserCFItemCFSwing矩阵分解 召回算法 基于协同过滤的召回算法主要是应用在推荐环节的早期阶段,大致可以分为基于用户、基于物品的。两者各有优劣,优点是具有较好的可解释性,缺点是对于稀疏的交互矩阵,效…...

Python基础(上)

1. 基础语法 1.1 环境安装 Python版本: 推荐使用Python 3.6.6及以上开发工具: PyCharm 1.2 基本语法 输出: print("Hello World")​ 注释: 单行注释: # 注释内容​(快捷键 Ctrl/​) 多行注释: 使用三引号 注释内容​ 注意:不推…...

【DuodooBMS】给PDF附件加“受控”水印的完整Python实现

给PDF附件加“受控”水印的完整Python实现 功能需求 在实际工作中,许多文件需要添加水印以标识其状态,例如“受控”“机密”等。对于PDF文件,添加水印不仅可以增强文件的可识别性,还可以防止未经授权的使用。本代码的功能需求是…...

【虚幻引擎UE】UE4.23到UE5.5的核心功能变化

简单总结从UE4.23到UE5.5,虚幻引擎的重大变化: 1. WebGL/HTML5 平台支持和像素流 UE4.23-UE4.25:移除官方HTML5支持,改为社区插件维护。 但通过第三方插件(如WebAssemblyWebGPU)可在浏览器运行部分项目。U…...

阿里云《AI 剧本生成与动画创作》解决方案技术评测

引言 随着人工智能技术的发展,越来越多的工具和服务被应用于内容创作领域。阿里云推出的《AI 剧本生成与动画创作》解决方案,利用函数计算 FC 构建 Web 服务,结合百炼模型服务和 ComfyUI 工具,实现了从故事剧本撰写、插图设计、声…...

commons-io 包 IOUtils、FileUtils、FilenameUtils

1. IOUtils void IOUtils.closeQuietly(Closeable... closeables) 无条件关闭流。int IOUtils.copy(InputStream inputStream, OutputStream outputStream) 将字节从InputStream复制到OutputStream,返回复制的长度,流最大不能超过2G,默认缓冲…...

JavaScript 加密技术全面指南

一、加密技术概述 在现代 Web 开发中,加密技术在保护用户数据和确保信息安全方面发挥着至关重要的作用。本文将带您了解 JavaScript 加密技术的基本概念、分类及其在实际应用中的场景。 加密的基本概念 加密是一种将明文数据转换为密文的技术,以保护数…...

【笔记】deep-seek wechat项目

1、安装ollama ollama官网 2、ollama上部署deepseek ollama官网下载deepseek模型(我下了1.5B) 3、配置python 国内镜像源 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ 安装依赖包 pip install wxauto pip instal…...

FloodFill算法——搜索算法

一、什么是FloodFill算法 FloodFill算法字面意思就是洪水灌溉法,比如我们有这么一块地: 0表示平原,正数表示高地,负数表示凹地,那么当洪水来临时这些凹地会被优先灌满。而我们要找的正是这些联通块,如&…...

H5接入支付宝手机网站支付并实现

小程序文档 - 支付宝文档中心 1.登录 支付宝开放平台 创建 网页/移动应用 2.填写创建应用信息 3.配置开发设置 4.网页/移动应用:需要手动上线。提交审核后,预计 1 个工作日的审核时间。详细步骤可点击查看 上线应用 。应用上线后,还需要完成…...

基于SpringBoot+uniapp的在线办公小程序+LW示例参考

1.项目介绍 系统角色:管理员、普通用户功能模块:员工管理、部门信息管理、职位信息管理、会议记录、待办事项、工资信息、留言板等技术选型:SpringBoot,Vue(后端管理web),uniapp等测试环境&…...

文章精读篇——OMG-LLaVA

题目:OMG-LLaVA: Bridging Image-level, Object-level, Pixel-level Reasoning and Understanding 会议:Conference on Neural Information Processing Systems 2024 论文:http://arxiv.org/abs/2406.19389 主页:https://lxtgh…...

两个同一对象targetList和 sourceList 去重

我现在需要解决的问题是从一个Java的源列表`sourceList`中移除所有在目标列表`targetList`中存在的数据,并且还要去除`targetList`中的重复数据。让我先理清楚这两个问题的思路。 首先,如何快速从`sourceList`中移除含有`targetList`的数据。这里的“含有”应该是指两个列表中…...

软件开发 | GitHub企业版常见问题解读

什么是GitHub企业版? GitHub企业版是一个企业级软件开发平台,专为现代化开发的复杂工作流程而设计。 作为可扩展的平台解决方案,GitHub企业版使组织能够无缝集成其他工具和功能,并根据特定需求定制开发环境,提高整体…...

Docker 网络的配置与管理

目录 查看所有网络 查看网络详细信息 创建新的网络 删除网络 清理未使用的网络 将容器连接到网络 将容器从网络中断开 将容器端口映射到宿主机 绑定到特定 IP 地址 为容器设置自定义 DNS 查看所有网络 docker network ls 功能:列出所有 Docker 网络。 工…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络&#xf…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

Linux入门课的思维导图

耗时两周,终于把慕课网上的Linux的基础入门课实操、总结完了! 第一次以Blog的形式做学习记录,过程很有意思,但也很耗时。 课程时长5h,涉及到很多专有名词,要去逐个查找,以前接触过的概念因为时…...

LeetCode 0386.字典序排数:细心总结条件

【LetMeFly】386.字典序排数:细心总结条件 力扣题目链接:https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...

宠物车载安全座椅市场报告:解读行业趋势与投资前景

一、什么是宠物车载安全座椅? 宠物车载安全座椅是一种专为宠物设计的车内固定装置,旨在保障宠物在乘车过程中的安全性与舒适性。它通常由高强度材料制成,具备良好的缓冲性能,并可通过安全带或ISOFIX接口固定于车内。 近年来&…...

使用homeassistant 插件将tasmota 接入到米家

我写一个一个 将本地tasmoat的的设备同通过ha集成到小爱同学的功能,利用了巴法接入小爱的功能,将本地mqtt转发给巴法以实现小爱控制的功能,前提条件。1需要tasmota 设备, 2.在本地搭建了mqtt服务可, 3.搭建了ha 4.在h…...