需要有关证明一些直觉逻辑陈述的提示

Posted

技术标签:

【中文标题】需要有关证明一些直觉逻辑陈述的提示【英文标题】:Need hints about proving some intuitionistic logic statements 【发布时间】: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 ?

建议我需要通过¬AA ∨ B 生成⊥ ∨ B。我想以某种方式将A ∨ B 中的A 替换为¬A A,但我认为没有办法这样做。 当尝试将∨-identity 案例分析模式应用于∨-identity-indirect 时,我收到一条错误消息,A 应该为空,但这对我来说并不明显 - 我认为我需要以某种方式使其明显通过使用¬A 发送给Agda。

我是在正确的轨道上,还是我完全错了?我应该如何编写这个∨-identity-indirect 函数?

【问题讨论】:

【参考方案1】:

建议我需要通过¬AA ∨ B 生成⊥ ∨ B。我想以某种方式将A ∨ B 中的A 替换为¬A A,但我认为没有办法这样做。 当尝试将∨-identity 案例分析模式应用于∨-identity-indirect 时,我收到一条错误消息,A 应该为空,但这对我来说并不明显 - 我认为我需要以某种方式使其明显通过使用 ¬A 发送给 Agda。

您可能正在尝试使用()¬ A 类型的值进行模式匹配,但这是行不通的,因为¬ A 扩展为A -> ⊥,即它是一个只会返回您的函数 在你给它一些 A 之后。这样做的方法如下:

replace-A : A B : Set → (¬ A) → (A ∨ B) → ⊥ ∨ B
replace-A f (v-left  x) = v-left (f x)
replace-A _ (v-right y) = v-right y

有了这个,∨-identity-indirect 就很简单了:

∨-identity-indirect : A B : Set → (¬ A) ∧ (A ∨ B) → B
∨-identity-indirect ⟨ ¬A , A∨B ⟩ = ∨-identity (replace-A ¬A A∨B)

【讨论】:

以上是关于需要有关证明一些直觉逻辑陈述的提示的主要内容,如果未能解决你的问题,请参考以下文章

证明或反驳量词(命题逻辑)

引入先前证明的定理作为假设

深入浅出CAP定理

深入浅出CAP定理

深入浅出CAP定理

重温离散数学系列①之什么是证明