不能用断言重写目标?
Cannot rewrite goal with assertion?
我不确定我是否理解为什么重写 H
在某些情况下有效,而在某些情况下却无效。
这里例如:
Theorem add_assoc2 : forall n m: nat, n + m = m + n.
Proof. intros. rewrite add_comm. reflexivity. Qed.
Theorem plus_4: forall n m p q: nat,
n + (n * p) + m + (m * p) = n + m + (n * p) + (m * p).
Proof.
intros.
assert (H: n * p + m = m + n * p).
{ rewrite <- add_assoc2. reflexivity. }
rewrite H.
给出:
1 goal
n, m, p, q : nat
H : n * p + m = m + n * p
______________________________________(1/1)
n + n * p + m + m * p = n + m + n * p + m * p
但是 Coq 抱怨:Found no subterm matching "n * p + m" in the current goal.
为什么?
我清楚地看到一个,在左边。使用归纳时,用 IHn
重写不会造成任何问题,即使 rewriteable 表达式前面有一些其他项。
您可以“看到”子项 n * p + m
,但这是一种误导:Coq 不会向您显示所有 +
表达式周围的隐式括号。
使用
Set Printing Parentheses.
让它们可见。你的证明状态真的是:
n, m, p, q : nat
H : ((n * p) + m) = (m + (n * p))
============================
(((n + (n * p)) + m) + (m * p)) = (((n + m) + (n * p)) + (m * p))
Coq 是正确的,没有子项匹配 H
的左侧表达式 ((n * p) + m)
。您需要使用一些关联性引理来重写以移动括号。
此外,add_assoc2
不是引理 forall n m: nat, n + m = m + n
的好名称。这是交换性属性,不是结合性
我不确定我是否理解为什么重写 H
在某些情况下有效,而在某些情况下却无效。
这里例如:
Theorem add_assoc2 : forall n m: nat, n + m = m + n.
Proof. intros. rewrite add_comm. reflexivity. Qed.
Theorem plus_4: forall n m p q: nat,
n + (n * p) + m + (m * p) = n + m + (n * p) + (m * p).
Proof.
intros.
assert (H: n * p + m = m + n * p).
{ rewrite <- add_assoc2. reflexivity. }
rewrite H.
给出:
1 goal
n, m, p, q : nat
H : n * p + m = m + n * p
______________________________________(1/1)
n + n * p + m + m * p = n + m + n * p + m * p
但是 Coq 抱怨:Found no subterm matching "n * p + m" in the current goal.
为什么?
我清楚地看到一个,在左边。使用归纳时,用 IHn
重写不会造成任何问题,即使 rewriteable 表达式前面有一些其他项。
您可以“看到”子项 n * p + m
,但这是一种误导:Coq 不会向您显示所有 +
表达式周围的隐式括号。
使用
Set Printing Parentheses.
让它们可见。你的证明状态真的是:
n, m, p, q : nat
H : ((n * p) + m) = (m + (n * p))
============================
(((n + (n * p)) + m) + (m * p)) = (((n + m) + (n * p)) + (m * p))
Coq 是正确的,没有子项匹配 H
的左侧表达式 ((n * p) + m)
。您需要使用一些关联性引理来重写以移动括号。
此外,add_assoc2
不是引理 forall n m: nat, n + m = m + n
的好名称。这是交换性属性,不是结合性