类型的基数

3
这句话的意思是什么,以及下面这些类型的基数是多少,例如:
unit->int  

bool->(int->bool)
1个回答

2
类型的基数是该类型可能的合法值数量。
对于函数类型,我们通常希望考虑两个对于每个输入返回相同值的函数在基数上“相同”,至少在基数目的上是这样的(这被称为“外延相等”)。
我假设这是一个作业问题,并进一步假设不终止或产生未定义值的函数不应包括在内(因为它们确实不会包括在典型的数学处理中)。
原则上,表达可以有有限数量可能值的类型的基数相当容易,因为你可以给出一个数字作为基数。然而,对于无限基数,从技术上讲,不同类型的无穷大之间存在区别。例如,一个不可数的无限大是“大于”可数的无限大。(老实说,我不确定你是否需要知道这一点,或者你只需要给出“无限”的答案-检查你的课程笔记)。因此,最好指定你所说的是哪种无限大,例如通过引用“更简单”类型的基数来指定。
因此,unit->int的基数与int的基数相同(你也可以选择任何其他目标类型),因为类型为unit->X的值必须是一个“忽略其输入”并返回类型为X的常量值的常量函数。
我希望这个不完整的答案足以让你开始。

@Robin Green:非常感谢,但第二个问题呢?我可以建议它是2 * 2 * #(int)吗? - rookie
@Robin Green:这就是问题所在,我的笔记中没有关于无穷大的解释,在网络上也找不到合适的信息。我知道int有32位,所以它可以获取高达2^32的值?那第二个呢?我是对的吗? - rookie
1
@rookie:不是的,那不是正确答案。考虑到 int->bool,假设只有10个整数(哈哈),从整数到布尔值的函数数量肯定会超过20个:实际上是1024个。所以,当你有一个函数类型时,它不仅仅是两个基数相乘的问题。 - Robin Green
1
@rookie:int在某些语言(或平台)中仅有32位(在C语言中取决于平台,但我可以从语法上判断这不是C!)。但如果你被告知int有32位,那就没问题了——关于无限的所有内容都与你的答案无关。 - Robin Green
@Robin Green:非常感谢,现在我明白了。您在哪里读到所有这些信息?如果有任何链接,我将不胜感激。看来您学过集合论课程,我错了吗? - rookie
1
@rookie:从各种来源来看,cardinality的定义可以在维基百科上找到;extensional equality在我的研究中经常出现(我从事计算机科学研究),但我记不起具体的来源了;而unit->X的推理是我自己想出来的。 - Robin Green

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接