我想要合成两个Mealy machines和两个finite state transducers。如何用ocaml表示Mealy机器/传感器?
答案 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中的自动机解决方案中有两个解决方案:
'state -> 'letter -> ('letter * 'state)
。 因此,您将能够提供合成功能。
答案 2 :(得分:0)
您可以在python
包中研究Mealy传感器的tulip
实施here。请注意,摩尔机器是严格因果关系的Mealy机器,详情请参考this book(大多数作者都错了,这就是我在这里提到它的原因。你可以通过参考来验证摩尔机器最初确实定义了摩尔的原始论文。)
说到构图,事情变得非常棘手。如果你的意思是级联同步组合,那么结果可以很容易地计算出来,因为没有反馈连接。但是如果你通过“组合”引用反馈组合,那么你需要选择语义。例如,对于同步反应语义,组合的结果由每个时间步的固定点解决方案定义(参见上面引用的关于该主题的指南)。
需要定点解决方案,因为如果两个换能器都是Mealy,那么它们可能都是非严格因果关系(即,电流输出可能取决于电流输入)。相比之下,摩尔机器是严格因果关系(严格因果关系的任何Mealy机器都是摩尔机器,但对于没有非严格因果关系的Mealy机器,确实存在等效的摩尔机器)。因此,使用Mealy机器编写Moore机器不需要固定点计算来模拟结果。