在 Coq 假设中拆分析取 (\/)

Posted

技术标签:

【中文标题】在 Coq 假设中拆分析取 (\\/)【英文标题】:Splitting disjunctions (\/) in Coq hypothesis在 Coq 假设中拆分析取 (\/) 【发布时间】:2019-03-24 06:38:31 【问题描述】:

我试图在 Coq 中证明一个简单的引理,其中 假设是析取。我知道如何在目标中出现split析取, 但是当它们出现在假设中时无法将它们分开。这是我的例子:

Theorem splitting_disjunctions_in_hypotheses : forall (n : nat),
  ((n < 5) \/ (n > 8)) -> ((n > 7) \/ (n < 6)).
Proof.
  intros n H1.
  split H1. (** this doesn't work ... *)

这是 Coq 所说的:

1 subgoal
n : nat
H1 : n < 5 \/ n > 8
______________________________________(1/1)
n > 7 \/ n < 6

有错误:

Error: Illegal tactic application.

我显然错过了一些简单的东西。 非常感谢任何帮助,谢谢!

【问题讨论】:

【参考方案1】:

你想要的策略是destruct

Theorem splitting_disjunctions_in_hypotheses : forall (n : nat),
  ((n < 5) \/ (n > 8)) -> ((n > 7) \/ (n < 6)).
Proof.
  intros n H1.
  destruct H1.

如果你想命名得到的假设,你可以destruct H1 as [name1 | name2].

【讨论】:

以上是关于在 Coq 假设中拆分析取 (\/)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Coq 中使用包含全称量词的假设?

具有存在目标的普遍假设中的 Coq 箭头类型

Coq:添加“强归纳”策略

如何在 Coq 中从见证人那里引入新的存在条件?

Prolog:模拟析取事实

使用 Coq 证明存在量词