我试图将每个整数形式化为自然数对的等价类,其中第一个分量是正数部分,第二个分量是负数部分。
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 对 normalize 的递归调用的主要参数等于“(a', b')”而不是“i”的子项”。
我认为这可能与有根据的递归有关?