Coq 无特定目标的交互式定理证明

Coq 无特定目标的交互式定理证明,coq,Coq,在Coq中进行交互式定理证明而不首先指定定理定义的最佳方法是什么?我想陈述一些初始假设和定义,然后以交互方式探索转换,看看是否可以在不提前知道的情况下证明任何有趣的定理。我希望Coq能帮助我跟踪转换后的假设,并检查我的重写是否有效,比如在交互模式下证明显式定理时。Coq是否支持此用例?一种方便的方法是使用变量/假设命令(它们做相同的事情)添加假设并引入示例对象(例如,变量n:nat。引入您现在可以使用的nat)。然后进入定理证明模式,我偶尔做的是目标错误。开始证明错误,只是为了确保我不会意外地证

在Coq中进行交互式定理证明而不首先指定
定理
定义的最佳方法是什么?我想陈述一些初始假设和定义,然后以交互方式探索转换,看看是否可以在不提前知道的情况下证明任何有趣的定理。我希望Coq能帮助我跟踪转换后的假设,并检查我的重写是否有效,比如在交互模式下证明显式定理时。Coq是否支持此用例?

一种方便的方法是使用
变量
/
假设
命令(它们做相同的事情)添加假设并引入示例对象(例如,
变量n:nat。
引入您现在可以使用的nat)。然后进入定理证明模式,我偶尔做的是
目标错误。
开始证明
错误
,只是为了确保我不会意外地证明定理。您还可以断言和承认事物,以获得额外的假设,而无需重新开始证明。

我能想到的一件事是开始证明形式的目标
H1->H2->…->存在P:Prop,P
。也就是说,“根据假设H1,H2,…,有一些可证明的命题”。这允许你玩弄假设,如果你已经发现了你想要的命题
P
,你可以用
exists
策略实例化它。
Variable
假设
只是
Axiom
的别名,对吗?使用它的缺点之一是,它们在交互模式下不会显示在水平线上方。我可以使
n1:nat
显示在带有
变量n:nat的行下方。记住n作为n1
,但它也添加了
Heqn1:n1=n
,当我添加更多变量时,这可能会让人恼火。如果您首先打开一个部分,那么变量和假设将在交互证明期间出现在水平线的顶部。是的,更具体地说,变量/假设是
局部公理
的同义词,不在任何部分<代码>参数和猜测实际上是公理的同义词。