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

能否在Coq中重命名项?以double_plus引理归纳步骤为例

Coq引理double_plus归纳步骤的简化证明疑问解答

我正在学习《Logical Foundations》,已经完成引理double_plus的证明:

Lemma double_plus : forall n, double n = n + n .
Proof.
  induction n.
  - simpl. reflexivity.
  - simpl. rewrite <- plus_n_Sm. rewrite IHn. reflexivity.
Qed.

在归纳步骤中,我的目标是:double (S n) = S n + S n。我想知道是否可以将(S n)设为k,并通过类似如下方式完成证明:

(* double k = k + k *)
rewrite IH. (*k + k = k + k*)
reflexivity.

当然可以通过变量替换的思路简化这一步的证明,不过要注意初始的归纳假设IHn是针对n的,直接替换S n为k后,需要先把归纳假设转换为针对k的形式,以下是两种可行的实现方式:

方式一:用pose定义变量并转换归纳假设

Lemma double_plus : forall n, double n = n + n .
Proof.
  induction n.
  - simpl. reflexivity.
  - pose (k := S n). (* 将S n定义为k *)
    replace n with (pred k) by (simpl; reflexivity). (* 把n替换成k的前驱,关联归纳假设 *)
    rewrite IHn. (* 此时归纳假设已适配k相关的目标 *)
    reflexivity.
Qed.

方式二:归纳时直接指定后继变量名(更简洁)

Lemma double_plus : forall n, double n = n + n .
Proof.
  induction n as [|k]. (* 归纳时将后继步骤的变量直接命名为k *)
  - simpl. reflexivity.
  - simpl.
    (* 此时目标为double (S k) = S k + S k,归纳假设IHk是关于k的:double k = k + k *)
    rewrite <- plus_n_Sm.
    rewrite IHk.
    reflexivity.
Qed.

需要注意的是,你设想的直接rewrite IH无法直接生效,因为初始的归纳假设只对n成立,必须先完成变量的关联转换,才能将归纳假设应用到k=S n的场景中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:52:21