如何告诉 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.
确认
这里还有一个问题。所以,我有以下目标:
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.