Coq - 如何证明 eqb_neq?
Coq - How to prove eqb_neq?
我想证明eqb_neq
:
Theorem eqb_neq : forall x y : nat,
x =? y = false <-> x <> y.
这是我目前的证明状态:
在证明过程中,我到达了最后一步,我只需要证明附加的辅助定理:
Theorem eqb_false_helper : forall n m : nat,
n <> m -> S n <> S m.
我已经尝试了多种策略,但现在我什至不确定是否有可能证明这个辅助定理。
我不确定如何使用归纳来证明基本情况:
我还能尝试什么? eqb_neq
或辅助定理的任何提示?
谢谢
如果你不展开的话,你的辅助定理实际上很简单:
Theorem eqb_false_helper : forall n m : nat,
n <> m -> S n <> S m.
Proof.
unfold not; intros.
apply H; injection H0; intro; assumption.
Qed.
你其实只需要证明S n = S m -> False
,你假设n = m -> False
,这样你就可以证明S n = S m -> n = m
,这是通过注入假设S n = S m
完成的。
我想证明eqb_neq
:
Theorem eqb_neq : forall x y : nat,
x =? y = false <-> x <> y.
这是我目前的证明状态:
在证明过程中,我到达了最后一步,我只需要证明附加的辅助定理:
Theorem eqb_false_helper : forall n m : nat,
n <> m -> S n <> S m.
我已经尝试了多种策略,但现在我什至不确定是否有可能证明这个辅助定理。
我不确定如何使用归纳来证明基本情况:
我还能尝试什么? eqb_neq
或辅助定理的任何提示?
谢谢
如果你不展开的话,你的辅助定理实际上很简单:
Theorem eqb_false_helper : forall n m : nat,
n <> m -> S n <> S m.
Proof.
unfold not; intros.
apply H; injection H0; intro; assumption.
Qed.
你其实只需要证明S n = S m -> False
,你假设n = m -> False
,这样你就可以证明S n = S m -> n = m
,这是通过注入假设S n = S m
完成的。