如何在 Agda 中构造一个可能非空的集合
How to construct a possibly nonempty Set in Agda
我知道 (A \/ ~A) 一般无法证明。如何构建一个集合 A 的示例,其中 (A \/ ~A) 不可证明,这可能吗?如果可能的话,没有量词是否可能?
I know that (A / ~A) is not provable in general. How does one go
about constructing an example of a set A where (A / ~A) is not
provable,
你已经给出了一个例子:A \/ ~A
本身。
open import Level
open import Data.Empty
open import Relation.Nullary
open import Data.Sum
lem-for : ∀ {α} -> Set α -> Set α
lem-for A = A ⊎ ¬ A
lem : ∀ {α} -> Set (suc α)
lem = ∀ {A} -> lem-for A
lem-lem : ∀ {α} -> Set (suc α)
lem-lem = lem-for lem
lem
表示 "for all A
A
is either true or false"。 lem-lem
说 "the law of excluded middle is either true or false"。但是我们知道建设性的 lem
不是真的,因为 Agda 不是 anti-classical,lem
也不是假的。
其他经典逻辑公理(取自 Software Foundations 书)是
Definition peirce := ∀P Q: Prop,
((P→Q)→P)→P.
Definition classic := ∀P:Prop,
~~P → P.
Definition de_morgan_not_and_not := ∀P Q:Prop,
~(~P ∧ ¬Q) → P∨Q.
Definition implies_to_or := ∀P Q:Prop,
(P→Q) → (¬P∨Q).
这些+lem
是等价的
这是一个更有趣的例子:
open import Relation.Binary.PropositionalEquality
open import Data.Bool.Base
open import Data.Fin
eq : Set₁
eq = Fin 2 ≡ Bool
"Extensional" 谓词属于同一类。最简单的是函数外延性,但我们也可以说
open import Coinduction
open import Data.Nat.Base
open import Data.Stream
zeros : Stream ℕ
zeros = 0 ∷ ♯ zeros
eq₂ : Set
eq₂ = zeros ≡ 0 ∷ ♯ zeros
我知道 (A \/ ~A) 一般无法证明。如何构建一个集合 A 的示例,其中 (A \/ ~A) 不可证明,这可能吗?如果可能的话,没有量词是否可能?
I know that (A / ~A) is not provable in general. How does one go about constructing an example of a set A where (A / ~A) is not provable,
你已经给出了一个例子:A \/ ~A
本身。
open import Level
open import Data.Empty
open import Relation.Nullary
open import Data.Sum
lem-for : ∀ {α} -> Set α -> Set α
lem-for A = A ⊎ ¬ A
lem : ∀ {α} -> Set (suc α)
lem = ∀ {A} -> lem-for A
lem-lem : ∀ {α} -> Set (suc α)
lem-lem = lem-for lem
lem
表示 "for all A
A
is either true or false"。 lem-lem
说 "the law of excluded middle is either true or false"。但是我们知道建设性的 lem
不是真的,因为 Agda 不是 anti-classical,lem
也不是假的。
其他经典逻辑公理(取自 Software Foundations 书)是
Definition peirce := ∀P Q: Prop,
((P→Q)→P)→P.
Definition classic := ∀P:Prop,
~~P → P.
Definition de_morgan_not_and_not := ∀P Q:Prop,
~(~P ∧ ¬Q) → P∨Q.
Definition implies_to_or := ∀P Q:Prop,
(P→Q) → (¬P∨Q).
这些+lem
是等价的
这是一个更有趣的例子:
open import Relation.Binary.PropositionalEquality
open import Data.Bool.Base
open import Data.Fin
eq : Set₁
eq = Fin 2 ≡ Bool
"Extensional" 谓词属于同一类。最简单的是函数外延性,但我们也可以说
open import Coinduction
open import Data.Nat.Base
open import Data.Stream
zeros : Stream ℕ
zeros = 0 ∷ ♯ zeros
eq₂ : Set
eq₂ = zeros ≡ 0 ∷ ♯ zeros