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
的等价性)。这两个都是可行的。
在 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
的等价性)。这两个都是可行的。