首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有正确的方法组成摩尔机器吗?

有正确的方法组成摩尔机器吗?
EN

Stack Overflow用户
提问于 2015-08-23 17:17:04
回答 2查看 346关注 0票数 0

麦利机只是一个有状态函数。因此,两台米利机器可以使用简单的功能组合组成。摩尔机具有初始输出值的受限米利机。有办法组成两台摩尔机器吗?这就是我在Haskell尝试过的:

代码语言:javascript
运行
复制
type Mealy a b = a -> b -- a stateful function, probably using unsafePerformIO

type Moore a b = (b, Mealy a b) -- output must be consistent with current state

composeMoore :: (c, b -> c) -> (b, a -> b) -> (c, a -> c)
composeMoore (x, f) (_, g) = (x,   f . g) --    is this correct?
composeMoore (_, f) (y, g) = (f y, f . g) -- or is this correct?

我相信他们都错了。事实上,我认为不可能组成两台摩尔机器。不过,我可能错了。有正确的方法组成摩尔机器吗?

定义:摩尔机器的组成是一种(.) :: Moore b c -> Moore a b -> Moore a c型运算,其结合定律(即h . (g . f) = (h . g) . f)是成立的。

注:,这只是一个理论问题。我实际上并没有使用Haskell来编写有状态函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-23 20:55:42

不,没有正确的方法组成两台摩尔机器。没有同一性元素,作文就没有意义。这是因为为了有意义,组合以及它的标识元素必须一起形成一个单样。这是类别的数学定义。

类别C由以下内容组成:

  1. 称为对象的集合的一个类,ob(C)
  2. 一个类,hom(C),对象之间的态射。霍姆类(hom class,hom(a, b) )是从ab (每个态射f表示为f : a -> b)的所有态射的集合。
  3. 一个名为hom(b, c) * hom(a, b) -> hom(a, c)的二进制操作称为态射的合成,对于每三个对象( abc )。

此外,他们必须符合下列法律:

  1. Associativity:对于所有的f : a -> bg : b -> ch : c -> d来说,关系h . (g . f) = (h . g) . f必须成立。
  2. 左恒等式:对于所有对象,x必须有一个名为x的同一性态射id_x : x -> x,这样对于所有f : a -> x,关系id_x . f = f都是正确的。
  3. 权利标识:对于所有对象,必须有一个名为x的同一性态射( id_x : x -> x ),因此对于所有g : x -> b,关系g . id_x = g都是正确的。

没有办法组成两台摩尔机器,仅仅是因为两台摩尔机器的合成没有同一性元素。因此,摩尔机器不构成一个类别。摩尔机器被定义为由以下六个元组组成的(s, s0, a, b, t, g)

  1. 一组有限的状态s
  2. 开始状态s0,它是一个元素s
  3. 一个有限集a称为输入字母表。
  4. 一个有限集b称为输出字母表。
  5. 一个转换函数t : s * a -> s
  6. 输出函数g : s -> b

摩尔机器没有标识元素的原因是,摩尔机器的输出不依赖于它的输入。它只取决于当前的状态。初始状态为s0。因此,初始输出是g(s0)。标识元素的初始输出将没有定义,因为它必须匹配尚未确定的输入类型。因此,“身份要素”将无法满足左和(或)右身份法律。

票数 -1
EN

Stack Overflow用户

发布于 2015-08-23 18:02:58

我认为您的结果机器必须有第一个参数的开始输出,但也需要将第一个参数的转换应用到第二个机器的开始输出。

所以你的构图功能既不是你给出的两种,而是它们的混合:

代码语言:javascript
运行
复制
composeMoore :: (c, b -> c) -> (b, a -> b) -> (c, a -> c)
composeMoore (x, f) (y, g) = ((x; f y), f . g)

其中;是不纯的计算排序操作符(如JS中的, )。

我认为你的推理可以从使用纯机器模型中获益良多:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32169331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档