在Coq中定义我自己的OrderedType

时间:2017-11-20 17:56:15

标签: coq formal-verification proof-general

为了尝试了解如何在Coq中定义自己的OrderedType,我正在研究OrderedType中标准库中给出的Coq.Structures.OrderedTypeEx的示例( here)。截至目前,我只关注前几个模块:

Require Import OrderedType.
Require Import ZArith.
Require Import Omega.
Require Import NArith Ndec.
Require Import Compare_dec.    

Module Type UsualOrderedType.
 Parameter Inline t : Type.
 Definition eq := @eq t.
 Parameter Inline lt : t -> t -> Prop.
 Definition eq_refl := @eq_refl t.
 Definition eq_sym := @eq_sym t.
 Definition eq_trans := @eq_trans t.
 Axiom lt_trans : forall x y z : t, lt x y -> lt y z -> lt x z.
 Axiom lt_not_eq : forall x y : t, lt x y -> ~ eq x y.
 Parameter compare : forall x y : t, Compare lt eq x y.
 Parameter eq_dec : forall x y : t, { eq x y } + { ~ eq x y }.
End UsualOrderedType.

Module UOT_to_OT (U: UsualOrderedType) <: OrderedType := U.

Module Nat_as_OT <: UsualOrderedType.

  Definition t := nat.

  Definition eq := @eq nat.
  Definition eq_refl := @eq_refl t.
  Definition eq_sym := @eq_sym t.
  Definition eq_trans := @eq_trans t.

  Definition lt := lt.

  Lemma lt_trans : forall x y z : t, lt x y -> lt y z -> lt x z.        

  Lemma lt_not_eq : forall x y : t, lt x y -> ~ eq x y.

  Definition compare x y : Compare lt eq x y.

  Definition eq_dec := eq_nat_dec.

End Nat_as_OT.

当我在Proof General中单独执行此操作时,我收到错误Error: Proof editing in progress.当我到达最后一行时。它似乎希望我在接受模块结束之前证明lt_trans。这很公平。但是,如果证据不存在,那么它如何作为标准库的一部分?是否以一种我不理解的方式隐含地引用了一些先验证据?另外,如果我Proof. Admitted.能够跳过引理证明,那么它需要Definition compare x y : Compare lt eq x y.的证明。为什么要求定义证明?

0 个答案:

没有答案