【发布时间】:2013-11-17 19:50:25
【问题描述】:
我不是数学家,但我觉得存在一些逻辑问题。
让我们从 ADT 原语开始,例如“unit”类型。它应该在类型集的上下文中扮演“1”的角色。但实际上,我们在 C、C++ 等中看到“unit”类型通常被称为“void”等价物。同时我们在 ADT 中有自己的“void”类型,它扮演“0”的角色,实际上定义自身的 NO 值。
对此的一些观点听起来像“单元类型不带来任何信息,因此它是无用的,我们可以将其视为 void-like”。但是 C void 等价物在哪里?或者,void = unit,“0=1”?引入一些悖论是个坏主意。
然后,让我们更深入。单位类型只定义一个值,好吧。但是,为什么在 ADT 理论中
unit + unit = 2*unit
我们什么时候应该得到单位? “+”的工作方式类似于“或”定义我们称为变体类型的类型。 “单位或单位”绝对不会给我们“位”,或者任何更复杂的东西来继续。
提到 haskell 元组,它甚至没有单个元素的元组,但可以为空。 所以它也来自ADT理论。元组是项类型的乘法,因此一个元素元组与那个裸元素相同,空元组是单位值()。
a == (a) == ((a)) == ...
() == (()) == ...
所以,这里有一个悖论:空元组的长度是多少?可以看到,它的长度同时是零和一……
【问题讨论】:
标签: haskell algebraic-data-types type-theory unit-type