2016-09-23 77 views
2

在试图理解一些概念时,我经常遇到术语“相邻”。这些东西太抽象,我不明白,因为我既不是田野也不是分类理论专家。邻接在实际应用中意味着什么?

我发现的最简单的情况是Monoid Maybe a实例,该实例的行为往往不像我期望的Nothing那样。

Wikipedia我们可以知道,通过将一个元素“邻接”到一个半群,我们可以得到一个不同的Monoid实例。我不明白这句话,但所给的公式表明,它正是我需要的(而不是默认出于某种原因):

任何半群可以简单地通过不相邻的元素e变成一个独异S和限定Ë•S = S =秒•e计算所有s∈S.

  • Doe的 “邻接” 是指相同的至少在这种情况下为 “加入”?
  • 这个概念还有其他简单的例子吗?
  • 什么是“左伴”的最简单可能的实例?
+0

Haskell中的伴随函数的一个重要用法是monads(en.wikipedia.org/wiki/Monad_(category_theory)):monad是两个这样的函子的组成。 –

回答

8

有时候,“毗连”的意思是“增加新的东西”,就像你引用的与半群相关的句子。例如。有人可能会说使用Maybe a意味着将新元素Nothing添加到a类型中。就个人而言,我只会使用“添加”为此。

这与分类意义上的伴随无关,这是一个棘手的概念。

粗略地说,假设你有一个功能型的形式

F a -> b 

哪里F是从类型类型的某种映射(更准确地说,是一个仿函数)。有时候,你可以表达的同构型,以具有形式

a -> G b 

其中“神奇”的左侧功能F移动到右侧,换上G上面的一个。

规范的例子是柯里:让例如

F T = (T, Int) 
G T = Int -> T 

然后我们有

(F a) -> b 
-- definition of F 
= (a, Int) -> b 
-- currying 
=~ a -> (Int -> b) 
-- definition of G 
= a -> G b 

在这种情况下,我们写F -| G它读作 “F留给伴随到G”。

每当您可以“很好地移动”在箭头另一侧的输入类型上的操作,将其更改为输出类型上的另一个操作时,您就有一个伴随点。 (技术上,“很好”意味着我们有一个自然的同构)