问题是我们如何在 agda 中定义双射?定义:
我们知道
2 + 2 = 2 × 2 = 2^2 = 4
对于数字。同样,我们有
Bool + Bool ∼= Bool × Bool ∼= Bool → Bool
其中 A ∼= B 表示 A 和 B 之间存在双射,即存在
f : A → B
和g : B → A
互为逆元,即g (f x) = x
对所有人x : A
和f (g y) = y
对所有人y : B
。在 Agda 中实现这些双射!
所以我开始Bool
为它定义一些函数:
data Bool : Set where
true : Bool
false : Bool
not : Bool → Bool
not true = false
not false = true
T : Bool → Set
T true = ⊤
T false = ⊥
_∧_ : Bool → Bool → Bool
true ∧ b = b
false ∧ b = false
_∨_ : Bool → Bool → Bool
true ∨ b = true
false ∨ b = b
_xor_ : Bool → Bool → Bool
true xor b = not b
false xor b = b
但我坚持双射,完全不知道如何解决它。