《计算机科学中的数学》学习笔记(06 状态机)

书本信息:

作者: [美] Eric Lehman / [美] F. Thomson Leighton / [美] Albert R. Meyer
出版社: 电子工业出版社
出品方: 博文视点
副标题: 信息与智能时代的必修课
原作名: Mathematics for Computer Science

06 状态机


状态机(State Machines)是一种用于模拟系统行为的抽象模型。由于计算机程序可以看作是逐步的计算过程,因此状态机在计算机科学中经常出现。

1、状态和转移

状态机由以下几个主要部分组成:

  1. 状态(States):状态是状态机的基本组成部分。每个状态代表系统的一个特定条件或配置。
  2. 转移(Transitions):转换描述了状态机从一个状态移动到另一个状态的过程。转换可以由某些条件触发,也可以由输入值触发。
  3. 开始状态(Start State):状态机的运行通常从一个特定的开始状态开始。
  4. 终止状态(Terminating States):有些状态机会有一个或多个特定的状态,当状态机达到这些状态时,它将停止运行。

有限状态机(Finite State Machine,简称FSM)是一种特殊类型的状态机,它的状态数量是有限的。FSM在计算机科学、数学、物理学等领域都有广泛的应用。它们常常被用来模拟和控制系统的行为。

无限状态机,或称为无界状态机(Infinite State Machine),是一种状态数量无限的状态机。这种状态机的状态数量不受限制,可以是无限的。这种状态机的一个常见例子就是计数器,它可以从一个初始值开始,不断地增加或减少,理论上可以达到无限大或无限小。

例如,交通灯就是一个简单的无限状态机:

状态:
1. 红灯
2. 绿灯
3. 黄灯
转移:
[初始状态] 红灯
计时器达到预设时间 -> [转移] -> 绿灯
[状态] 绿灯
计时器达到预设时间 -> [转移] -> 黄灯
[状态] 黄灯
计时器达到预设时间 -> [转移] -> 红灯

在这个例子中,每个状态都有一个转移,触发条件是“计时器达到预设时间”。这个状态机会无限循环,没有终止状态。

状态机可以是确定性(deterministic)或非确定性(nondeterministic)的。在确定性状态机中,给定当前状态和输入,下一个状态是唯一确定的,上面的交通灯例子就是一个确定性状态机。而在非确定性状态机中,给定当前状态和输入,下一个状态可能有多个。

2、不变性原理

执行(execution):一个状态机的执行描述了状态机可能采取的一系列步骤。一个执行是一个(可能无限的)状态序列,它具有以下属性:

  • 它从初始状态开始;
  • 如果q和r是序列中的两个连续状态,那么存在从q到r的转换。

一个状态如果出现在某个执行中,就称该状态为可达的(reachable)。

保持不变性(Preserved Invariant):在状态机的运行过程中始终保持的某种属性或条件。换句话说,无论状态机如何从一个状态转移到另一个状态,这个属性或条件都不会改变。可以采用形式化的语言描述如下:

一个状态机的保持不变性是一个关于状态的谓词P
如果P(q)对某个状态q为真,并且存在从状态q到状态r的转换,那么P(r)也为真。

不变性原理(Invariant Principle):如果一个状态机的保持不变性对初始状态为真,那么它对所有可达状态皆为真。

通常使用归纳法来证明保持不变性。具体来说,首先证明在开始状态下,保持不变性是成立的,然后,证明如果在某个状态下保持不变性成立,那么在所有可能的下一个状态下,保持不变性也会成立。

不变性原理实际上就是归纳原理的一种为状态机方便使用的形式。证明一个谓词在开始状态为真是归纳的基础情况,而证明一个谓词是保持不变性则对应于归纳的步骤。

保持不变性在证明状态机的正确性和稳定性时非常有用。通过证明某个属性或条件是保持不变的,可以确保状态机在所有可能的状态转换中都能正确地工作。

3、偏序正确性和终止性(Partial Correctness & Termination)

本书在没有对偏序(Partial Order)进行任何介绍的情况下,提到了程序验证中的偏序正确性,我觉得还是应该补充一些说明。

3.1 集合论中的偏序与全序(扩展)

偏序(Partial Order):偏序是某种二元关系,首先,偏序是针对某个集合,然后,它是对集合中元素之间的某种顺序的描述。偏序扩展了我们对“小于”或“等于”的普通理解,并可以应用于许多不同类型的数学对象。一个偏序通常表示为符号“≤”(特别注意,该符号在这里并不是“小于或等于”的意思),满足以下三个性质:

  1. 自反性(Reflexivity): 对于集合中的每个元素a,都有a ≤ a。
  2. 反对称性(Antisymmetry): 如果a ≤ b且b ≤ a,那么a = b。
  3. 传递性(Transitivity): 如果a ≤ b且b ≤ c,那么a ≤ c。

