Types 用单个值定义类型

Types 用单个值定义类型,types,agda,Types,Agda,在这里:在幻灯片23中,他们定义了一个非常有趣的类型,iscontr a。我认为这可以理解为: record iscontr {A : Set} : Set where constructor _exists_unique field a : A singleton : (x : A) -> a == x 我看不出他们提出的微妙观点。他们声称,一开始,这似乎只是证明a居住着多个但(路径)相连的值——这正是我在这里看到的;但事实上,他们声称,这是一个证明,有一个单一

在这里:在幻灯片23中,他们定义了一个非常有趣的类型,
iscontr a
。我认为这可以理解为:

record iscontr {A : Set} : Set where
  constructor _exists_unique
  field
    a : A
    singleton : (x : A) -> a == x
我看不出他们提出的微妙观点。他们声称,一开始,这似乎只是证明
a
居住着多个但(路径)相连的值——这正是我在这里看到的;但事实上,他们声称,这是一个证明,有一个单一的居民在类型
a

考虑到
iscontr
甚至在
J
被引入之前就被引入(并且实际上被用来给出归纳公理的另一个定义,
J
),这一事实必须来自归纳以外的事物

好的,首先我认为,居住在这种类型意味着产生一个函数,它可以映射任何类型的
a
-包括那些非规范的值(例如由公理引入的值)(记住,我们不能在这里进行通常的模式匹配,因为我们还没有归纳公理)。这意味着即使使用公理,也无法向
A
添加新值。这一事实向我清楚地表明,我们几乎肯定会通过一个公理(这是他们在下面的幻灯片上对类型(x,α)所做的)来介绍
iscontr
类型的居民。但我不明白这如何排除存在多个
A
类型的值,这些值在
singleton
函数中枚举,为每个值生成一个
A==x


(此外,我无法理解拓扑、群体等的示例;因此,如果能根据幻灯片23之前介绍的公理,通过简单的推理看到解释,那就太好了)

也许让您相信
是contr A
的最好方法是证明任何可收缩类型和单元类型之间的等价性,正如前面的评论中所提到的那样。为此,我需要几个定义:

我们已经有了收缩性,但让我用这个袖珍版本:

is-contr : ∀ {a} (A : Set a) → Set _
is-contr A = Σ A λ a → ∀ x → a ≡ x
下一步:等价性。我将使用贯穿HoTT书籍的
is equiv
版本:

-- Homotopies.
infix  1 _~_

_~_ : ∀ {a b} {A : Set a} {B : A → Set b}
  (f g : ∀ a → B a) → Set _
f ~ g = ∀ x → f x ≡ g x

-- Equivalence.
is-equiv : ∀ {a b} {A : Set a} {B : Set b}
  (f : A → B) → Set _
is-equiv {A = A} {B = B} f
  = (Σ (B → A) λ g → f ∘ g ~ id)
  × (Σ (B → A) λ h → h ∘ f ~ id)
最后:

_≃_ : ∀ {a b} (A : Set a) (B : Set b) → Set _
A ≃ B = Σ (A → B) is-equiv
因此,一个函数
f
是等价的,如果它同时有一个左逆和一个右逆

这应该提醒你,等价(同构)的通常定义是一对函数
f
g
,这样
f∘ g~id
g∘ f~id
,事实上,它在逻辑上等同于上面的定义(请参见此答案的注释以获取证据)

无论如何,我们现在可以制定最终声明:

contr-≃⊤ : ∀ {a} {A : Set a} → is-contr A → A ≃ ⊤
证据相当简单:

contr-≃⊤ : ∀ {a} {A : Set a} → is-contr A → A ≃ ⊤
contr-≃⊤ (a , p)
  = (λ _ → tt)
  , ((λ _ → a) , (λ _ → refl))
  , ((λ _ → a) , p)
因此,我们的左、右逆只是所选元素的一个常量函数(from
是contra

连接性,如HoTT book中所定义(我希望unicode字符能为您显示)

事实上,不能用来证明这种等价性。当您在
控件中展开
p
时,可以最好地看到这一点-≃⊤证明:

contr-≃⊤ (a , p)
  = (λ _ → tt)
  , ((λ _ → a) , (λ _ → refl))
  , ((λ _ → a) , (λ x → p x))
我们需要知道从
a
x
(即
px:a)的实际路径≡ x)来证明这一点。但是,
∥ A.≡ x∥
弱得多-它只告诉我们这样的路径存在,但没有告诉我们路径是什么样子



这也是为什么类型理论有选择定理(而不是公理)的原因。存在量化的构造性使得证明变得微不足道。然而,如果你抹去任何关于实际居民的信息,只留下这样一个事实,你就会得到通常的选择公理。如果您愿意,请查看HoTT手册中的第3.7章和第3.8章。

只是一个假设:也许他们为拓扑学家做了这个澄清?在拓扑学中,路径连通空间不一定是可压缩的,但在类型理论中是这样的。问题是,当
iscontra A
成立时,
A
是等效的。所以是的,从这个意义上说,
A
只有一个元素。他们提出的观点确实是关于收缩性与连通性。如果您愿意,请看一下HoTT手册中的3.11.2。@Vitus谢谢,那一章确实澄清了很多。谢谢。是
∥_∥从标准库导入的Agda类型?(或者只是类似于他们在HoTT中使用的符号)我试图与HoTT的书保持一致,但没有,Agda没有这种类型。您可以查看它在存储库中的外观,但其定义不是很有启发性。顺便说一句,下面是证据:
contr-≃⊤ (a , p)
  = (λ _ → tt)
  , ((λ _ → a) , (λ _ → refl))
  , ((λ _ → a) , (λ x → p x))