📜  TOC 中的 Kleene 定理 |第1部分

📅  最后修改于: 2021-09-27 06:20:03             🧑  作者: Mango

如果一种语言可以用有限自动机表示或者可以为它生成正则表达式,则称该语言是正则的。这个定义将我们引向一般定义:对于每个对应于该语言的正则表达式,可以生成一个有限自动机。

对于某些表达式,例如:- (a+b), ab, (a+b)* ;仅凭直觉制作有限自动机相当容易,如下所示。当我们提供更长的正则表达式时,问题就出现了。这带来了对 FA 生成的系统方法的需求,这已由 Kleene 在Kleene 定理中提出 – I

克莱恩定理-I:

为了理解 Kleene’s Theorem-I,让我们考虑正则表达式的基本定义,我们观察到$\phi$ , $\epsilon$并且单个输入符号“a”可以包含在正则语言中,并且可以通过这些组合执行的相应操作是:

说, $r_1$$r_2$是两个正则表达式。然后,

  1. $r_1$ + $r_2$也是一个正则表达式,对应的语言是L( $r_1$ ) UL( $r_2$ )
  2. $r_1$ . $r_2$也是一个正则表达式,对应的语言是L( $r_1$ ).L( $r_2$ )
  3. $r_1$ * 也是一个正则表达式,对应的语言是 L( $r_1$ )*

我们可以进一步将这个定义与 Null Transitions 结合使用,通过两个或多个较小的有限自动机(每个对应于一个正则表达式)的组合来产生 FA。

让 S 接受 L = {a} 并且 T 接受 L = {b},那么 R 可以使用提供的操作表示为 S 和 T 的组合:

R = S + T

我们观察到,

  1. 在联合操作的情况下,我们可以有一个新的开始状态,从这个状态开始,空转换继续到两个有限状态机的开始状态。
  2. 两个有限自动机的最终状态都转换为中间状态。最终状态统一为一个可以通过空转换遍历的状态。
R = S.T 

我们观察到,

  1. 在串联操作的情况下,我们可以有与 S 相同的起始状态,唯一的变化发生在 S 的结束状态,它被转换为中间状态,然后是空转换。
  2. Null 转换之后是 T 的起始状态,T 的最终状态用作 R 的结束状态。
R = S*

我们观察到,

  1. 添加了一个新的起始状态,并且 S 已被放置为中间状态,以便可以合并自循环条件。
  2. 开始和结束状态已分别定义,因此自循环条件不会受到干扰。

现在我们已经了解了一般操作。让我们看看如何使用 Kleene’s Theorem-I 为给定的正则表达式生成 FA。

Example:
Make a Finite Automata for the expression (ab+a)* 

我们看到,使用 Kleene 定理 – 我给出了一种系统方法来为所提供的正则表达式生成有限自动机。