在范畴论 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"
但是在这最后一段,我感觉自己只是搞错了事情的来龙去脉。
(相关问题的跟进请参见此处。)
Int
和[Int]
不是同构的(它们是吗?),但它们都有值,因此都为真,因此它们异或为假。如果这不是情况,那我的错误在哪里? - Enlico(A -> B) and (B -> A)
。这仍然在布尔逻辑中合法地符合异或运算,但它在直觉上比丹尼尔答案中的那个弱。 - luqui