在偏序关系中,并不是集合中的每一对元素都必须是可比较的。如果集合中的每一对元素都是可比较的,那么这个关系就是一个全序关系。

全序(Total Order):也称为线性序(Linear Order),是偏序的一种特殊情况,其中集合中的任意两个元素都是可比较的。这意味着对于任何两个元素a和b,要么 a ≤ b,要么b ≤ a,这就是全序性(Totality)。全序关系满足偏序的所有性质,并增加了全序性。

偏序的例子:幂集中的包含关系

假设集合S = {a, b} ,其幂集(即所有可能的子集的集合):P(S)={∅,{a},{b},{a,b}}

对于P(S)的任意子集A和子集B,当且仅当A是B的子集时,A与B之间的包含关系A ⊆ B就是一个偏序。

可以看到这个关系满足偏序的三个性质:

1. **自反性**: 对于任何子集A,A ⊆ A。
2. **反对称性**: 如果A ⊆ B且B ⊆ A,那么A = B。
3. **传递性**: 如果A ⊆ B且B ⊆ C,那么A ⊆ C。

这个关系是偏序但不是全序,因为并不是集合中的每一对元素都是可比较的。例如,对于P(S)的子集{a}和{b},它们之间就没有这种包含关系。

全序的例子:整数集合中的自然顺序关系

在整数集合中,对于任何整数a和b,要么a ≤ b,要么b ≤ a,这里的“≤”表示“小于或等于”
这里的“小于或等于”关系就是一个全序关系的例子

3.2 程序验证中的偏序正确性和终止性(扩展)

集合论中的偏序关系可以扩展到计算机程序验证之中,计算机程序可以抽象为状态机模型,偏序关系可以用来描述程序状态之间的顺序关系,而程序算法就是计算偏序关系的过程。

偏序正确性(Partial Order Correctness):即过程(process)如果有最终结果的话,这些结果必须满足系统要求。换句话说,如果算法终止,则其输出是正确的。偏序正确性是一种程序验证的方法,它的目标就是要证明在所有可能的执行顺序下,程序都能正确地执行。但是,偏序正确性并不保证算法一定会终止。一个偏序正确的算法可能会陷入无限循环。

偏序正确性通常涉及到以下两个步骤:

  1. 偏序建模:首先,需要将程序的行为建模为一种偏序关系。在这个模型中,每个事件都被表示为一个点,如果事件A在事件B之前发生,那么就有一条从A到B的边。这种模型通常被称为“偏序图”或“事件图”。不难发现,偏序建模可以用来建立程序的状态机模型。
  2. 偏序验证:然后,我们需要验证在所有可能的执行顺序下,程序都能满足它的要求。

偏序正确性通常使用不变性原理来证明。

终止性(Termination):终止性是指过程总是会产生最终的结果。换句话说,算法总是在有限的步骤内结束。它并不关心算法的输出是否正确,只关心算法是否终止。

终止性一般使用良序原理证明。

将偏序正确性和终止性结合起来,就可以得到算法的完全正确性(Total Correctness)。一个完全正确的算法不仅在终止时给出正确的结果,而且总是在有限的步骤内终止。

3.1 快速求幂

本书以快速求幂算法为例,介绍了使用不变性原理来证明偏序正确性的证明过程。

计算一个数的幂,例如计算a的b次方,最直接的方法是将a乘以自己(b-1)次。但有一种更高效的方法叫做“快速求幂”,它可以用更少的乘法操作来得到结果。

这个算法的基本思路是这样的:

  1. 使用三个寄存器(可以想象为三个存储空间):x, y, 和 z。开始时,x存储数值a,y存储数值1,z存储数值b。其中,a为实数,b为非负整数。即
  2. 然后开始不断地检查z的值。如果z为0,算法结束,此时y的值就是我们要的答案。
  3. 如果z是偶数,更新x为x的平方,并将z减半。
  4. 如果z是奇数,将y更新为y乘以x,然后再更新x为x的平方,并将z减去1后再减半。
  5. 重复上述步骤,直到z为0。

建立快速求幂的状态机模型如下:

  1. 状态: 这个机器的每个状态都是由三个数值组成的:x, y, 和 z。即(x,y,z),其中x∈ℝ,y∈ℝ,z∈ℕ。
  2. 初始状态: 当我们开始时,x是a,y是1,z是b。即(x,y,z)=(a,1,b)。
  3. 状态转移规则: 这个机器会根据z的值来决定下一步怎么做。
    • 如果z是偶数,x会变成x的平方,而z会减半。即
      ( x , y , z ) → ( x 2 , y ,求商( z , 2 )) (x,y,z)→(x^2,y,求商(z,2)) xyzx2y,求商(z2))
    • 如果z是奇数,y会变成y乘以x,x会变成x的平方,而z会减1后再减半。即
      ( x , y , z ) → ( x 2 , x y ,求商( z , 2 )) (x,y,z)→(x^2,xy,求商(z,2)) xyz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值