在Coq定理中使用局部表示法

在Coq定理中使用局部表示法,coq,Coq,假设我想证明一个关于一个对象的定理,这个定理很难解释,比如说ABCDEFGHIJKLMNOPQRSTUVWXYZ,那么这个未修正的定理是 Theorem verbose : prop_1 ABCDEFGHIJKLMNOPQRSTUVWXYZ -> prop_2 ABCDEFGHIJKLMNOPQRSTUVWXYZ -> prop_3 ABCDEFGHIJKLMNOPQRSTUVWXYZ -> prop_4 ABCDEFGHIJKLMNOPQRSTUVWXYZ -> pro

假设我想证明一个关于一个对象的定理,这个定理很难解释,比如说
ABCDEFGHIJKLMNOPQRSTUVWXYZ
,那么这个未修正的定理是

Theorem verbose :
prop_1 ABCDEFGHIJKLMNOPQRSTUVWXYZ
-> prop_2 ABCDEFGHIJKLMNOPQRSTUVWXYZ
-> prop_3 ABCDEFGHIJKLMNOPQRSTUVWXYZ
-> prop_4 ABCDEFGHIJKLMNOPQRSTUVWXYZ
-> prop_5 ABCDEFGHIJKLMNOPQRSTUVWXYZ.
有没有一种方法可以在定理中使用局部表示法,这样我就可以把它压缩成如下的形式

Theorem succinct :
prop_1 X -> prop_2 X -> prop_3 X -> prop_4 X -> prop_5 X
where "X" := ABCDEFGHIJKLMNOPQRSTUVWXYZ.

如果我重复使用冗长的术语,我会使用常规的符号,但是对于一次性的情况,如果定理有类似于
where
的东西,那就好了,这样我可以重用好的名称。

你可以使用
Definition myobj:=abcdefghijklmnopqrstuvxyz.
来定义对象的名称。稍后,您可以使用
展开myobj.
将名称展开为其值

要将其引入本地校对环境,请使用
记住

Theorem foo:
    forall x y z : Z, x + y - z = x + (y - z).
    intros.
    remember (x+y) as bar.
现在环境是

...
Heqbar : bar = x + y
============================
bar - z = x + (y - z)

您可以使用
部分
s和
Let
进行本地定义

Section thm.

Let X := ABCDEFGHIJKLMNOPQRSTUVWXYZ.

Theorem succinct : prop_1 X -> prop_2 X.

....

End thm.

也许问题没有弄清楚,但我要找的是一个定理的局部符号,这样像
X
这样的简单变量名就可以在不重载的情况下重用。如果对象在多个定理中反复使用,你的建议确实是最好的方法。在证明中,你可以做
记住(foo+bar+ABDE)作为Q.