ocam机器在ocaml

时间:2011-04-30 14:48:21

标签: ocaml

我想要合成两个Mealy machines和两个finite state transducers。如何用ocaml表示Mealy机器/传感器?

3 个答案:

答案 0 :(得分:3)

Nicollet's answer对您之前的问题有什么问题?只需在您的记录中添加output : 'state * 'letter -> 'output成员,即可完成。

答案 1 :(得分:2)

您在自己的回复中选择的类型不足。

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,因此您的构图是错误的。

您在this post中的自动机解决方案中有两个解决方案:

  1. 添加Gasche已经提出的输出功能
  2. 例如,将转换函数的类型更改为正确的转换函数类型'state -> 'letter -> ('letter * 'state)
  3. 因此,您将能够提供合成功能。

答案 2 :(得分:0)

您可以在python包中研究Mealy传感器的tulip实施here。请注意,摩尔机器是严格因果关系的Mealy机器,详情请参考this book(大多数作者都错了,这就是我在这里提到它的原因。你可以通过参考来验证摩尔机器最初确实定义了摩尔的原始论文。)

说到构图,事情变得非常棘手。如果你的意思是级联同步组合,那么结果可以很容易地计算出来,因为没有反馈连接。但是如果你通过“组合”引用反馈组合,那么你需要选择语义。例如,对于同步反应语义,组合的结果由每个时间步的固定点解决方案定义(参见上面引用的关于该主题的指南)。

需要定点解决方案,因为如果两个换能器都是Mealy,那么它们可能都是非严格因果关系(即,电流输出可能取决于电流输入)。相比之下,摩尔机器是严格因果关系(严格因果关系的任何Mealy机器都是摩尔机器,但对于没有非严格因果关系的Mealy机器,确实存在等效的摩尔机器)。因此,使用Mealy机器编写Moore机器不需要固定点计算来模拟结果。