Coq - 消除OR时出错

时间:2013-11-30 01:21:58

标签: coq theorem-proving

我不知道为什么,但是在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.

我真的不知道可能导致它的原因。

1 个答案:

答案 0 :(得分:2)

您无法对H0进行案例分析,因为{qr : nat * nat | P (S a) b qr}SetType。仅or_ind定义or,因此需要Prop。如果您使用sum,则会sum_indsum_recsum_rect

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

Prop的设计方式与某些公理一致。