假设我想证明一个关于一个冗长拼出的对象的定理,比如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
的定理,那就很好了,所以我可以重用好名字。
答案 0 :(得分:2)
您可以使用Section
和Let
进行本地定义。
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)