我正在通过Terry Tao的真实分析教科书,它从自然数中构建了基础数学。通过尽可能多的证明形式,我希望熟悉Idris和依赖类型。在伊德里斯与改写策略苦苦挣扎
我已经定义了以下数据类型:
data GE: Nat -> Nat -> Type where
Ge : (n: Nat) -> (m: Nat) -> GE n (n + m)
代表主张一个自然数大于或等于另一个。
我目前正在努力证明这种关系的反思,即构建以证明签名
geRefl : GE n n
我第一次尝试是简单地尝试geRefl {n} = Ge n Z
,但是这类型Ge n (add n Z)
。为了得到这个与所需的签名相结合,我们显然必须进行某些改写,大概涉及到引理
plusZeroRightNeutral : (left : Nat) -> left + fromInteger 0 = left
我最好的尝试是:
geRefl : GE n n
geRefl {n} = x
where x : GE n (n + Z)
x = rewrite plusZeroRightNeutral n in Ge n Z
但这并不进行类型检查。
您能否给出这个定理的正确证明,并解释其背后的原因?
它会更容易使它'GE:(m:Nat) - >(n : Nat) - > GE n(m + n)'代替。然后'geRefl = GE Z'。 – RhubarbAndC
@RhubarbAndC我考虑过这个,但它让其他事情变得更加困难。 – user1502040