【问题标题】:What is the bottom type?什么是底层类型?
【发布时间】:2017-07-26 04:57:44
【问题描述】:

在维基百科中,bottom type 被简单地定义为“没有值的类型”。但是,如果b 是这个空类型,那么产品类型(b,b) 也没有值,但似乎与b 不同。我同意底部是无人居住的,但我认为这个属性不足以定义它。

通过Curry-Howard correspondence,底部与数学错误相关联。现在有一个逻辑原则表明从 False 遵循任何命题。对于 Curry-Howard,这意味着 forall a. bottom -> a 类型是有生命的,即存在一系列函数 f :: forall a. bottom -> a

f 这些函数是什么?它们是否有助于定义底部,也许是所有类型的无限乘积forall a. a

【问题讨论】:

    标签: lambda-calculus type-theory curry-howard


    【解决方案1】:

    在数学中

    Bottom 是没有价值的一种类型。即:任何空类型都可以起到底层的作用。

    那些f :: forall a . Bottom -> a 函数是空函数。函数集理论定义中的“空”。

    在编程中

    为了方便起见,将一个具体的空类型专用于编程语言库的底部。代码的可读性和兼容性受益于使用与底部相同的空类型的每个人。

    在 Haskell 中

    让我们用更友好的名称来称呼它们“Bottom” -> “Void”、“f” -> “absurd”。

    {-# LANGUAGE EmptyDataDecls #-}
    data Void
    

    此定义不包含任何构造函数 => 无法创建它的实例 => 它是空的。

    absurd :: Bottom -> a
    absurd = \ case {}
    

    在case表达式中,我们不必处理任何case,因为没有。

    他们已经是defined in package base

    【讨论】:

    • 我在命题演算中看到了 3 种公式。 1) 重言式,在 Heyting 代数的所有解释中都是正确的。 2)否定是重言式的公式,它们在每个Heyting解释中都是错误的。 3) 值取决于解释的公式。 Curry-Howard 案例 2 和 3 都对应于空类型。但是我认为情况 2 应该在空类型中单独列出:只有那些类型才应该被称为底部。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 2015-06-02
    • 2014-03-23
    • 2014-04-15
    相关资源
    最近更新 更多