有限状态系统的抽象定义及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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【linux学习指南】线程同步与互斥

文章目录 📝线程互斥🌠 库函数strncpy🌉进程线程间的互斥相关背景概念🌉互斥量mutex 🌠线程同步🌉条件变量🌉同步概念与竞态条件🌉 条件变量函数 🚩总结 📝线…

云上话ai

这两天参加了几场ai视频直播 今天想分享一下照片,记录一下~

OpenVINO 2025.0重磅升级:开启⽣成式AI全场景⾰命!

2025年2⽉6⽇,英特尔OpenVINO™ 2025.0版本震撼发布,本次升级堪称近三年最⼤规模技术⾰新!从⽣成 式AI性能跃升到全栈硬件⽀持,从开发者⼯具链优化到边缘计算突破,六⼤核⼼升级重新定义AI部署效率。 一,&a…

语言大模型基础概念 一(先了解听说过的名词都是什么)

SFT(监督微调)和RLHF(基于人类反馈的强化学习)的区别 STF(Supervised Fine-Tuning)和RLHF(Reinforcement Learning from Human Feedback)是两种不同的模型训练方法,分别…

裙子贴图提示词【图生图】

正向: (a plaid short skirt with checkered texture:1.4),(no human figure),wallpaper,incredibly absurdres,huge filesize,highres,absurdres,artbook_game c,s,rt,octane,no light,best quality,illustration,looking at viewer,impasto,canvas,realistic,rea…

【竞技宝】LCK:KT0-3爆冷不敌NS淘汰出局

北京时间2月13日,英雄联盟LCK2025在昨天正式迎来第一阶段的季后赛,首战迎来KT对阵NS,以下是本场比赛的详细战报。 第一局: KT:安蓓萨、大树、沙皇、韦鲁斯、布隆 NS:杰斯、瑟庄妮、阿萝拉、卡莎、泰坦 首…

电脑端调用摄像头拍照:从基础到实现

文章目录 1. 了解navigator.mediaDevices.getUserMedia API2. 创建 HTML 结构3. 编写 JavaScript 代码3.1 打开摄像头3.2 拍照 4. 完整代码5. 测试6. 注意事项及部署 在现代 Web 开发中,调用摄像头进行拍照是一个常见的功能,尤其是在需要用户上传头像、进…

lvs的DR模式

基于Linux的负载均衡集群软件 LVS 全称为Linux Virtual Server,是一款开源的四层(传输层)负载均衡软件 Nginx 支持四层和七层(应用层)负载均衡 HAProxy 和Nginx一样,也可同时支持四层和七层(应用层)负载均衡 基于Linux的高可用集群软件 Keepalived Keepalived是Linux…

STM32 RTC 实时时钟说明

目录 背景 RTC(实时时钟)和后备寄存器 32.768HZ 如何产生1S定时 RTC配置程序 第一次上电RTC配置 第1步、启用备用寄存器外设时钟和PWR外设时钟 第2步、使能RTC和备份寄存器访问 第3步、备份寄存器初始化 第4步、开启LSE 第5步、等待LSE启动后稳定状态 第6步、配置LSE为…

2024年12月电子学会青少年机器人技术等级考试(三级)理论综合真题

202412 青少年等级考试机器人理论真题三级 一、单选题 第 1 题 Arduino UNO/Nano主控板,程序模块如下,该模块运行后,引脚5输出的等效电压为0V,变量i对应的值是?( ) A:0 B&#xff1…

分治中的快速排序(前序遍历)与归并排序(后序遍历)详细对比分析

目录 1. 快速排序(前序遍历) 核心思想与步骤 关键特性 示例分析 2. 归并排序(后序遍历) 核心思想与步骤 关键特性 示例分析 3. 对比总结 4. 选择依据与优化策略 5. 实际应用场景 6. 核心差异图示 7. 总结 1. 快速排序…

DeepSeek 助力 Vue 开发:打造丝滑的进度条

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

编译和链接【四】链接详解

文章目录 编译和链接【四】链接详解前言系列文章入口符号表和重定位表链接过程分段组装符号决议重定位 编译和链接【四】链接详解 前言 在我大一的时候, 我使用VC6.0对C语言程序进行编译链接和运行 , 然后我接触了VS, Qt creator等众多IDE&…

LeetCode每日精进:876.链表的中间结点

题目链接:876.链表的中间结点 题目描述: 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5…

数据结构——结构体位域、typedef类型重定义、宏、共用体union、枚举、虚拟内存划分

一、结构体位域 1.1 结构体位域的基础 结构体位域:把结构体字节大小扣到极致的一个类型,以bit单位 格式:struct 位域体名{数据类型 位域名:位域大小;数据类型 位域名:位域大小;...};解析:位域体名:可有可无&#xff…

CZML 格式详解,javascript加载导出CZML文件示例

示例地址:https://dajianshi.blog.csdn.net/article/details/145573994 CZML 格式详解 1. 什么是 CZML? CZML(Cesium Zipped Markup Language)是一种基于 JSON 的文件格式,用于描述地理空间数据和时间动态场景。它专…

SQL递归技巧

1.读样例 with recursive cet_dpt(id, parent_id, path, org_category, level,depart_name) as (select id ,parent_id,depart_name as path,org_category,1 as level,sd.depart_namefrom isolarerp.sys_depart sdwhere del_flag 0and sd.org_code A09B15union al…

django配置跨域

1、第一种 from django.views.decorators.csrf import csrf_exemptcsrf_exempt第二种 安装 pip install django-cors-headers在配置文件settings.py进入 INSTALLED_APPS [..."corsheaders", # 添加 ]MIDDLEWARE [corsheaders.middleware.CorsMiddleware, # 添加…

设置mysql的主从复制模式

mysql设置主从复制模式似乎很容易,关键在于1)主库启用二进制日志,2)从库将主库设为主库。另外,主从复制,复制些什么?从我现在获得的还很少的经验来看,复制的内容有表,用户…

蓝耘智算平台:开启企业级 DeepSeek 智能助手的搭建捷径

文章目录 一、深度解密 DeepSeek 技术矩阵1.1 模型架构创新1.2 核心能力全景 二、私有化部署:企业的明智之选2.1 企业级部署场景2.2 硬件选型策略 三、蓝耘平台:部署全流程大揭3.1 环境准备阶段Step 1:访问蓝耘智算云官网完成企业认证Step 2&…