如何在Coq中保持目标未完成

如何在Coq中保持目标未完成,coq,Coq,在《伊莎贝尔》中,你可以通过两种方式让目标未完成: 对不起:我会留下你的证据,事实可以在以后的证据中使用。 oops:将留下证据,但事实不能用于以后的证据。 Coq中是否有类似的功能允许我将未完成的目标留到以后再实现?这有助于在不填写所有细节的情况下勾勒出校样的结构。请注意,中的方法修改了证明结构。那不是我要找的 有几种方法可以终止Coq中的证明。您可能知道Qed,它断言证明已完成。当您希望证明具有计算内容时,还定义了 您正在寻找的是: 承认,承认证据,以便以后使用; 放弃证明引理的中止。 它们

在《伊莎贝尔》中,你可以通过两种方式让目标未完成:

对不起:我会留下你的证据,事实可以在以后的证据中使用。 oops:将留下证据,但事实不能用于以后的证据。
Coq中是否有类似的功能允许我将未完成的目标留到以后再实现?这有助于在不填写所有细节的情况下勾勒出校样的结构。请注意,中的方法修改了证明结构。那不是我要找的

有几种方法可以终止Coq中的证明。您可能知道Qed,它断言证明已完成。当您希望证明具有计算内容时,还定义了

您正在寻找的是:

承认,承认证据,以便以后使用; 放弃证明引理的中止。 它们可以这样使用:

Lemma foo : forall n, n = 0.
Proof.
  intro n. destruct n.
  - reflexivity.
  -
Abort.
在这两种情况下,您都可以在允许/中止之前拥有部分验证脚本,或者根本没有

正如@HTNW所指出的,你也可以在证明的子目标中使用相同的策略“承认”和“放弃”。然而,使用这些证据,必须使用“允许”或“中止”来得出结论

在任何情况下,部分证明都会与此解决方案一起丢弃。 如果出于某种原因,你想继续使用部分证明,例如,如果你想用它进行计算,一个常见的技巧是使用一个公理来完成你想留给以后的目标

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 *)

不过,你必须小心使用这种伎俩。您可以使用打印假设lem检查一个引理是否已在没有公理的情况下被证明。如果它在上下文中说你是好的,否则它会列出它所依赖的公理,如果作弊出现,你知道它没有完全被证明。

你有几种方法来终止Coq中的证明。您可能知道Qed,它断言证明已完成。当您希望证明具有计算内容时,还定义了

您正在寻找的是:

承认,承认证据,以便以后使用; 放弃证明引理的中止。 它们可以这样使用:

Lemma foo : forall n, n = 0.
Proof.
  intro n. destruct n.
  - reflexivity.
  -
Abort.
在这两种情况下,您都可以在允许/中止之前拥有部分验证脚本,或者根本没有

正如@HTNW所指出的,你也可以在证明的子目标中使用相同的策略“承认”和“放弃”。然而,使用这些证据,必须使用“允许”或“中止”来得出结论

在任何情况下,部分证明都会与此解决方案一起丢弃。 如果出于某种原因,你想继续使用部分证明,例如,如果你想用它进行计算,一个常见的技巧是使用一个公理来完成你想留给以后的目标

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 *)

不过,你必须小心使用这种伎俩。您可以使用打印假设lem检查一个引理是否已在没有公理的情况下被证明。如果它在上下文中说你是好的,否则它会列出它所依赖的公理,如果作弊出现,你知道它还没有完全被证明。

Related:Related:还有一种策略是承认/放弃。这允许在一个证明中包含一个子目标,而不是承认整个事情。对,但是如果你这样做了,那么你必须使用“已承认”或“中止”来结束。但是如果你不介意的话,我会把它加到我的答案中。还有一个策略是承认/放弃。这允许在一个证明中包含一个子目标,而不是承认整个事情。对,但是如果你这样做了,那么你必须使用“已承认”或“中止”来结束。但是如果你不介意的话,我会把它添加到我的答案中。