Types 如何构造Agda中的可能非空集

Types 如何构造Agda中的可能非空集,types,agda,Types,Agda,我知道(A\/~A)在一般情况下是不可证明的。在(a\/~a)不可证明的情况下,如何构造集合a的例子,这是可能的吗?如果可能的话,没有量词也可能吗 我知道(A/~A)在一般情况下是不可证明的。怎么走 关于构造集合a的示例,其中(a/~a)不是 可证明 您已经给出了一个示例:A\/~A本身 open import Level open import Data.Empty open import Relation.Nullary open import Data.Sum lem-for : ∀ {

我知道(A\/~A)在一般情况下是不可证明的。在(a\/~a)不可证明的情况下,如何构造集合a的例子,这是可能的吗?如果可能的话,没有量词也可能吗

我知道(A/~A)在一般情况下是不可证明的。怎么走 关于构造集合a的示例,其中(a/~a)不是 可证明

您已经给出了一个示例:
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
表示“对于所有
A
A
为真或假”
lem-lem
说“排除中间法则要么正确,要么错误”。但是我们知道,建设性的
lem
是不正确的,因为Agda不是反经典的,
lem
也不是错误的

其他经典逻辑公理(摘自该书)包括

所有这些+
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

“没有量词”是什么意思?顺便说一句,所有独立于Agda的
A
命题都是不可证明的。经典的逻辑公理是这样的,或者公理K(如果我们使用
--without-K
语言选项)、函数扩展性、Agda的Gödel语句等等……您能解释fin 2示例吗?我读了《道具平等法》,但还是不太明白。如果我用同样的方式定义两个bool bool1和bool2,bool1===bool2也不可证明吗?@davik,是的,
bool1≡ bool2
无法验证。你可以在或中证明这一点,但不能在Agda中证明。我们如何证明类似的东西⊤ ≢ ⊥? 或者这也是不可能的?@davik,不平等通常是可以证明的。看,还有。
open import Coinduction
open import Data.Nat.Base
open import Data.Stream

zeros : Stream ℕ
zeros = 0 ∷ ♯ zeros

eq₂ : Set
eq₂ = zeros ≡ 0 ∷ ♯ zeros