Coq中gt关系的反身性

时间:2014-04-25 14:54:14

标签: relationship coq

我想证明,对于任何自然数,n + 1都大于0。

定义我自己的大于函数这很好用:

Fixpoint my_gt (n : nat) (m : nat) : bool
  := match n with
     | O    => false
     | S n' => match m with
               | O    => true
               | S m' => my_gt n' m'
               end
     end.

Lemma GT1: forall n, my_gt (S n) O = true. reflexivity. Qed.

但是当我使用默认的“>”时 - 关系Coq拒绝消息“Tactic failure:关系gt不是声明的反身关系。也许你需要需要Setoid库”。因为我确实需要Setoid库,所以我不明白为什么Coq似乎没有找到gt定义?

Require Export Coq.Setoids.Setoid.
Lemma GT2: forall n, S n > O. reflexivity.

1 个答案:

答案 0 :(得分:1)

如果你看一下Coq的gt定义,那么你会认为这只是lt上的符号,这是le以上的符号:

    gt = fun n m : nat => m < n
         : nat -> nat -> Prop

    lt = fun n m : nat => S n <= m
         : nat -> nat -> Prop

    Inductive le (n : nat) : nat -> Prop :=
        le_n : n <= n | le_S : forall m : nat, n <= m -> n <= S m

现在你可以看到,它并没有被声明为一个函数,而是一个归纳谓词,所以你不能简单地“计算”#34;得到解决方案。要证明这样的目标,您必须使用constructorinduction等策略来证明自己的目标。

请注意,您的关系位于bool,而Coq位于Prop(比较某些类型的两个元素的一般方法可能无法判定)。对于自然数的特定情况,您可以在leb模块中的某处找到Arith,其行为与您相同:

    Require Import Arith.
    Print leb.

    Lemma GT2: forall n, leb O (S n) = true.
    reflexivity.
    Qed.

最佳, 诉