如何告诉 Coq 可以删除 `n`?

How to tell Coq that it's okay to remove the `n`s?

这里还有一个问题。所以,我有以下目标:

  n, m, p, x : nat
  H1' : n + m = double x
  y : nat
  H2' : n + p = double y
  ============================
  m + p = m + p + double n - double n

我正在尝试 rewrite 使用 minus_n_n (double n)coq 不相信我能做到。我错过了什么?

谢谢

表达式 m + p + double n - double n 实际上是 ((m + p) + double n) - double n (*),因此 a - a 形式的目标没有子项。您需要使用 +- 的关联性规则重写,或者找到一些其他有用的引理。比如我发现

Nat.add_sub: forall n m : nat, n + m - m = n

像这样:

Require Import Arith.
Search (_ + _ - _).

(*) 您可以通过 Set Printing Parentheses.

确认