如何证明奇数是coq中nat的二重数的后继数?

如何证明奇数是coq中nat的二重数的后继数?,coq,Coq,我对奇数的定义如下: Definition Odd n := exists k, n = 2*k+1. 我有一个oddb定义一个数字是否是奇数 Fixpoint oddb (n : nat) { struct n } : bool := match n with | 0 => false | 1 => true | S (S n) => oddb n end. 我试图证明一个数字是否是nat的两倍的继承者;那么它是一个奇数 Theorem question

我对奇数的定义如下:

Definition Odd n := exists k, n = 2*k+1.
我有一个oddb定义一个数字是否是奇数

Fixpoint oddb (n : nat) { struct n } : bool :=

match n with
  | 0 => false
  | 1 => true
  | S (S n) => oddb n
  end.
我试图证明一个数字是否是nat的两倍的继承者;那么它是一个奇数

Theorem question_1c:
  forall n, Odd n -> (oddb n = true).
Proof.
  unfold Odd. intros. inversion H. 
  rewrite H0. simpl. induction x. 
  - simpl. reflexivity.
  - Admitted.
我坚持进了第二个球。。这表明我需要证明Sx。。从现在开始我的假设似乎没有帮助

1 subgoal
n : nat
H : exists k : nat, n = 2 * k + 1
x : nat
H0 : n = 2 * S x + 1
IHx : n = 2 * x + 1 -> oddb (x + (x + 0) + 1) = true
______________________________________(1/1)
oddb (S x + (S x + 0) + 1) = true

有人能帮我吗??您可以通过标准导入从
n
跳到
n+1
。这里有你的
odd
函数 您需要从
n
跳到
n+2
。因此,我们需要的是一个更强的归纳法。一种方法是证明:

Theorem question_1c:
  forall n m, m <= n -> Odd m -> (oddb m = true).
定理问题_1c:
对于所有n m,m奇数m->(oddb m=真)。

通过
n
上的标准导入(但对于所有
m
较小的对象)

标准导入允许您从
n
跳到
n+1
。这里有你的
odd
函数 您需要从
n
跳到
n+2
。因此,我们需要的是一个更强的归纳法。一种方法是证明:

Theorem question_1c:
  forall n m, m <= n -> Odd m -> (oddb m = true).
定理问题_1c:
对于所有n m,m奇数m->(oddb m=真)。
通过
n
上的标准归纳法(但对于所有
m
较小者)