在研究有充分根据的同时,我想看看不同的设计如何表现。例如,对于以下类型:
data _<_ (x : Nat) : Nat -> Set where
<-b : x < (suc x)
<-s : (y : Nat) -> x < y -> x < (suc y)
良好的基础很容易证明。但是,如果对相似类型的定义不同:
data _<_ : Nat -> Nat -> Set where
z-< : (m : Nat) -> zero < (suc m)
s<s : (m n : Nat) -> m < n -> (suc m) < (suc n)
很明显,在两种情况下,下降链都不是无限的,但在第二种情况下,很难证明有充分的根据:要证明给定的{{1} }。
是否有一些原则可以帮助选择第一个设计(而不是第二个设计)?
证明第二个定义的充分依据并不是很难,它只需要额外的定理即可。在这里,依靠(y -> y < x -> acc y)
对于x
的可判定性,我们可以为情况_==_
构造新的Nat
,并可以重写目标类型以使用解决已知问题的方法减小尺寸作为_<_
的解决方案。
(suc y) != x