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

为何无法用simpl化简`j = j -> x = y`?Coq证明求助

解决《软件基础》injection_ex3的证明困境

当前你的证明目标是j = j -> x = y,处理起来很直接:

  • 先引入这个蕴含式的前提(j=j本身是恒真命题,无需额外证明),再聚焦推导x=y即可。

补充当前状态的证明代码

在现有证明基础上添加以下步骤就能完成证明:

intros _. (* 引入j=j的前提,直接忽略名字 *)
rewrite Hnm1. (* 用Hnm1把x替换成z,目标变为z=y *)
rewrite <- H2 in H. (* 将H里的j替换成z::l,得到y::l = z::l *)
injection H as Hyz. (* 对list等式做injection,得到y=z *)
rewrite Hyz. (* 把z替换成y,目标变为y=y *)
reflexivity.

更简洁的初始证明思路

其实你之前的步骤里没必要额外assert H3,从初始的两个前提直接推导更高效:

Example injection_ex3 : forall (X : Type) (x y z : X) (l j : list X),
  x :: y :: l = z :: j ->
  j = z :: l ->
  x = y.
Proof.
  intros X x y z l j H1 H2.
  injection H1 as Hxz Hj. (* 一次injection得到x=z和y::l = j *)
  rewrite H2 in Hj. (* 把Hj里的j替换成z::l,得到y::l = z::l *)
  injection Hj as Hyz. (* 得到y=z *)
  rewrite Hxz, Hyz. (* 利用x=z和z=y的传递性,目标变为y=y *)
  reflexivity.
Qed.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:37:40