无法在Coq中重写子项

时间:2015-11-24 22:37:27

标签: coq proof

我在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找不到它?

谢谢。

1 个答案:

答案 0 :(得分:0)

我不是Coq中的符号专家,但这是我理解你的问题的方法。

Coq将+的第一次出现替换为sumasuma将其参数绑定到范围nat_scope。经典表示法+nat_scope绑定,并且优先于+的第二次出现。

我建议的解决方案是将您的符号绑定到nat_scope以完全隐藏原始符号。这给出了: Notation "m + n" := (suma m n) : nat_scope