Idris 空虚会让你产生什么,或者做什么?

Idris 空虚会让你产生什么,或者做什么?,idris,proof-of-correctness,Idris,Proof Of Correctness,Brady说,在Idris的类型驱动开发中 如果能够提供空类型的值,则可以生成任何类型的值。换句话说,如果你有一个不可能值发生的证据,你可以做任何事情。前奏曲提供了一个函数,void,它表示: 我很难理解这意味着什么。如何从Void生成任何类型的值?这意味着你什么都可以做?如果您可以参考void来解释这一点,将特别有帮助。每种类型都有一组引入规则和一个消除规则。空虚是一种特殊的东西。它本身没有介绍规则。不过,其他类型的应用程序都附带了针对Void的额外引入规则。例如,Nat的相等性有一个关于Vo

Brady说,在Idris的类型驱动开发中

如果能够提供空类型的值,则可以生成任何类型的值。换句话说,如果你有一个不可能值发生的证据,你可以做任何事情。前奏曲提供了一个函数,
void
,它表示:


我很难理解这意味着什么。如何从
Void
生成任何类型的值?这意味着你什么都可以做?如果您可以参考
void

来解释这一点,将特别有帮助。每种类型都有一组引入规则和一个消除规则。空虚是一种特殊的东西。它本身没有介绍规则。不过,其他类型的应用程序都附带了针对Void的额外引入规则。例如,Nat的相等性有一个关于Void的引入规则:

n: Nat -> 0 = S(n) -> Void
(Idris根据其自身的内部规则生成这些规则,以确定不同的术语无法进行模式匹配。)

消除规则让你走另一条路,例如:

Void -> n: Nat -> 0 = S(n)
实际上,它说所有不可能的事情都等价地不可能——如果你有一件不可能的事情,那么你可以有任何其他不可能的事情

更深层次的问题是:如果我们没有这个排除规则会发生什么?我们最终会有不同类别的不可能的事情,不同类型的不可能

我不知道那个问题的答案

然而,如果你假设0=1,那么很容易证明任何东西都等于其他任何东西(因为你可以证明repeat(1,f,x)=repeat(0,f,x),所以对于所有的x和f,f(x)=x,所以定义f,其中f(a)=y,你就有了x=y)

因此,如果我们知道所有无效的引入规则都是从不等式中推导出来的,那么一个更有限的消除规则(如以下)将等同于更一般的规则:

Void -> 0 = 1

每种类型都有一组引入规则和消除规则。空虚是一种特殊的东西。它本身没有介绍规则。不过,其他类型的应用程序都附带了针对Void的额外引入规则。例如,Nat的相等性有一个关于Void的引入规则:

n: Nat -> 0 = S(n) -> Void
(Idris根据其自身的内部规则生成这些规则,以确定不同的术语无法进行模式匹配。)

消除规则让你走另一条路,例如:

Void -> n: Nat -> 0 = S(n)
实际上,它说所有不可能的事情都等价地不可能——如果你有一件不可能的事情,那么你可以有任何其他不可能的事情

更深层次的问题是:如果我们没有这个排除规则会发生什么?我们最终会有不同类别的不可能的事情,不同类型的不可能

我不知道那个问题的答案

然而,如果你假设0=1,那么很容易证明任何东西都等于其他任何东西(因为你可以证明repeat(1,f,x)=repeat(0,f,x),所以对于所有的x和f,f(x)=x,所以定义f,其中f(a)=y,你就有了x=y)

因此,如果我们知道所有无效的引入规则都是从不等式中推导出来的,那么一个更有限的消除规则(如以下)将等同于更一般的规则:

Void -> 0 = 1