我正在使用 Idris2 编译以下简单程序。 但是,编译器会吐出一个错误: 输入a的递归调用不是小于(FS a)吗? 为什么整体检查失败? 谢谢! ...
我正在使用 Idris2 编译以下简单程序。 但是,编译器会吐出一个错误: 输入a的递归调用不是小于(FS a)吗? 为什么整体检查失败? 谢谢! ...
我正在寻找 C 和 function 我调用返回一个int来表示 gt、eq 或 lt。 我想在任何不应该发生的 1、0 或 -1 cos 上崩溃。 我希望 Idris 将 0、1 和 -1 视为详尽匹配。 我试过了 但我明白了 ...
这里我指的公理是我们可以用 Coq Gallina 中的Axiom关键字定义的东西,而不是传递给 Coq 的命令行参数。 我知道一些公理使 Coq 不一致。 然而,AFAIK 他们并没有使 Coq Turing 完整。 以我的粗略理解,这是因为它们不提供任何额外的计算行为。 有没有一种可以使 C ...
考虑以下(非常简化的)示例,通过对其值的附加条件来约束数据类型: 有什么方法可以省略或总结impossible情况,而仍然让 Idris 将功能视为全部? 如果我确实留下了一个案例,我会得到类似的东西 我也不能只是有一个包罗万象的情况,因为编译器不知道_不能是 Car 所以第二行不进行类型检 ...
我试图将每个整数形式化为自然数对的等价类,其中第一个组件是正部分,第二个组件是负部分。 Definition integer : Type := prod nat nat. 我想定义一个归一化函数,其中正面和负面尽可能取消。 然而Coq说: 错误:normalize ...
假设我们正在编写一个lambda演算的实现,作为其中的一部分,我们希望能够选择一个新的非冲突名称: 伊德里斯总体检查认为pickName是不是总由于递归路径go ,这是理所当然的:的确,整体的证据不依赖于任何期限越来越语法小,而是在观察,如果bindings有k元素,那么它只需不超过k ...
作为通过有充分理由的关系理解递归的练习,我决定实现扩展的欧几里德算法。 扩展的欧几里德算法适用于整数,因此我需要一些有效的整数关系。 我试图在Zwf使用关系,但是事情没有用(我需要看更多的例子)。 我决定使用Z.abs_nat函数更容易将Z映射到nat ,然后只使用Nat.lt作为关系 ...
确定一个集合是否是另一个集合的子集的函数: 为了清楚 beq_nat确定两个自然数的相等性 count计算给定自然数在集合中出现的次数 remove_all从集合中移除给定自然数的每个实例 CoqIDE“无法猜出fix的递减参数。” 鉴于递归是在t的子 ...
与许多其他人不同,Coq接受可选的显式参数,该参数可用于指示固定点定义的递减结构。 来自Gallina规范,1.3.4, 定义语法。 但是从中我们已经知道它必须是一个标识符,而不是一般的衡量标准。 但是,一般来说,存在递归函数,终止不是很明显,或者实际上是,但终止检查器很难 ...
假设我们有: 我想说服Coq这将终止-我尝试通过将范围的大小测量为abs (to - from) 。 但是,这并不完全有效,因为一旦范围为空(即, from >= to ),它只会再次开始增大。 我也尝试过用以下方法进行测量: 使用我的习惯: 和演员: ...
只有当函数的arg是传递的arg的直接子项时,才允许递归,以便Coq可以看到它实际终止了吗? ...
考虑以下修复点: Coq拒绝以下定点,因为它无法猜测下降的定点(有时left列表松动其头部,有时是right列表)。 该答案表明,可以通过使用Program Fixpoint并指定{measure ((length left)+(length right))}来解决此问题。 ...
我正在尝试通过自然数计算奇偶校验与一半的下限: 我尝试使用parity的明显实现: 此类型检查并按预期工作。 但是,如果我尝试将parity标记为total ,Idris 就会开始抱怨: 我在parity看到的唯一with块是从parity (S (S n))递归调用到parity n ...
考虑以下玩具表示的无类型lambda演算: 类型检查print失败,并显示以下错误: 实现这一目标的最具可读性/符合人体工程学/效率的方法是什么? ...
使用Idris进行测试驱动开发的第9章介绍了以下数据类型和removeElem函数。 以下作品: 但是,几分钟后,以下调用仍在运行: 我想这为什么编译这么慢? ...
他们似乎服务于类似的目的。 到目前为止我注意到的一个区别是,虽然Program Fixpoint将接受像{measure (length l1 + length l2) }这样的复合度量,但Function似乎拒绝了这个并且只允许{measure length l1} 。 Program ...
我正在写(对我自己)解释如何在Coq中做有根据的递归。 (参见Coq'Art书,第15.2章)。 首先我做了一个基于nat的示例函数,并且工作正常,但后来我再次为Z ,当我使用Compute来评估它时,它不会一直减少到Z值。 为什么? 这是我的示例(我将文本放在注释中,以便可以将整个 ...
我对术语有以下定义: Inductive term : Type := | Var : variable -> term | Func : function_symbol -> list term -> term. 和函数pos_list获取术语列表并返回每个子 ...
我有以下代码: 我收到有关最后一行的错误消息: 该函数应该总是给出一个结果,因为最终fromInteger的参数将变得足够小以选择第一个案例。 但伊德里斯似乎并不理解这一点。 这个函数有什么问题,我该如何解决这个错误? ...
http://docs.idris-lang.org/en/v0.99/tutorial/theorems.html#totality-checking-issues指出: 其次,到目前为止,目前的实施工作进展有限,因此可能仍然存在一种情况,即它认为功能是总的而不是。 不要依赖它来证 ...