Coq 如何将引理应用于2假设

Coq 如何将引理应用于2假设,coq,logical-foundations,Coq,Logical Foundations,我们得到这个: Theorem ev_plus_plus : forall n m p, even (n+m) -> even (n+p) -> even (m+p). Proof. intros n m p Hnm Hnp. 此外,我们还有一个以前证明过的定理: 1 subgoal (ID 189) n, m, p : nat Hnm : even (n + m) Hnp : even (n + p) ========================

我们得到这个:

Theorem ev_plus_plus : forall n m p,
  even (n+m) -> even (n+p) -> even (m+p).
Proof.
  intros n m p Hnm Hnp.
此外,我们还有一个以前证明过的定理:

1 subgoal (ID 189)
  
  n, m, p : nat
  Hnm : even (n + m)
  Hnp : even (n + p)
  ============================
  even (m + p)
我们知道
(n+m)
是偶数,
(n+p)
是偶数。 如何通过将ev_总和应用于Hnm和Hnp,在上下文中创建新假设:

ev_sum
     : forall n m : nat, even n -> even m -> even (n + m)

对此,您有多种选择。 您可以像这样使用
防姿势

Hsum: even((n+m) + (n+p))
它会满足你的期望。 它允许您给出一个术语并将其作为假设添加

另一个选项是使用
eapply。。。在
中。 比如你能做什么

pose proof (ev_sum _ _ Hnm Hnp) as Hsum.

然后你必须在其中一个子目标中给出它。

eapply更糟糕,它创建了第二个子目标来证明。是的。但在某些情况下,它仍然有用。:)您也可以通过(自动使用ev_sum)执行
assert(Hsum:偶数((n+m)+(n+p))。
当然可以,但这样就失去了
apply
的所有优点,您不必给出类型。
eapply ev_sum in Hnm.