繁体   English   中英

如何在 Coq 中留下未完成的目标

[英]How to leave a goal unfinished in Coq

在 Isabelle 中,您可以通过两种方式让目标未完成:

  • 抱歉:将留下您的证明,该事实可用于以后的证明。
  • 哎呀:会留下证明,但事实不能在以后的证明中使用。

Coq 中是否有类似的功能可以让我留下一个未完成的目标,稍后再回来? 这对于在不填写所有细节的情况下勾画证明的结构很有用。 请注意如何在 Coq 中切换当前目标中的方法? 修改证明结构。 那不是我要找的。

在 Coq 中有多种方法可以终止证明。 您可能知道Qed断言证明已完成。 当您希望证明具有计算内容时,也有Defined

您正在寻找的东西是:

  • Admitted承认该证明,以便以后使用;
  • Abort证明引理的Abort

它们可以这样使用:

Lemma foo : forall n, n = 0.
Proof.
  intro n. destruct n.
  - reflexivity.
  -
Abort.
Lemma bar : forall n, n = n.
Admitted.

在这两种情况下,您都可以在Admitted / Abort之前使用部分证明脚本,或者根本没有。

正如@HTNW 指出的那样,您还可以在证明的子目标中使用等价的策略admitgive_up 使用这些,证明然而,必须使用缔结或者AdmittedAbort

Lemma lem : forall A, A + A -> A.
Proof.
  intros A h.
  destruct h.
  - admit.
  - give_up.
Admitted.

在任何情况下,这个解决方案都抛弃了部分证明。 如果出于某种原因您想继续使用部分证明(例如,如果您想用它进行计算),一个常见的技巧是使用公理来关闭您想留待以后使用的目标。

Axiom cheating : forall A, A.

Tactic Notation "cheat" := apply cheating.

Lemma lem : forall A, A + A -> A.
Proof.
  intros A h.
  destruct h.
  - cheat.
  - cheat.
Defined. (* This is now ok *)

不过,您必须小心使用该技巧。 您可以使用Print Assumptions lem来检查引理是否已在没有公理的情况下得到证明。 如果它说“在上下文下关闭”你很好,否则它会列出它所依赖的公理,如果出现cheating你知道它没有完全被证明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM