coq - 如何证明一个奇数是coq中nat的double的后继?
问题描述
我的奇数定义如下:
Definition Odd n := exists k, n = 2*k+1.
而且我有一个奇怪的定义,即一个数字是否为奇数。
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).
通过标准归纳n
(但对于所有m
较小的)
推荐阅读
- vba - 如果未找到图标,则执行 Vba sap 脚本
- javascript - 您如何将您的网址放入 img 标签 (html) 中?
- docker - 同一程序无法完全使用另一台机器上的 CPU 资源
- python - 类定义之外的类的新方法
- php - 为什么我的 laravel 项目的 config 文件夹中没有文件?如何更改我的 laravel 项目的配置?
- php - 如何禁用 wordpress 仅针对特定邮件地址发送外发电子邮件
- vim - termdebug vim 中的初始窗口拆分
- python - namedtuple() 得到了一个意外的关键字参数“详细”
- laravel - Laravel:我如何在生产和开发中将我的图像移动到 s3 让它留在本地?
- c# - 如何使 TableLayoutPanel 可聚焦