解释等价coq

时间:2019-02-17 08:06:50

标签: coq coqide

我有一个已经被证明的证明。

Lemma Equal_Trans : forall T : Type, forall y x z: T, 
      Equal x y -> Equal y z -> Equal x z.

其次,我对加法可交换性证明进行了修正。

Lemma Add_com : forall x x': Nat, Equal (Add x x') (Add x' x).
Proof.
intros.
induction x.
simpl.
apply Add_zero.
simpl.
apply (Equal_Trans Nat (S (Add x' x)) ). (* var y *)
apply Equal_Morph.
assumption.
apply Add_S.
Qed.

但是,我不了解Equal_trans的用法(第8行)。据我了解,Equal_Trans接受3个参数:y x z?但是,为什么在Add_com引理中只有1个使用Equal_Trans的参数?

预先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

策略apply试图填充空白以使提供的术语类型与目标匹配。在这种情况下,目标(使用战术时)可能类似于a = b(根据您的跟踪,实际上是Equal a b)。 Equal_Trans的类型(当使用所有参数时)为x = zEqual x z),因此,为了统一这两种类型,我们应分别使用x := a和{{1} }。只会使z := b含糊不清,因此我们必须提供它。

要解决您的问题,不,y不能仅将 用作一个参数。它需要一个类型(在您的情况下为Equal_Trans),该类型的三个元素(Natyx)和两个相等证明。但是,请记住,Coq中的函数是经过咖喱处理的,这意味着您可以使用更少的参数来调用它们,但是结果将是其余参数的函数。

实际上,当我们说z时,是说“拿起类型为apply (Equal_Trans Nat (S (Add x' x)).的东西,并尝试填写一些参数以使其与我的目标相匹配”。

Coq查看该类型并意识到目标已经看起来像forall (x z: Nat), Equal x (S (Add x' x)) -> Equal (S (Add x' x)) z -> Equal x z,因此可以推断出Equal x zx的含义。 z仍然接受Coq无法自行解决的两个论点(Equal_TransEqual x y的证明),因此其余的证明正在做。 >


我们在Equal y z中使用传递性,因为我们可以使用归纳假设(y := S (Add x' x))来证明Equal (S (Add x x')) (S (Add x' x))。我们也可以使用IHx的定义来证明Equal (S (Add x' x)) (Add x' (S x))。因此,自然通过Add传递平等证明。

现在,我们还没有使用S (Add x' x)的可传递性。我们可以证明y := S (Add x' x)(S (Add x x'))都等于(Add x' (S x))的其他元素。但是最简单,最直接的路线是通过Nat

答案 1 :(得分:0)

非常感谢您的帮助。

据我了解,Equal_trans仅接受1个参数,y参数?

但是,在执行命令apply (Equal_Trans Nat (S (Add x' x)) )之前,CoqIDE告诉我:

1 subgoal
x, x' : Nat
IHx : Equal (Add x x') (Add x' x)
______________________________________(1/1)
Equal (S (Add x x')) (Add x' (S x))

我不明白为什么,在这里,我必须使用y:= S(加x'x)来应用Equal_trans吗?