1

我不知道为什么,但是在 Coq 中,当试图证明程序规范时,在试图消除 OR 假设时会出错:

Error: Cannot find the elimination combinator or_rec, the elimination of the
inductive definition Logic.or on sort Set is probably not allowed.

这是我要证明的定理:

Definition nat_div_mod : forall a b:nat, not(b=0) -> {qr:nat*nat | P a b qr}.

这是发生错误时的目标和上下文:

a : nat
b : nat
H : b <> 0
IHa : {qr : nat * nat | P a b qr}
x : nat * nat
H2 : P a b x
H0 : snd x < b - 1 \/ snd x >= b - 1
______________________________________
{qr : nat * nat | P (S a) b qr}

在这个定理之前,我有这个定义和这些导入:

Definition P (a b:nat) (qr:nat*nat) : Prop := ... (* specification of div/mod *)
Require Import Omega.
Require Import Mult. 

当我尝试使用这种策略时,我得到了之前的错误:

elim H0.

我真的不知道可能是什么原因造成的。

4

1 回答 1

2

你不能做案例分析,H0因为{qr : nat * nat | P (S a) b qr}is a Setor Type。Onlyor_ind被定义为or,所以它需要是 a Prop。如果您使用sum,您将拥有sum_ind,sum_recsum_rect.

(snd x < b - 1) + (snd x >= b - 1)

Prop是这样设计的,因此它与某些公理一致。

于 2013-11-30T14:00:25.877 回答