Theorem silly2 : forall(n m o p : nat),
n = m ->
(forall (q r : nat), q = r -> [q;o] = [r;p]) ->
[n;o] = [m;p].
Proof.
intros n m o p eq1 eq2.
apply eq2.
apply eq1.
Qed.
SF book意味着可以使用重写来完成上述操作,但我只是不知道如何。知道怎么可能这样做吗?
答案 0 :(得分:2)
如果正确填写rewrite (eq2 ? ? ?)
,您应该能够使用?
证明这一点。请务必了解正在发生的事情,以便提高您对Coq的理解。
[提示:尝试pose proof (eq2 o)
并查看它的作用]
答案 1 :(得分:2)
以下是3个不同版本。在我意识到rewrite
错误消息意味着什么之后,我在看到ejgallego在不同背景下的回复之前,我自己想出的第一个。
Theorem silly2 : forall(n m o p : nat),
n = m ->
(forall (q r : nat), q = r -> [q;o] = [r;p]) ->
[n;o] = [m;p].
Proof.
intros n m o p eq1 eq2.
rewrite eq2 with (r := m).
- reflexivity.
- rewrite eq1. reflexivity.
Qed.
根据ejgallego的建议,第二个似乎是一个功能应用程序的重写。
Theorem silly2' : forall(n m o p : nat),
n = m ->
(forall (q r : nat), q = r -> [q;o] = [r;p]) ->
[n;o] = [m;p].
Proof.
intros n m o p eq1 eq2.
rewrite (eq2 n m).
- reflexivity.
- rewrite eq1. reflexivity.
Qed.
第三个使用pose proof
似乎在假设上进行功能应用而不重写上面的目标。
Theorem silly2'' : forall(n m o p : nat),
n = m ->
(forall (q r : nat), q = r -> [q;o] = [r;p]) ->
[n;o] = [m;p].
Proof.
intros n m o p eq1 eq2.
pose proof (eq2 n m).
apply H.
apply eq1.
Qed.