假设有一个十进制关系
R
针对某种类型A
。Variable A : Type.
Variable R : A -> A -> A -> A -> A -> A -> A -> A -> A -> A -> Prop.
< p >< code >X< /code >和< code >Y< /code >是稍有不同的命题,它们都声称在< code >A< /code >类型的10个术语中,< code >R< /code >成立。< /p >
Inductive X : Prop :=
| X_intro : forall a0 a1 a2 a3 a4 a5 a6 a7 a8 a9,
R a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 -> X.
Record Y : Prop :=
{ a0 : A; a1 : A; a2 : A; a3 : A; a4 : A;
a5 : A; a6 : A; a7 : A; a8 : A; a9 : A;
RY : R a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 }.
由于X
和Y
有相同的断言,因此证明X -> Y
应该很容易。例如,我们可以通过显式构造Y
的证明来完成。
Theorem XY : X -> Y.
inversion 1. exists a0 a1 a2 a3 a4
a5 a6 a7 a8 a9. apply H0. Qed.
但是这似乎是不必要的。通过对前提进行反演得到的最后一个命题完全确定了这10个术语,因此我们不需要拼写它们的名称。我们可以使用eexists
推迟它们的识别并稍后统一它们。
Theorem XY' : X -> Y.
intro. eexists. inversion H. apply H0.
但是统一在这里失败了。 这是应用 H0
之前我的目标的样子:
H0 : R a0 a1 a2 a3 a4 a5 a6 a7 a8 a9
======================== ( 1 / 1 )
R ?46 ?47 ?48 ?49 ?50 ?51 ?52 ?53 ?54 ?55
所有传递给 R
的参数都是不确定的,因此应该可以将 ?46
与 a0
统一,将 ?47
与 a1
统一,等等。为什么会失败?
H0
。这会使使用不同 Coq 版本的用户难以帮助您。 - Konstantin Weitz