Agda 中顶部函数和空函数的 eta 之间差异的直觉

Intuition for difference between eta for function from top and empty functions in Agda

在 Agda 中,似乎无法显示 ∀ {A : Set} (f : ⊥ → A) → f ≡ λ ()

然而,看似相似的术语∀ {A : Set} (f : ⊤ → A) → f ≡ λ _ → f tt可以被refl证明。它可以在以后用于证明 :

的一种外延形式

ext⊤ : ∀ {A : Set} (f g : ⊤ → A) (H : ∀ x → f x ≡ g x) → f ≡ g

根据,解释可能是考虑了不同的类型理论模型。是否有可能对为什么接受一个而不接受另一个有任何直觉? f ≡ λ () 不应该是某种形式的 eta 定律吗?

类型具有 eta 规则,该规则表明具有该类型的任何术语在定义上都是相等的。因此,f ≡ (λ x → f x) ≡ (λ x → f tt).

在 Agda 中没有 eta 规则。如果f : ⊥ → A,那么我们只知道f ≡ λ x → f xλ () 本质上是 ⊥-elim 的语法糖,而 f 在定义上不等于 ⊥-elim.

请注意,第一个陈述试图证明 ⊥ → A 的唯一性。通常直到同构才成立。

完整的对应关系在 ∀ {A : Set} (f : ⊤ → A) → f ≡ λ _ → f tt∀ {A : Set} (f : ⊥ → A) → f ≡ λ _ → f () 之间 - 的表达式构造值 tt,因此您应该为 .

Agda 无法构造 的值,因此 () 不是有效的构造函数,它只是您想要的占位符。

虽然它不是真正的模式匹配,但将 () 用作空类型的模式匹配可能并无害处 - 它只允许出现在模式匹配中职位。

这是为了表明相似性是表面的,因此应该修正您对表达式的直觉。

Shouldn't f ≡ λ () be some form of eta law?

不清楚您将从中获得什么。很多事情只能证明同构。因此,例如,证明 ⊥ → A 的唯一性可能对应于证明 A → ⊤ 的唯一性(而不是 fλ _ → f tt 的等价性)。这两个都是可行的。