我在Coq中有一个证据,其中一个假设是:
H : m = pred q * n + (r + n)
我有一个经过证明的引理:
Lemma suma_conmutativa: forall m, forall n, m + n = n + m.
其中+是我定义的名为suma的函数的表示法:
Fixpoint suma (m:nat) (n:nat) : nat :=
match m with
| 0 => n
| S k => S (suma k n)
end.
Notation "m + n" := (suma m n).
出于某种原因,当我尝试重写suma_conmutativa with r n in H
时,我收到以下错误:
Error: Found no subterm matching "r + n" in H.
然而,在H.中显然有一个子项匹配r + n。为什么Coq找不到它?
谢谢。
答案 0 :(得分:0)
我不是Coq中的符号专家,但这是我理解你的问题的方法。
Coq将+
的第一次出现替换为suma
。 suma
将其参数绑定到范围nat_scope
。经典表示法+
与nat_scope
绑定,并且优先于+
的第二次出现。
我建议的解决方案是将您的符号绑定到nat_scope
以完全隐藏原始符号。这给出了:
Notation "m + n" := (suma m n) : nat_scope
。