Functional programming 需要关于证明直觉逻辑陈述的提示吗
我是Agda的新手,一般来说,我是独立类型编程和证明助理的新手。我决定开始用我在中找到的定义,构造简单的直觉逻辑证明,我取得了一些成功。然而,当我试图写出以下证据时,我感到困惑:Functional programming 需要关于证明直觉逻辑陈述的提示吗,functional-programming,agda,dependent-type,Functional Programming,Agda,Dependent Type,我是Agda的新手,一般来说,我是独立类型编程和证明助理的新手。我决定开始用我在中找到的定义,构造简单的直觉逻辑证明,我取得了一些成功。然而,当我试图写出以下证据时,我感到困惑: ∨-identity-indirect : {A B : Set} → (¬ A) ∧ (A ∨ B) → B 在纸上证明这一点相当简单:扩展-A,我们有A→ ⊥。因此,该语句相当于(⊥ ∨ (B)→ B,这显然是正确的 我成功地证明了后一部分,即,(⊥ ∨ (B)→ B: ∨-identity : {A : Set
∨-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 ?
建议我需要生成⊥ ∨ B
通过拥有-A
和A∨ B
。我想以某种方式替换A中的A
∨ B
和A
,但我认为没有办法做到这一点。
尝试应用<代码>∨-身份案例分析模式至∨-标识间接
,我收到一条错误消息,A应该是空的,但这对我来说并不明显-我想我需要通过使用、A
,以某种方式让Agda明白这一点
我是在正确的轨道上,还是完全错了?我应该如何着手编写此∨-标识间接
功能
建议我需要生成⊥ ∨ B
通过拥有-A
和A∨ B
。我想以某种方式替换A中的A
∨ B
和A,但我认为没有办法做到这一点。
尝试应用<代码>∨-身份案例分析模式至∨-标识间接
,我收到一条错误消息,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 : {A B : Set} → (¬ A) ∧ (A ∨ B) → B
∨-identity-indirect ⟨ ¬A , A∨B ⟩ = ∨-identity (replace-A ¬A A∨B)