期限未按预期减少

时间:2013-11-08 13:19:29

标签: agda

以下引理应该是微不足道的:将加号和自然符号组合起来与使用自然的加号构造函数相同。

module sign where
open import Data.Nat
open import Data.Integer using (_◃_; +_)
open import Data.Sign renaming (+ to s+)
open import Relation.Binary.PropositionalEquality

lemma : ∀ y  → s+ ◃ y ≡ + y
lemma y = refl

但是lemma未能用以下方法进行检查:

s+ ◃ y != + y of type Data.Integer.ℤ
when checking that the expression refl has type s+ ◃ y ≡ + y

我正在使用lib-0.7,根据this link定义为:

_◃_ : Sign → ℕ → ℤ
_      ◃ ℕ.zero  = + ℕ.zero
Sign.+ ◃ n       = + n
Sign.- ◃ ℕ.suc n = -[1+ n ]

所以我希望s+ ◃ y遵循第二个模式规则,评估为+ y并进行类型检查才能成功。

什么是错?

1 个答案:

答案 0 :(得分:3)

问题是第一个等式也可以用于s+ ◃ y。只有在您知道y不为零之后,才会应用第二个等式。

解决方案很简单:

lemma : ∀ y  → s+ ◃ y ≡ + y
lemma zero    = refl
lemma (suc _) = refl