“它是有限状态转导器的严格特例:每个状态—输入对恰有一条边,边的输出恰为一个字符。与Moore 机相比,输出由“旧状态与本次输入”共同决定,而不是只贴在到达的状态上。”
形式陈述 ​
Moore 机是六元组
其中
长度因而是
Moore 机属于有限状态转导器,但输出时机与Mealy 机相反:输入只决定转到哪里,输出仅由当前状态决定。这里同样没有接受集合或终态补写;机器对每个输入前缀都给出可观察状态标签。
直觉
把 Moore 状态想成控制面板的稳定模式,灯号贴在模式上而非事件边上。机器尚未收到任何输入时,面板已经显示初态输出;收到事件后先更新模式,再显示新模式。这使输出在状态驻留期间保持不变,代价是对事件的反应在表示上经过一次状态更新。
一个状态不能因“刚读到的字符不同”而同时显示两个输出。若同一逻辑状态会从不同入边携带不同输出,就必须把它拆成多个带不同
初始字符并非无关装饰。若一台机器输出 LOCKED 后才接收事件,另一台只在第一个事件后输出,两者在空输入上的可观察行为已经不同。教材、硬件描述语言和测试框架常采用不同采样约定,忽略这一点会制造一个位置的错位。
例子与边界
用两状态转门说明输出轨迹。状态 L;状态 U。输入 coin 使 push 使
从 coin push push,状态依次为
故经典输出轨迹为 LULL;若只采样读入后的输出,则是 ULL。这两个字都能复算,但对应不同接口,不能把前者声称成长度保持变换。
将它改成 Mealy 机时,可在边
Moore 机仍无法保存无界计数或在读完整个任意长输入后倒序吐出原文。增加一个巨大状态表可以覆盖固定上限,不会跨越有限记忆边界;增加终态字符串输出则已经改变了本页定义。
推论与应用
Moore 表示适合状态可视化、交通灯相位、微程序控制和只允许寄存器输出的同步电路。测试可以在每个输入后只断言当前状态标签,不必同时区分多条入边,因此规范通常更容易检查。
最小化时,初始划分首先按
Moore 到 Mealy 的转换通常不增状态,Mealy 到 Moore 可能拆状态。状态数差异因此更多反映输出放置方式,而非一方拥有更强的有限记忆。工程选择还需计入时钟边界、组合逻辑毛刺和外部协议何时采样输出。
两台 Moore 机的等价可直接追踪状态对:先比较初态输出,再对每个输入同步走一步并比较新状态输出。若某个可达状态对标签不同,通往它的输入字就是反例;若有限状态对全部检查完仍一致,则所有未来轨迹一致。这里包含初始输出的检查,遗漏它会把空输入上的差异藏掉。
参考资料
- Edward F. Moore, “Gedanken-Experiments on Sequential Machines,” in Automata Studies, Princeton University Press, 1956, pp. 129–153.
- Zvi Kohavi and Niraj K. Jha, Switching and Finite Automata Theory, 3rd ed., Cambridge University Press, 2010, Chapter 14.
- John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2006, §2.7.