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

标记

我正在尝试将每个整数形式化为自然数对的等价类,其中第一个成分是正数部分,第二个成分是负数部分。

Definition integer : Type := prod nat nat.

我想定义一个规范化函数,在该函数中,正数和负数会尽可能抵消。

Fixpoint normalize (i : integer) : integer :=
let (a, b) := i in
match a with
| 0 => (0, b)
| S a' => match b with
        | 0 => (S a', 0)
        | S b' => normalize (a', b')
        end
end.

但是Coq说:

错误:规范化的递归定义格式错误。在环境中normalize:integer-> integer i:integer a:nat b:nat a':nat b':nat递归调用归一化具有等于“(a',b')”的主参数,而不是“ i”的子项”。

我认为这可能与有充分根据的递归有关?

无伴奏合唱

递归调用必须在原始参数的“子项”上进行。归纳类型的术语的子术语本质上是与用于创建原始术语的类型相同的术语。例如,自然数的子项S a'a'

不幸的是,对于您的定义(按书面规定),一对i: prod nat nat在这种意义上没有任何子术语。这是因为prod不是递归类型。它的构造pair: A -> B -> prod A B函数不接受任何类型prod A B的参数。

为了解决这个问题,我建议先在两个单独的自然数上定义您的函数。

Fixpoint normalize_helper (a b : nat) : integer :=
match a with
| 0 => (0, b)
| S a' => match b with
        | 0 => (S a', 0)
        | S b' => normalize a' b'
        end
end.

然后normalize可以很容易地用定义normalize_helper

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

产品类型的相互递归函数

根据产品类型向产品价格添加自定义文本标签

导入QArith后定义产品类型

从自定义产品类型创建产品

在WooCommerce中根据产品类型隐藏付款方式

根据产品类型,WooCommerce的“添加到购物车”按钮旁边的“自定义”按钮

递归函数类型定义

根据 WooCommerce 结帐中的产品类型显示产品变体描述或产品简短描述

Woocommerce产品类型简码

每个产品类型的 PDP

在WooCommerce 4中以编程方式从自定义产品类型添加新产品

如何仅为自定义产品类型定义字段-Woo Commerce Hook

根据WooCommerce产品类型更改添加到购物车按钮和文本

如何配置构建类型与产品类型?

根据产品类别自定义购物车总计和结帐总计文本

根据Woocommerce中的产品类别添加自定义结帐字段

根据Woocommerce中的运输区域和产品类别显示自定义消息

根据WooCommerce结帐页面上的产品类别应用自定义数量参数

如何根据类型定义函数?

WooCommerce自定义产品类型-多个添加到购物车部分的问题

如何在WooCommerce中为自定义产品类型启用价格和库存

在WooCommerce自定义产品类型上显示库存状态

如何检查WooCommerce中的自定义产品类型选项?

定义具有最少固定点,总和和产品类型的列表

如何在 Woocommerce 的自定义产品类型中添加变体选项卡?

使用ACF编号字段作为WooCommerce自定义产品类型的价格

在WooCommerce中更改自定义产品类型的订单运送地址

确定WooCommerce中的产品类型-致命错误:在null上调用成员函数is_type()

少数 Windows 10 版本的 GetProductInfo 函数 API 中缺少产品类型