什么类型对应于类型论中的 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)