我一直在研究Benjamin Pierce等人的第1卷,软件基础,我在IndProp一章中遇到了一些问题。不幸的是,我不知道有更好的地方可以问:任何人都有任何提示吗?
Theorem leb_complete : forall n m,
leb n m = true -> n <= m.
Proof.
(* FILL IN HERE *) Admitted.
Theorem leb_correct : forall n m,
n <= m ->
leb n m = true.
Proof.
(* FILL IN HERE *) Admitted.
这些是在线教科书中的练习;请不要提出解决方案。但是有一个起点可能会有所帮助。
答案 0 :(得分:1)
ejgallego有它! generalize dependent
是你的朋友。
因此,在这种情况下,您需要为所有自然数证明一个属性[并且它不会从您的组合理论中得出,因为您只是定义对象],因此感应通常是正确的工具。但请注意,你有两个数字,你会想要你的归纳假设,让我们说n足够通用以涵盖所有m!这是一个重要的步骤,Coq的感应策略实际上并不能很好地涵盖。 - ejgallego Dec 2 at 1:32
答案 1 :(得分:0)
这是一个generalize dependent
示例:
Theorem leb_correct : forall n m,
n <= m ->
Nat.leb n m = true.
Proof.
intros.
generalize dependent n.
induction m.
- intros.
destruct n.
+ easy.
+ easy.
- intros.
destruct n.
+ easy.
+ apply IHm.
apply (Sn_le_Sm__n_le_m _ _ H).
Qed.
Theorem Sn_le_Sm__n_le_m : forall n m,
S n <= S m -> n <= m.
Proof.
intros. inversion H.
apply le_n.
apply le_trans with (n := S n). apply n_le_Sn.
apply H2.
Qed.