【发布时间】:2020-08-27 09:28:37
【问题描述】:
我是 Agda 的新手,我对依赖类型编程和一般证明助手也不熟悉。我决定从构建简单的直觉逻辑证明开始,使用我在Programming Language Foundations in Agda 中找到的定义,我取得了一些成功。但是,当我尝试写以下证明时,我感到困惑:
∨-identity-indirect : {A B : Set} → (¬ A) ∧ (A ∨ B) → B
在纸上证明这一点相当简单:扩展¬ A,我们有A → ⊥。所以这个语句就变成了等价于(⊥ ∨ B) → B,这显然是对的。
我能够成功证明后半部分,即(⊥ ∨ B) → B:
∨-identity : {A : Set} → (⊥ ∨ A) → A
∨-identity (∨-left ())
∨-identity (∨-right A) = A
然后,我可以写了:
∨-identity-indirect ⟨ ¬A , A∨B ⟩ = ∨-identity ?
建议我需要通过¬A 和A ∨ B 生成⊥ ∨ B。我想以某种方式将A ∨ B 中的A 替换为¬A A,但我认为没有办法这样做。
当尝试将∨-identity 案例分析模式应用于∨-identity-indirect 时,我收到一条错误消息,A 应该为空,但这对我来说并不明显 - 我认为我需要以某种方式使其明显通过使用¬A 发送给Agda。
我是在正确的轨道上,还是我完全错了?我应该如何编写这个∨-identity-indirect 函数?
【问题讨论】:
标签: functional-programming agda dependent-type