ocaml中的mealy机器

ocaml中的mealy机器,ocaml,Ocaml,我想拿二加二的作文。如何在ocaml中表示Mealy机器/传感器?您前面的问题有什么问题?只需在您的记录中添加一个输出:“state*”letter->“output成员,您就完成了。您在自己的回复中选择的类型是不够的 type ('state,'letter) mealy = { initial : 'state ; final : 'state -> bool ; transition : 'letter -> 'state -> 'lette

我想拿二加二的作文。如何在ocaml中表示Mealy机器/传感器?

您前面的问题有什么问题?只需在您的记录中添加一个
输出:“state*”letter->“output
成员,您就完成了。

您在自己的回复中选择的类型是不够的

type ('state,'letter) mealy = {
  initial    : 'state ;
  final      : 'state -> bool ;
  transition : 'letter  -> 'state -> 'letter -> 'state ;
}
事实上,您的转换不会产生输出,但会使用它来知道您将达到哪个状态。用数学的话来说,您提供了类型为$(I,Q,O)\rightarrow Q$的转换函数,而不是$(I,Q)\rightarrow(O,Q)$。Curryfication允许您写入$I\rightarrow Q\rightarrow(O,Q)$,但无法展开最后一对类型。因此,您的作文是错误的,因为您引入了一个不存在的
d

您在中有两个来自automata解决方案的解决方案:

  • 添加Gasche已经提出的输出函数
  • 将转换函数的类型更改为正确的类型,例如
    “state->”letter->(“letter*”state)

    因此,您将能够提供一个合成函数。

    您可以在包
    tulip
    中学习python实现Mealy传感器。请注意,摩尔机器是严格因果的米利机器,有关详细信息,请参阅(大多数作者弄错了,这就是我在这里提到它的原因。您可以通过参考摩尔的原始论文来验证摩尔机器最初确实是这样定义的)

    说到作文,事情变得非常棘手。如果你的意思是级联同步合成,那么结果很容易计算,因为没有反馈连接。但如果“合成”指的是反馈合成,则需要选择语义。例如,使用同步反应语义,合成的结果由每个时间步的定点解决方案定义(有关主题的指针,请参阅上面引用的书)


    需要固定点解决方案,因为如果两个传感器都是Mealy,那么它们可能都是非严格因果关系(即,电流输出可能取决于电流输入)。相比之下,摩尔机器是严格因果机器(任何严格因果机器都是摩尔机器,但对于非严格因果机器,不存在等价的摩尔机器)。因此,将摩尔机器与米利机器组合起来不需要定点计算来模拟结果。

    请注意,答案是关于自动机的,即受体,而不是(顺序)传感器。这两个概念是不同的。即使传感器配备有接受条件(不典型),它们仍然不同,因为非确定性的语义定义不同。