我像往常一样尝试使用以下命令导入Library Coq.Structures.OrdersFacts:
Require Import Coq.Structures.OrdersFacts然后我尝试在那里使用引理:apply CompareFacts.compare_nlt_iff.或apply compare_nlt_iff.,但都不起作用...我遗漏了什么?
发布于 2019-04-28 23:43:34
CompareFacts是Module Type,不是Module。如果你这样做,你可以看到这一点
Require Import Coq.Structures.OrdersFacts.
Print OrdersFacts.CompareFacts.找到此类型的模块并应用它的引理。
编辑:
我的意思是,要在nat上使用引理,您需要一个模块来证明nat是一个DecStrOrder' (来自PeanoNat的Nat就是这样一个模块),并且还需要一个专门针对nat的CompareFacts。
也许一个例子更有用。
Require Import Coq.Structures.OrdersFacts.
Module mymodule (O:DecStrOrder') (T: CompareFacts O).
Import T.
Import O.
Check compare_eq_iff. (* from CompareFacts *)
(* a theorem about terms of type O.t *)
Lemma lem1 a b c: (a ?= b) = Eq -> b == c -> c == a.
intros.
rewrite compare_eq_iff in H. (* here we use the lemma *)
rewrite H.
rewrite H0.
apply eq_equiv.
Qed.
End mymodule.
(* the above module functor can be specialised for i.e. nat *)
Require Import PeanoNat.
Print CompareFacts.
Module M : CompareFacts Nat.
Definition compare_eq_iff := Nat.compare_eq_iff.
Definition compare_eq := Nat.compare_eq.
Definition compare_lt_iff := Nat.compare_lt_iff.
Definition compare_gt_iff := Nat.compare_gt_iff.
Definition compare_nlt_iff := Nat.compare_nlt_iff.
Definition compare_ngt_iff := Nat.compare_ngt_iff.
Definition compare_refl := Nat.compare_refl.
Definition compare_compat: Proper (eq==>eq==>eq) Nat.compare.
intros x y Hxy a b Hab; now subst. Defined.
Definition compare_antisym := Nat.compare_antisym.
End M.
Module natmodule := mymodule Nat M.
Check natmodule.lem1.https://stackoverflow.com/questions/55877588
复制相似问题