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

Jer*_*wen 5 coq ltac

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

我的具体情况我有假设

H0 : a + b = c + d
H1 : e + f = g + h
Run Code Online (Sandbox Code Playgroud)

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

f_equal2_mult
     : forall x1 y1 x2 y2 : nat, x1 = y1 -> x2 = y2 -> x1 * x2 = y1 * y2
Run Code Online (Sandbox Code Playgroud)

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

eapply f_equal2_mult in H0; try exact H1.
Run Code Online (Sandbox Code Playgroud)

但这感觉就像是一种黑客攻击,对称性破缺,而且try. 我真的很希望能够说apply f_equals2_mult in H0, H1一些类似的话。有这样的办法吗?

Li-*_*Xia 4

您可以用来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).
Run Code Online (Sandbox Code Playgroud)

  • 或者“专门化(f_equal2_mult _ _ _ _ H1 H2)”,或者“姿势证明(f_equal2_mult _ _ _ _ H1 H2)”。 (3认同)