这个问题最简单的例子(但不是我能展示的唯一例子)是:假设我得到一个更高阶的函数f : (a -> b) -> c。我想证明f = (\g => f (\x => g x))。在我自己的推理中,它应该非常简单:只需应用两次eta等价(一次在内部,然后在外部)。
如果我想证明f = (\x => f x),一个简单的Refl就足够了:这让我想到"Idris知道eta等价“。在这一点上,我尝试使用rewrite,但找不到在(\g =&g
刚开始在Idris (如果它重要的话是Idris2),并偶然发现这个问题。我正在尝试实现一个函数,该函数返回所有Fibonacci数的向量,直到给定的n。我知道我需要向Idris证明fibs k的长度至少为2,但我无法理解如何做到这一点,以及为什么在现有定义中不明显。对我来说,看起来fibs (S k)中的fibs (S k)肯定是>= 1,因为否则fibs Z或fibs
我正在学习Idris,特别是我想学习如何证明陈述。当然,所有练习中最愚蠢的是自然数之和的结合性,我对理论和我将使用的证明风格(第一次论证和重写归纳)很满意,但由于教程中使用的Idris版本和我的版本(1.3.2)之间可能存在一些不兼容性,我陷入了困境。hole_2
intros
rewrite plusAssoc' k c r