什么类型对应于类型论中的 a xor b?
What type corresponds to a xor b in type theory?
在 Category Theory 8.2 的末尾,Bartosz Milewski 展示了逻辑、类别理论和类型系统之间对应关系的一些示例。
我在徘徊与逻辑异或运算符对应的内容。我知道
a xor b == (a ∨ b) ∧ ¬(a ∧ b) == (a ∨ b) ∧ (¬a ∨ ¬b)
所以我只解决了部分问题:a xor b
对应(Either a b, Either ? ?)
。但是缺少的两种类型是什么?
貌似xor
怎么写其实归结起来就是not
.
怎么写
那么 ¬a
是什么?我的理解是,如果存在 a
类型的元素(至少一个),则 a
是合乎逻辑的。所以 not a
为真,a
应该为假,即 Void
。因此,在我看来,有两种可能:
(Either a Void, Either Void b) -- here I renamed "not b" to "b"
(Either Void b, Either a Void) -- here I renamed "not a" to "a"
但在最后一段中,我觉得我只是误入歧途。
(跟进问题 。)
否定的标准技巧是使用-> Void
,所以:
type Not a = a -> Void
当 a
本身是可证明无人居住的类型时,我们就可以构造出这种类型的总居民;如果有 a
的任何居民,我们就无法构建这种类型的总居民。对我来说听起来像是一种否定!
内联,这意味着您对 xor 的定义类似于以下之一:
type Xor a b = (Either a b, (a, b) -> Void) -- (a ∨ b) ∧ ¬(a ∧ b)
type Xor a b = (Either a b, Either (a -> Void) (b -> Void)) -- (a ∨ b) ∧ (¬a ∨ ¬b)
在 Category Theory 8.2 的末尾,Bartosz Milewski 展示了逻辑、类别理论和类型系统之间对应关系的一些示例。
我在徘徊与逻辑异或运算符对应的内容。我知道
a xor b == (a ∨ b) ∧ ¬(a ∧ b) == (a ∨ b) ∧ (¬a ∨ ¬b)
所以我只解决了部分问题:a xor b
对应(Either a b, Either ? ?)
。但是缺少的两种类型是什么?
貌似xor
怎么写其实归结起来就是not
.
那么 ¬a
是什么?我的理解是,如果存在 a
类型的元素(至少一个),则 a
是合乎逻辑的。所以 not a
为真,a
应该为假,即 Void
。因此,在我看来,有两种可能:
(Either a Void, Either Void b) -- here I renamed "not b" to "b"
(Either Void b, Either a Void) -- here I renamed "not a" to "a"
但在最后一段中,我觉得我只是误入歧途。
(跟进问题
否定的标准技巧是使用-> Void
,所以:
type Not a = a -> Void
当 a
本身是可证明无人居住的类型时,我们就可以构造出这种类型的总居民;如果有 a
的任何居民,我们就无法构建这种类型的总居民。对我来说听起来像是一种否定!
内联,这意味着您对 xor 的定义类似于以下之一:
type Xor a b = (Either a b, (a, b) -> Void) -- (a ∨ b) ∧ ¬(a ∧ b)
type Xor a b = (Either a b, Either (a -> Void) (b -> Void)) -- (a ∨ b) ∧ (¬a ∨ ¬b)