haskell对象的Hask类是一个本地小类的例子吗?
http://ncatlab.org/nlab/show/locally+small+category
也许不是.. hask作为cpo http://www.cs.gunma-u.ac.jp/~hamana/Papers/cpo.pdf
haskellwiki,http://www.haskell.org/haskellwiki/Hask有非常好的信息,显示Hask不是笛卡尔闭合。
答案 0 :(得分:2)
什么是Hask?如果它包含所有haskell可定义的“函数”作为态射,那么肯定不是
data Big = Big (Big -> Big)
Big -> Big
的“hom set”包含整个无类型的lambda演算!我怀疑它是局部小的,即使你只允许终止函数 - 我认为没有系统-f的集合理论模型。
答案 1 :(得分:1)
Hask对象是可数无限的Haskell类型。 Hask箭头是Haskell函数,它们也是无数的。因此Hask不仅局部小,而且Hask很小。
卡(OB(Hask))=卡(HOM(Hask))=卡(N)
关于Hask的更多细节:
http://yannesposito.com/Scratch/en/blog/Category-Theory-Presentation/
答案 2 :(得分:0)
特别是@PhillipJF,这是一个尝试。我不是想制作最准确或最优雅的Hask模型,我只是想制作 模型。请批评。
如果A是Haskell类型,则在Hask中将类型A 的值定义为类型为A的类型良好的Haskell项的等价类(字符串x,x :: A
将为{被类型检查器接受),模数扩展相等。也就是说,如果它们扩展到相同(可能是无限的)正规形式,则认为两个项是相等的,并且没有hnf的两个项也是相等的。这不是可判定的事实是无关紧要的,我们只需要在理论上设定这些条件,我毫不怀疑我们可以这样做。
让 Hask 的对象成为Haskell类型(原始类型和用户定义的类型;我们假设所有用户可定义的类型都存在并且具有不同的名称。用户定义的类型定义是源代码,所以它们是可数的。只需将它们命名为D0
,D1
,......根据计数。)。
让态射 A - > B 是 A - >的类型的值。乙
让 A 上的标识成为id :: A -> A
的等价类,同样让g
和f
的组合成为{{1}的等价类}}
所有值的集合都是可数集合,因为术语只是有限字母表中的字符串。所以 Hask 的模型很小。
这是错的吗?