软件基础第 1 卷:策略:injection_ex3

Software Foundations Volume 1: Tactics: injection_ex3

能否解释一下如何完成这个证明? (请不要给出实际答案,只是一些指导:)

练习来自 SF 卷 1,如标题所述,它是这样的:

(** **** Exercise: 3 stars, standard (injection_ex3) *)
Example injection_ex3 : forall (X : Type) (x y z : X) (l j : list X),
  x :: y :: l = z :: j ->
  j = z :: l ->
  x = y.

现在,我正在尝试在介绍完所有术语后在 injectionH0 解决这个问题。在 injectionH2 重写之后,我最终有了以下目标,我不知道如何前进。

1 subgoal (ID 174)
  
  X : Type
  x, y, z : X
  l, j : list X
  H2 : x = z
  H3 : y :: l = j
  H1 : j = z :: l
  ============================
  z = y

很明显,如果我设法将 :: l 添加到等式的两边,那么我可以用 reflexivity 完成,但是什么策略可以让我将 :: l 添加到双方?

此致

H3H1,你应该可以得到一个假设,你可以再次使用注入来得出结论。