我被this lecture留在了一个“留下来作为练习”的引理。它是这样的:
Lemma even_double : forall n, even n -> exists k, n = 2 * k.
Proof.
intros n H.
induction H.
...
even
是一个如此定义的归纳谓词:
Inductive even : nat -> Prop :=
| even0 : even 0
| evenS : forall p:nat, even p -> even (S (S p).
请帮忙吗?我总是以(S (S p) = 2
或类似的方式结束。
修改
我使用的一些引理和策略(不完全证明):
destruct IHeven
exists (S x)
rewrite mult_succ_l
apply eq_S
apply plus_n_Sm
答案 0 :(得分:2)
在归纳步骤之后,您应该有两个目标。
第一个(even0
的基本情况)应该很容易证明。存在主义的证人应该被选为0
,之后目标应该由反身性来保持。
第二种情况(对于evenS
)看起来像:
p : nat
H : even p
IHeven : exists k : nat, p = 2 * k
============================
exists k : nat, S (S p) = 2 * k
IHeven
表示存在一个号码(我们将其命名为k1
),以便p = 2 * k1
。
您的目标是展示一个数字(例如k2
),以便证明S (S p) = 2 * k2
。
如果你进行数学运算,你会发现(S k1)
是最理想的候选人。
因此,您可以使用以下策略:
destruct
要求IHeven
分隔证人k1
和证明p = 2 * k1
。 exists
展示(S k1)
作为您目标的存在主义见证。