You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何证明Coq引理even_plus_split?仅限指定库与定义使用

搞定Coq引理even_plus_split的证明

嘿,作为Coq新手遇到这类分情况的证明很正常!我来一步步帮你搞定这个引理,完全用你给定的库和定义来实现。

首先,先把完整的证明代码贴出来,之后再拆解每一步的思路:

Require Import Arith.
Require Import Coq.omega.Omega.

Definition even (n: nat) := exists k, n = 2 * k.
Definition odd (n: nat) := exists k, n = 2 * k + 1.

Lemma even_plus_split n m : even (n + m) -> even n /\ even m \/ odd n /\ odd m.
Proof.
  (* 先展开even和odd的定义,方便直接处理存在量词与等式 *)
  unfold even, odd.
  (* 假设n+m是偶数,拆解为存在k满足n+m=2k *)
  intros [k Hkm].
  (* 对n的奇偶性做穷尽分情况讨论:自然数要么偶要么奇 *)
  destruct (Nat.even_odd_dec n) as [Hn_even | Hn_odd].
  - (* 情况1:n是偶数,拆解为存在a满足n=2a *)
    destruct Hn_even as [a Hna].
    (* 将n=2a代入n+m=2k的等式 *)
    rewrite Hna in Hkm.
    (* 推导m是偶数:整理等式得到m=2(k-a) *)
    assert (Hm_even: exists b, m = 2 * b).
    { exists (k - a). omega. }
    (* 构造目标的第一个析取支:n偶且m偶 *)
    left. split; assumption.
  - (* 情况2:n是奇数,拆解为存在a满足n=2a+1 *)
    destruct Hn_odd as [a Hna].
    (* 将n=2a+1代入n+m=2k的等式 *)
    rewrite Hna in Hkm.
    (* 推导m是奇数:整理等式得到m=2(k-a-1)+1 *)
    assert (Hm_odd: exists b, m = 2 * b + 1).
    { exists (k - a - 1). omega. }
    (* 构造目标的第二个析取支:n奇且m奇 *)
    right. split; assumption.
Qed.

关键步骤拆解

  • 展开定义:unfold even, odd把自定义的奇偶性转化为存在量词形式,让我们能直接操作底层等式。
  • 引入假设:intros [k Hkm]把“n+m是偶数”的假设拆解为具体的自然数k和对应的等式关系。
  • 分情况讨论:Nat.even_odd_dec n是Arith库提供的判定工具,帮我们覆盖自然数的所有可能(偶/奇),确保证明没有遗漏。
  • omega工具:omega是Coq的线性算术自动证明器,能快速解决2a + m = 2k这类整数等式的推导,不用手动做繁琐的自然数加减推理。
  • 构造目标:根据n的奇偶性推导出m的对应性质后,用left/right选择析取式分支,再用split构造合取结论,最后用assumption复用已证的前提。

这个证明完全符合你要求的库和定义,逻辑清晰,适合新手理解分情况证明和存在量词的处理方式~

内容的提问来源于stack exchange,提问作者Qizheng Wu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:13:13