Coq前向推理:适用多个假设

时间:2018-11-04 08:05:54

标签: coq ltac

我有两个假设,我想使用正向推理来应用同时使用两个假设的定理。

我的具体情况我有假设

H0 : a + b = c + d
H1 : e + f = g + h

我想应用标准库中的定理:

f_equal2_mult
     : forall x1 y1 x2 y2 : nat, x1 = y1 -> x2 = y2 -> x1 * x2 = y1 * y2

现在,我知道我可以手动给出x1,y1,x2,y2的值,但是当Coq与H0H1统一时,我希望Coq自动确定这些值。我发现我可以使它像这样工作:

eapply f_equal2_mult in H0; try exact H1.

但是,这感觉就像是破解,对称性破缺和try一样。我真的很想能够说出apply f_equals2_mult in H0, H1或类似的说法。有这样的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用pose proof在上下文中引入引理,并使用specialize将其应用于其他假设。

Lemma f (a b c d : nat) : a = b -> c = d -> False.
intros H1 H2.
pose proof f_equal2_mult as pp.
specialize pp with (1 := H1).
specialize pp with (1 := H2).

(* or *)
specialize pp with (1 := H1) (2 := H2).
相关问题