如何在Coq中复制一个假设?

如何在Coq中复制一个假设?,coq,Coq,在证明过程中,我遇到了一个假设H。我有引理:H->A和H->B 我如何复制H以推导出两个假设A和B 已编辑: 更确切地说,我有: 引理l1:X->A。 引理l2:X->B。 1子目标,子目标1(ID:42) H:X ========= Y 但是,我想得到: 1子目标,子目标1(ID:42) H1:A H2:B ========= Y 为什么你认为你需要重复这个假设?如果你在校样中使用它,它不会变得不可用。请参见此示例: Parameter A B H : Type. Parameter lem

在证明过程中,我遇到了一个假设
H
。我有引理:
H->A
H->B

我如何复制
H
以推导出两个假设
A
B

已编辑: 更确切地说,我有:

引理l1:X->A。 引理l2:X->B。 1子目标,子目标1(ID:42) H:X ========= Y 但是,我想得到:

1子目标,子目标1(ID:42)
H1:A
H2:B
=========
Y

为什么你认为你需要重复这个假设?如果你在校样中使用它,它不会变得不可用。请参见此示例:

Parameter A B H : Type.
Parameter lemma1 : H -> A.
Parameter lemma2 : H -> B.

Goal H -> A * B.
intro; split; [apply lemma1 | apply lemma2]; assumption.
Qed.

如果您确实需要按照建议多次使用假设,您可以使用前向推理策略,例如
assert
,这样做而无需从上下文中清除它,例如

assert (HA := l1 H).
assert (HB := l2 H).

您也可以执行类似于断言(H’:=H)的操作。将
H
显式复制到
H’
,尽管您通常可以求助于更直接的方法来获得您想要的。

我需要假设a和假设B来证明一个目标。我分不开。当我在H中应用引理1时,H确实变得不可用,并被A取代。我用所需转换的草图扩展了我的问题。正如我所说的,
apply l1 in H
将X替换为A in place,因此在此之后,我不能
apply l2 in H