【发布时间】:2023-03-08 20:55:01
【问题描述】:
为什么在 Agda 中模式匹配有时是“必不可少的”?
我从Programming Language Foundations in Agda 中删除了这个。
当不进行模式匹配时,Agda 给出的不允许refl 入坑:
η-× : ∀ {A B : Set} (w : A × B) → ⟨ proj₁ w , proj₂ w ⟩ ≡ w
η-× x = ?
它报告了这个目标和假设:
Goal: ⟨ proj₁ x , proj₂ x ⟩ ≡ x
————————————————————————————————————————————————————————————
x : A × B
但如果我告诉 Agda 进行大小写拆分,Agda 可以弄清楚发生了什么 (ctrl-c ctrl-c x Ret)
η-× : ∀ {A B : Set} (w : A × B) → ⟨ proj₁ w , proj₂ w ⟩ ≡ w
η-× ⟨ x , x₁ ⟩ = ?
Goal: ⟨ x , x₁ ⟩ ≡ ⟨ x , x₁ ⟩
那么 Agda 让我用refl 填补这个空缺。
发生了什么事?模式匹配如何为 Agda 提供更多信息?
PLFA 文本说:
左边的模式匹配是必不可少的,因为 用
⟨ x , y ⟩替换w允许两边 命题等式简化为同一项。
但这并没有说明为什么模式匹配有助于简化,或者我们什么时候可以看到这种效果。
【问题讨论】:
标签: pattern-matching agda theorem-proving