回想一下Coq库中一个有充分根据的关系的定义:
Inductive Acc (A : Set) (R : A -> A -> Prop) (x : A) : Prop :=
Acc_intro : (forall y : A, R y x -> Acc A R y) -> Acc A R x.
Definition well_founded (A : Set) (R : A -> A -> Prop) :=
forall x : A, Acc A R x.
换句话说,如果元素y
的所有前身x
都可以访问,那么x
也可以访问。该Coq定义接受所有常见的数学依据,例如自然数上的严格顺序<
。
但是,在Coq的意义上,我们如何证明对有符号整数的严格排序没有充分根据?作为否定的建设性证明,我们将从矛盾的假设开始,即有符号整数的顺序是有充分根据的。这意味着所有带符号的整数都是可访问的。矛盾在哪里? Acc_intro
对此感到满意。
但是,如果我们公认为有符号整数的顺序是有充分根据的,我们将能够在它们上递归定义一个函数。该函数的计算将是一个无限循环,这似乎破坏了Coq逻辑的一致性。
我在某个地方犯了错误吗?
答案 0 :(得分:3)
如果<
基于整数,则以下函数将终止:
f : Z -> False
f x = f (x - 1)
因此,f 0
将产生False
的证明。我们可以在Coq中将这种说法形式化:
Require Import Coq.ZArith.ZArith.
Lemma Z_lt_not_well_founded : ~ well_founded Z.lt.
Proof.
intros Hwf.
exact (Fix Hwf (fun _ => False) (fun x IH => IH (Z.pred x) (Z.lt_pred_l x)) 0%Z).
Qed.