使用底层类型 Nothing 编码双重否定背后的直觉
Intuition behind encoding double negation with bottom type Nothing
像这样无形编码double negation
type ¬[T] = T => Nothing
type ¬¬[T] = ¬[¬[T]]
即
(T => Nothing) => Nothing
英里 explains
...the bottom type (Scala’s Nothing
type) maps to logical falsehood... negation of a type A
(I’ll write it as ¬[A]
) to have as it's values everything which isn’t an instance of A
Nothing
也用来表示non-termination,即不能产生值的计算
def f[T](x: T): Nothing = f(x)
把这个解释套用在(T => Nothing) => Nothing
上,好像意思是:
( T => Nothing ) => Nothing
Assuming a value of type T, then the program does not terminate, hence it never produces a value.
这种直觉是正确的吗?虚假和非终止的概念是否等同?如果是这样,为什么有一个不产生值的程序,不产生值,意味着我们有一个值T?
If so, why having a program that does not produce a value, which does not produce a value, means we have a value of T?
事实并非如此。 Curry–Howard correspondence is not classical but intuitionistic. There is no law of excluded middle T ∨ ¬T
(但存在排中律的双重否定)产生的逻辑。
¬¬T
不等同于 T
。
T => ¬¬T
但不是 ¬¬T => T
.
Are concepts of falsehood and non-termination equivalent?
没有。通常忽略非终止。根据 Curry–Howard 对应关系,当相应类型有人居住时(即存在该类型的值(没有自由变量的术语)),声明为真,当该类型无人居住时,声明为假。
Nothing
(或底式⊥
)无人居住(对应false
)。如果 T
是有人居住的,那么 T => Nothing
是无人居住的(否则 Nothing
是有人居住的)。如果 T => Nothing
有人居住,那么 T
就没有人居住(同样,否则 Nothing
会有人居住)。这就是定义 ¬T = T => Nothing
.
的原因
当考虑非终止时,这意味着每个类型 T
被提升为类型 T'
由 T
和底值 ⊥
的元素组成(divergence,不要与底部类型混淆)。
像这样无形编码double negation
type ¬[T] = T => Nothing
type ¬¬[T] = ¬[¬[T]]
即
(T => Nothing) => Nothing
英里 explains
...the bottom type (Scala’s
Nothing
type) maps to logical falsehood... negation of a typeA
(I’ll write it as¬[A]
) to have as it's values everything which isn’t an instance ofA
Nothing
也用来表示non-termination,即不能产生值的计算
def f[T](x: T): Nothing = f(x)
把这个解释套用在(T => Nothing) => Nothing
上,好像意思是:
( T => Nothing ) => Nothing
Assuming a value of type T, then the program does not terminate, hence it never produces a value.
这种直觉是正确的吗?虚假和非终止的概念是否等同?如果是这样,为什么有一个不产生值的程序,不产生值,意味着我们有一个值T?
If so, why having a program that does not produce a value, which does not produce a value, means we have a value of T?
事实并非如此。 Curry–Howard correspondence is not classical but intuitionistic. There is no law of excluded middle T ∨ ¬T
(但存在排中律的双重否定)产生的逻辑。
¬¬T
不等同于 T
。
T => ¬¬T
但不是 ¬¬T => T
.
Are concepts of falsehood and non-termination equivalent?
没有。通常忽略非终止。根据 Curry–Howard 对应关系,当相应类型有人居住时(即存在该类型的值(没有自由变量的术语)),声明为真,当该类型无人居住时,声明为假。
Nothing
(或底式⊥
)无人居住(对应false
)。如果 T
是有人居住的,那么 T => Nothing
是无人居住的(否则 Nothing
是有人居住的)。如果 T => Nothing
有人居住,那么 T
就没有人居住(同样,否则 Nothing
会有人居住)。这就是定义 ¬T = T => Nothing
.
当考虑非终止时,这意味着每个类型 T
被提升为类型 T'
由 T
和底值 ⊥
的元素组成(divergence,不要与底部类型混淆)。