Logic Synthesis And Verification Algorithms Gary D. Hachtel & Fabio Somenzi 第九章

本章节详细介绍了有限状态机(Finite Automata)及其与正则语言的关系,包括DFA的合成方法如子集构造法和确定映像法。此外,深入探讨了-L-自动机(-Regular Automata)及其在形式验证中的应用,特别是-L-语言的包含问题,以及如何通过构造积自动机进行验证。最后,通过实例展示了如何进行语言包含检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Chapter 9 Finite Automata

9.1 Finite Automata and Regular Languages

这一小节的内容是有限状态机和正则语言。其实很多讲解编译器的书籍都有相关的论述,而且都比本书更加严谨和通俗易懂。没什么难度,我就不详细讲解了。只是列出几个关键点

  1. NFA与DFA
  2. \epsilon闭包
  3. string与tape的区别,一个有限,一个无限
  4. 正则表达式中的运算如*,|,+..都是作用于sting not tape

9.2 DFA Synthesis

主要有三步

  1. 给定一个正则表达式(a*b)*构建一个二叉解析树
  2. 深度搜索解析树, 后序访问各个节点,按照节点的操作符合并左右孩子的NFA。合并规则很简单,一看就懂。比如已知NFA a和NFA b,如何构造出NFA c = ab.
  3. 将NFA转换成DFA,两种-------子集构造法和deterministic image法

9.2.2 The Subset Construction

经典的方法,每本编译器的教材都有相关的内容。基本思路就是从NVA的起始集合S_0开始,求出S_0\epsilon闭包\epsilon(S_0),作为DFA的起始状态. 依次遍历输入集合,假设访问到输入x,求出\epsilon(S_0)中每个状态遇到x后可能到达的状态集合,求这些集合的并集S_1,继而求出S_1\epsilon闭包\epsilon(S_1). 如果 \epsilon(S_1)之前没有出现过,就把它加入DFA的状态集合,并从\epsilon(S_0)\epsilon(S_1)加一条标记为x的边。 这个过程持续下去,就得到DFA。可见DFA的一个状态对应了NFA的一个状态集。如果这个NFA状态集包含了NFA的接受状态,相应的DFA状态也标记为接收状态。

书中给出的子集构造法的伪代码是错的。从某个NFA状态集合闭包起,对每个输入x都做出一个DFA的状态。而不是像书中那样,对所有输入得到的状态集合再求并集。 可以参考编译器领域的龙书。

9.2.3 The Deterministic Image

由于子集构造法中,DFA的状态空间是NFA状态空间的幂集,在极不走运的情况下,可能面临存储空间过大的问题。本节介绍另一种NFA转DFA的方法------The deterministic image。

可见NFA \LARGE \tau的deterministic image是一个DFA \LARGE \tau'.  二者的状态集一样,但是输入集合大不相同。\LARGE \tau'的输入集是\LARGE \tau的输入集与状态集的笛卡尔积。 假设\LARGE \tau中有两个转换,s\overset{x}{\rightarrow} t_1s \overset{x}{\rightarrow} t_2,在\LARGE \tau'中转化成另外两个变换s\overset{xt_1}{\rightarrow}t1s\overset{xt_2}{\rightarrow}t_2。 显然这些变换分别符合NFA和DFA的特点。

Deterministic image方法的状态空间不变,输入空间增长了|S|倍。显然小于S的幂集的数目。

9.3 \LARGE \omega-Regular Automata

从本节开始,进入本章的难点。NFA和DFA通常是用来处理string的,即有限的序列。它们都需要指定一些接受或终止状态。而\LARGE \omega-自动机是处理tape,即无限的序列。其中简单的一种叫做L-automaton。

定义很复杂,但是关键点如下

没有了终止状态,但是如何判断一个tape属于该L-自动机,换句话说,如何判断一个输入tape是合法的呢。L-automaton定义了一个cycle sets-------C^A = (C_1, ... , C_k), C_i是自动机状态集合的一个子集。L-自动机判定输入合法的条件有两个,任何一个成立都行。

  • 输入会无数次经过自动机有向图的某条边,该条边被成为recur edge。
  • 输入无数次经过的哪些状态的集合S^\infty(s^x)是某个C_i的子集。由于输入是无限的tape,而L-自动机的状态是有限的,假设某个状态ss被无数次经过,说明ss必然属于某个cycle中。这就是cycle sets名字的由来。

9.4 Formal Verification with L-Automata

 9.4.1 \LARGE \omega-Regular Languages

 

 

 主要定义了两种操作lim(\mathcal{L})\mathcal{L}^\omega。需要注意\omega和*的区别,前者用于产生tape,后者用于产生string。假设X=\{a,b,c\},则X^\omega表示由a,b,c组成的所有无限长的tape的集合ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值