totality相关内容

根据产品类型定义递归函数

我正在尝试将每个整数形式化为自然数对的等价类,其中第一个成分是正数部分,第二个成分是负数部分. 定义整数:类型:= prod nat nat. 我想定义一个归一化函数,使正负尽可能多地抵消. 固定点归一化(i:整数):整数:=让(a,b):= i in搭配|0 =>(0,b)|S a'=>匹配b与|0 =>(S a',0)|S b'=>归一化(a',b')结尾结尾. 但是Coq说 ..
发布时间:2021-04-24 20:07:18 其他开发

在Coq中建立良好的递归

我试图在Coq中编写一个用于计算自然除法的函数,但由于它不是结构性递归,因此在定义它时遇到了一些麻烦。 我的代码是: 归纳N:设置:= | O:N | S:N-> N. 归纳布尔:设置:= |是的:布尔 |错误:布尔。 固定点总和(m:N)(n:N):N:= 将m与 匹配| O => n | S x => S(sum x n) 结束。 表示法“ m ..
发布时间:2020-10-09 06:33:02 其他开发

Coq无法在Z上计算有据可依的函数,但可以在nat上运行

我正在(为我自己)写一篇关于如何在Coq中进行充分依据的递归的解释。 (请参见Coq'Art书,第15.2章)。首先,我基于 nat 编写了一个示例函数,该函数运行良好,但随后又对 Z 进行了处理,然后当我使用 Compute 对其进行评估时,并不会完全降低到 Z 值。为什么? 这是我的示例(我将文本放在注释中,以便可以将整个内容复制粘贴到您的编辑器中): (* *有根据的递归检验*) ..
发布时间:2020-10-09 06:22:18 其他开发

Coq中的程序定点和功能之间有什么区别?

它们似乎具有相似的目的。到目前为止,我注意到的一个区别是,虽然 Program Fixpoint 将接受类似 {measure(length l1 + length l2)} / code>,函数似乎拒绝了,只会允许 {卷长l1} 。 严格来说,程序定位点比功能强大,或者 解决方案 这可能不是一个完整的列表,但这是我到目前为止发现的: 正如您已经提到的, Program Fix ..
发布时间:2020-10-09 06:22:08 其他开发

程序定点的Coq简化

是否有针对 Program Fixpoint s的战术 simpl ? 特别是,如何证明以下琐碎的陈述? 程序定点bla(n:nat){measure n}:= 将n与 匹配| 0 => 0 | S n’=> S(bla n’) 结尾。 引理显而易见:forall n,bla n = n。 归纳n。自反性。 (*我被困在这里。对于一个普通的固定点,例如,我可以使用 s ..
发布时间:2020-10-09 06:14:50 其他开发

在Coq中定义Ackermann时出错

我正在尝试在Coq中定义Ackermann-Peters函数,但收到一条我不理解的错误消息。如您所见,我将Ackermann的参数 a,b 打包为一对 ab ;我提供了一个排序,为参数定义了排序功能。然后,我使用 Function 表单定义Ackermann本身,并为其提供 ab 参数的排序功能。 需要导入Recdef。 定义ack_ordering(ab1 ab2:nat * nat): ..
发布时间:2020-10-09 06:13:46 其他开发

无法确定终止

确定一个集合是否是另一个集合的子集的功能: Fixpoint subset (s1:bag) (s2:bag) : bool := match s1 with | nil => true | h :: t => match (beq_nat (count h s1) (count h s2)) with | true => subset (remove_all h t) ..
发布时间:2020-07-10 23:21:38 其他开发

教coq检查终止

Coq与许多其他参数不同,它接受一个可选的显式参数,该参数可用于指示固定点定义的递减结构. 根据Gallina规范1.3.4, Fixpoint ident params {struct ident0 } : type0 := term0 定义语法.但是从中我们知道它必须是一个标识符,而不是一般的度量. 但是,总的来说,存在递归函数,终止不是很明显,或者实际上是终止,但是对于 ..
发布时间:2020-07-10 23:20:27 其他开发