使用Coq的案例证明

Lar*_*Lee 3 logic theorem-proving coq

我有一个简单的定理,我想通过案例证明.下面给出一个例子.

Goal forall a b : Set, a = b \/ a <> b.
Proof
  intros a b.
  ...

我将如何解决这个问题.而且,我究竟如何使用两个可能的相等值(True或False)来定义证明?

任何帮助,将不胜感激.谢谢,

Pti*_*val 7

我很确定Set在Coq 中s的相等性是不可判定的.原因(我的理解有限)将是它不是一个归纳定义的集合(因此,对你来说没有案例分析......),它也不是一个封闭的集合:每当你定义一个新的数据类型时,你创造一个新的居民家庭Set.因此,证明您展示的目标的术语需要更新以反映这些新居民.

正如@hardmath在他的评论中提到的那样,你可以使用Classical假设(Axiom classic : forall P:Prop, P \/ ~ P.)证明你的目标.

正如@Robin Green在这里的评论中提到的那样,你可以证明这种目标对于可判定相等的类型.为此,您可能希望从decide equality策略中获得帮助.见:http://coq.inria.fr/distrib/V8.4/refman/Reference-Manual011.html#@tactic121

  • 为了稍微详细说明这个答案,有两种主要方法可以证明某种类型的T(这里T是"Set").如果T具有已知的可判定的相等过程,则只需使用过程可判定的证明.如果没有,就必须诉诸古典逻辑; Coq的默认逻辑是直觉的. (2认同)