写给学生看的系统分析与验证笔记(十一)——Generalized NBA(GNBA)

2024-03-04 16:50

本文主要是介绍写给学生看的系统分析与验证笔记(十一)——Generalized NBA(GNBA),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • Generalized NBA
  • GNBA转NBA


在上一节中我们介绍了非确定的Büchi automata,这节中我们介绍一下Generalized NBA,即广义的非确定性NBA。

Generalized NBA

GNBA也是由一个五元组 G = ( Q , Σ , q 0 , F , δ ) \mathcal{G}=(Q,Σ,q_{0},\mathcal{F},δ) G=(Q,Σ,q0,F,δ)构成,其中 Q , Σ , q 0 . δ Q,Σ,q_{0}.δ Q,Σ,q0.δ含义都与NBA中的一样,但是F表示为接受状态集合的集合(set of accept sets),表示为 F ⊆ 2 Q \mathcal{F}\subseteq 2^Q F2Q F \mathcal{F} F可以是类似 { F 1 , F 2 , . . . , F k } \{F_{1},F_{2},...,F_{k}\} {F1,F2,...,Fk}的形式。

对GNBA来说,如果一个运行 q 0 q 1 q 2 . . . q_{0}q_{1}q_{2}... q0q1q2...是可接受的,那么表示,每个接受状态集合将会被无限经常次访问。

直白说,NBA的F是一个集合,它要求运行可以无限经常次访问接受状态集合里面的元素,而GBNA的 F \mathcal{F} F是一个集合的集合,它要求运行可以无限经常次访问集合里面的每一个集合中的元素,这么看来GNBA的确是一种广义的NBA,当GNBA的F中只有一个集合的时候,就变成了NBA。

用符号表示为:
∀ F ∈ F ∃ ∞ i ∈ N s . t . q i ∈ F \forall F∈\mathcal{F}\text{ }\overset{∞}\exist\text{ }i∈N s.t. q_{i}∈F FF  iNs.t.qiF

GNBA可接受的语言表示为:
L ω ( G ) = { σ ∈ Σ ω ∣ 无 限 字 σ 输 入 自 动 机 存 在 一 条 可 接 受 的 运 行 } L_{\omega}(\mathcal{G})=\{\sigma∈Σ^\omega|无限字\sigma输入自动机存在一条可接受的运行\} Lω(G)={σΣωσ}

用GNBA表示活性(liveness)
在这里插入图片描述
两个进程无限经常次进入临界区,这个LT属性可以用GNBA表示,此时的 F = { { q 1 } , { q 2 } } \mathcal{F}=\{\{q_{1}\},\{q_{2}\}\} F={{q1},{q2}}

GNBA转NBA

首先我们要知道,对于每一个GNBA来说,存在一个NBA使得
L ω ( G ) = L ω ( A ) L_{\omega}(\mathcal{G})=L_{\omega}(\mathcal{A}) Lω(G)=Lω(A)

F = { F 1 , F 2 , . . . , F k } \mathcal{F}=\{F_{1},F_{2},...,F_{k}\} F={F1,F2,...,Fk},当k=1时,它就是一个NBA,而当k>1时
在这里插入图片描述
从初始状态 Q 0 Q_{0} Q0出发,我们可以将 { F 1 , F 2 , . . . , F k } \{F_{1},F_{2},...,F_{k}\} {F1,F2,...,Fk}分成k个GNBA的拷贝,要注意的是,只有在某个拷贝中访问了接受集合 F k F_{k} Fk后才能访问下一个拷贝,这样依次下去,直到几个拷贝连成环,这样就生成了一个NBA

接下里讲述具体的算法:

假设 G = ( Q , Σ , Q 0 , F , δ ) \mathcal{G}=(Q,Σ,Q_{0},\mathcal{F},δ) G=(Q,Σ,Q0,F,δ)是一个GNBA, A = ( Q ′ , Σ , Q 0 ′ , F ′ , δ ′ ) A=(Q',Σ,Q'_{0},F',δ') A=(Q,Σ,Q0,F,δ)是一个NBA,为了顺利转换,我们需要在状态上增添常数i,用它表示某个状态属于第i个部分

  • Q ′ = Q × { 1 , 2 , . . . k } Q'=Q×\{1,2,...k\} Q=Q×{1,2,...k}
  • Q 0 ′ = Q 0 × { 1 } = { < q 0 , 1 > ∣ q 0 ∈ Q 0 } Q'_{0}=Q_{0}×\{1\}=\{<q_{0},1> |q_{0}∈Q_{0}\} Q0=Q0×{1}={<q0,1>q0Q0}
  • F 1 ′ = F 1 × { 1 } = { < q 0 , 1 > ∣ q F ∈ F 1 } F'_{1}=F_{1}×\{1\}=\{<q_{0},1> |q_{F}∈F_{1}\} F1=F1×{1}={<q0,1>qFF1}
  • δ ′ ( < q , i > , a ) = { { q ′ . i } ∣ q ′ ∈ δ ( q , a ) i f q ∉ F i { q ′ . i + 1 } ∣ q ′ ∈ δ ( q , a ) o t h e r w i s e δ'(<q,i>,a)=\begin{cases}\{q'.i\}|q'∈δ(q,a)\text{ }if\text{ }q\notin F_{i}\\ \{q'.i+1\}|q'∈δ(q,a)\text{ }otherwise \end{cases} δ(<q,i>,a)={{q.i}qδ(q,a) if q/Fi{q.i+1}qδ(q,a) otherwise

大致公式就如上面所示, Q 0 Q_{0} Q0 F 1 F_{1} F1都标记为第一个部分,发生转换时,如果当前状态不属于 F i F_{i} Fi,则下一个状态的标记i不变,如果当前是 F i F_{i} Fi中的状态发生了转换,那么下一个标记需要加1(其实这个公式还少了一部分,如果处于最后一个标记的的F,那么下一个标记应该仍未1)

下面是一个转换的例子
在这里插入图片描述

在这里插入图片描述
我们看到这副图,还是很清楚的,上下两个部分就相当于两个拷贝,在访问了接受状态F后,就会访问下一个拷贝,最后两个拷贝连起来形成一个环。

这篇关于写给学生看的系统分析与验证笔记(十一)——Generalized NBA(GNBA)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/773810

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

easyui 验证下拉菜单select

validatebox.js中添加以下方法: selectRequired: {validator: function (value) {if (value == "" || value.indexOf('请选择') >= 0 || value.indexOf('全部') >= 0) {return false;}else {return true;}},message: '该下拉框为必选项'}