Coq正向推理:应用多个假设
我有两个假设,我想用正向推理来应用一个定理,这两个定理都用到了 我的具体情况是我有假设Coq正向推理:应用多个假设,coq,ltac,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在与H0和H1统一时自动确定这些值。我发现我可以让它像
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在与H0
和H1
统一时自动确定这些值。我发现我可以让它像这样工作:
eapply f_equal2_mult in H0; try exact H1.
但这感觉像是一个黑客,对称性被破坏,而且
尝试。我真的希望能够说在H0、H1中应用f_equals2_mult
或类似的清晰内容。有这样的方法吗?你可以使用姿势证明
在上下文中介绍引理,并将其应用于其他假设
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).
或者专门化(f_equal2_mult uu h1h2)。
,或者姿势证明(f_equal2_mult h1h2)。
如果它是iff关系(),情况如何?e、 g.将Nat.mul\u cancel\r应用于H1:n0
和H2:a*n=b*n
?如果您在上下文中有H:pq
,您可以在H
中使用apply proj1将其转换为H:P->Q
。将proj1与后期校对相结合,我能够得到一行姿势校对(proj1(Nat.mul\u cancel\u\uh1))H2
用于双向情况。