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

时间:2015-05-15 23:38:20

标签: coq

假设我想证明一个关于一个冗长拼出的对象的定理,比如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的定理,那就很好了,所以我可以重用好名字。

2 个答案:

答案 0 :(得分:2)

您可以使用SectionLet进行本地定义。

Section thm.

Let X := ABCDEFGHIJKLMNOPQRSTUVWXYZ.

Theorem succinct : prop_1 X -> prop_2 X.

....

End thm.

答案 1 :(得分:0)

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

要将其引入本地校样环境,请使用remember

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)