在 Agda 中证明子集的可判定性
Proving decidability of subset in Agda
假设我在 Agda 中定义了这个子集
Subset : ∀ {α} → Set α → {ℓ : Level} → Set (α ⊔ suc ℓ)
Subset A {ℓ} = A → Set ℓ
我有一套
data Q : Set where
a : Q
b : Q
是否可以证明 q 的所有子集都是可判定的,为什么?
Qs? : (qs : Subset Q {zero}) → Decidable qs
Decidable 定义在这里:
-- Membership
infix 10 _∈_
_∈_ : ∀ {α ℓ}{A : Set α} → A → Subset A → Set ℓ
a ∈ p = p a
-- Decidable
Decidable : ∀ {α ℓ}{A : Set α} → Subset A {ℓ} → Set (α ⊔ ℓ)
Decidable as = ∀ a → Dec (a ∈ as)
不适用于子集的定义,因为可判定性需要检查 "p a" 是否有人居住,即排除中间。
可判定子集恰好映射到 Bool:
Subset : ∀ {α} (A : Set α) -> Set
Subset A = A → Bool
_∈_ : ∀ {α}{A : Set α} → A → Subset A → Set
a ∈ p = T (p a)
但是如果你想在成员证明的形状上有更多的灵活性,你可以使用你的子集定义并携带它是可判定的证明。
假设我在 Agda 中定义了这个子集
Subset : ∀ {α} → Set α → {ℓ : Level} → Set (α ⊔ suc ℓ)
Subset A {ℓ} = A → Set ℓ
我有一套
data Q : Set where
a : Q
b : Q
是否可以证明 q 的所有子集都是可判定的,为什么?
Qs? : (qs : Subset Q {zero}) → Decidable qs
Decidable 定义在这里:
-- Membership
infix 10 _∈_
_∈_ : ∀ {α ℓ}{A : Set α} → A → Subset A → Set ℓ
a ∈ p = p a
-- Decidable
Decidable : ∀ {α ℓ}{A : Set α} → Subset A {ℓ} → Set (α ⊔ ℓ)
Decidable as = ∀ a → Dec (a ∈ as)
不适用于子集的定义,因为可判定性需要检查 "p a" 是否有人居住,即排除中间。
可判定子集恰好映射到 Bool:
Subset : ∀ {α} (A : Set α) -> Set
Subset A = A → Bool
_∈_ : ∀ {α}{A : Set α} → A → Subset A → Set
a ∈ p = T (p a)
但是如果你想在成员证明的形状上有更多的灵活性,你可以使用你的子集定义并携带它是可判定的证明。