软件基础第 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.
现在,我正在尝试在介绍完所有术语后在 injection
上 H0
解决这个问题。在 injection
和 H2
重写之后,我最终有了以下目标,我不知道如何前进。
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
添加到双方?
此致
从H3
和H1
,你应该可以得到一个假设,你可以再次使用注入来得出结论。
能否解释一下如何完成这个证明? (请不要给出实际答案,只是一些指导:)
练习来自 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.
现在,我正在尝试在介绍完所有术语后在 injection
上 H0
解决这个问题。在 injection
和 H2
重写之后,我最终有了以下目标,我不知道如何前进。
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
添加到双方?
此致
从H3
和H1
,你应该可以得到一个假设,你可以再次使用注入来得出结论。