coq - coq 中的模简化

标签 coq modulo coq-tactic

我是 Coq 的初学者,我在 Coq 中遇到了一个问题,我无法进一步简化这个问题。如果有人能提供有关如何将问题分解为更小的步骤的任何提示,那就太好了。引理是这样的:

forall (n : N) (n0 : N),

((1 + 2 * n + (2 * N.pos (2 ^ 32) - 1 - (0 + 2 * n0)))
 mod (2 * N.pos (2 ^ 32)) / (2 * 1)) mod N.pos (2 ^ 32) =
(((n + (N.pos (2 ^ 32) - 1 - n0)) mod N.pos (2 ^ 32) + 1 mod N.pos (2 ^ 32))
 mod N.pos (2 ^ 32) / 1) mod N.pos (2 ^ 32)

最佳答案

因此,您的目标无法证明,您可以尝试:

Goal exists (n : N) (n0 : N),
  ((1 + 2 * n + (2 * N.pos (2 ^ 32) - 1 - (0 + 2 * n0)))
  mod (2 * N.pos (2 ^ 32)) / (2 * 1)) mod N.pos (2 ^ 32) <>
  (((n + (N.pos (2 ^ 32) - 1 - n0)) mod N.pos (2 ^ 32) + 1 mod N.pos (2 ^ 32))
  mod N.pos (2 ^ 32) / 1) mod N.pos (2 ^ 32).
Proof.
  now exists 0, (N.pos 2^33).
Qed.

问题来自于正数之间的减法,当第二个参数较大时,它会返回 0,因此它不是单射的。

关于coq - coq 中的模简化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69751636/

相关文章:

假设中的 Coq 矛盾

coq - 如何在coq中证明关于ListMap递归函数的定理?

coq - 功能定义和归纳定义之间的平等

coq - 如何在 Coq 语句中证明给定的集合

coq - 非归纳类型的类型相等

c++ - 用模数环绕网格

types - 如何在 coq 中定义自定义归纳原理?

class - Coq:定义类型类实例

c - L在模1000000007L中的作用是什么?

ocaml - 如何在 OCaml 中使用正常的模运算