在 Coq 的另一个子目标中使用一个经过验证的子目标

Using a proven subgoal in another subgoal in Coq

假设我想证明 P : A -> (B /\ C)。在 intros. split. 之后,Coq 生成了两个子目标,我分别证明了 BC,以 A 为前提。假设我已经证明了第一个子目标并进入了第二个。有什么方法可以引入之前证明的子目标,让我在上下文中有 B 吗?

一个明显的方法是将原始定理重构为 P1 : A -> BP2 : A -> C,但如果我可以跳过它会很好,特别是对于制作紧凑的自动证明。

你可以在 split. 之前 assert B. 证明它,然后 split 使用假设证明 B,然后继续证明 C B 可用。

或者,您可以构建一个:

Theorem and_intro_2 :
  forall A B C : Prop,
    (A -> B) ->
    (A -> B -> C) ->
    A -> B /\ C.
Proof. firstorder. Qed.

并在开始时立即应用它。