【问题标题】:why this code is not working in agda?为什么这段代码在 agda 中不起作用?
【发布时间】:2015-12-29 14:30:58
【问题描述】:

我试图在乘法运算中证明自然数的交换性。

--proving comm over *
*comm : ∀ a b → (a * b) ≡ (b * a)
*comm zero b = sym (rightId* b)
*comm (suc a) b = {!!}

当我检查目标时,我发现它是b + a * b ≡ b * suc a。所以我证明了这一点。

lemma*-swap : ∀ a b → a + a * b ≡ a * suc b

现在当我尝试时:

*comm : ∀ a b → (a * b) ≡ (b * a)
*comm zero b = sym (rightId* b)
*comm (suc a) b = lemma*-swap b a

这应该可以满足目标,但为什么这不起作用?请建议我哪里错了。

【问题讨论】:

    标签: agda


    【解决方案1】:

    b + a * b(目标中的表达式)和a + a * blemma*-swap 中的表达式)是不同的,因此应用lemma*-swap 满足目标。

    你需要rewrite归纳假设*comm a ba * b变成目标中的b * a,这样lemma*-swap b a就可以用来排放目标了。

    【讨论】:

      猜你喜欢
      • 2010-09-18
      相关资源
      最近更新 更多