Functional programming 如何用“replace”完成交换性的证明?
在文档中,提到了如何使用Functional programming 如何用“replace”完成交换性的证明?,functional-programming,proof,agda,idris,Functional Programming,Proof,Agda,Idris,在文档中,提到了如何使用replace来完成证明,但它最终使用了rewrite,这似乎是为您编写replace的语法糖。我对理解如何明确地使用它感兴趣 如果我理解正确,它可以用来重写sk=S(加k0)为S(加k0)=S(加k0),给出k=+k0的证明,然后可以通过自反性证明。但是如果我们把它作为replace{P=\x=>sx=S(加k0)}{x=k}{y=plusk0}rec,我们现在需要一个sk=S(加k0)的证明,这就是我们想要证明的。简而言之,我不确定确切的P应该是什么。啊,回想起来,这
replace
来完成证明,但它最终使用了rewrite
,这似乎是为您编写replace
的语法糖。我对理解如何明确地使用它感兴趣
如果我理解正确,它可以用来重写
sk=S(加k0)
为S(加k0)=S(加k0)
,给出k=+k0
的证明,然后可以通过自反性证明。但是如果我们把它作为replace{P=\x=>sx=S(加k0)}{x=k}{y=plusk0}rec
,我们现在需要一个sk=S(加k0)
的证明,这就是我们想要证明的。简而言之,我不确定确切的P
应该是什么。啊,回想起来,这是相当明显的。如果我们让:
P = \x => S x = S (plus k 0)
然后,我们可以证明它的x=(加上k0)
(通过自反性)。现在,如果我们让y=k
,那么通过使用replace
,我们得到了sk=S(加k0)
的证明,这就是我们需要的。或者,换句话说:
plusCommZ : (m : Nat) -> m = plus m 0
plusCommZ Z = Refl
plusCommZ (S k) = replace
{P = \x => S x = S (plus k 0)}
{x = plus k 0}
{y = k}
(sym (plusCommZ k))
Refl
完成证明。我们可以用
P=\x=>sx=sk
用另一种方法来做,现在,替换如何被证明是一个谜(是的,我已经看到了定义)。sym
在这里不是真的必要:replace{P=\x=>sk=sx}(pluscommzk)Refl
(这本质上是cong(pluscommzk)
)