在Coq中的大于命题中使用等价定理

在Coq中的大于命题中使用等价定理,coq,Coq,在自然数的上下文中,我有以下等价、小于和加法运算定义: Require Import Setoid. (* CNat Set *) Parameter (CNat:Set) (O i:CNat). (* CEq Equivalence *) Parameter CEq: CNat->CNat->Prop. Infix "¦" := CEq (at level 70, no associativity). Axiom ceq_refl: forall x:CNat, x¦x. Ax

在自然数的上下文中,我有以下等价、小于和加法运算定义:

Require Import Setoid.

(* CNat Set *)
Parameter (CNat:Set) (O i:CNat).

(* CEq Equivalence *)
Parameter CEq: CNat->CNat->Prop.
Infix "¦" := CEq (at level 70, no associativity).
Axiom ceq_refl: forall x:CNat, x¦x.
Axiom ceq_sym: forall x y:CNat, x¦y->y¦x.
Axiom ceq_trans: forall x y z:CNat, x¦y->y¦z->x¦z.
Add Relation CNat CEq
  reflexivity proved by ceq_refl
  symmetry proved by ceq_sym
  transitivity proved by ceq_trans
  as ceq_rel.

(* CLe StrictOrder *)
Parameter CLe: CNat->CNat->Prop.
Infix "«" := CLe (at level 70).
Axiom cle_irrefl: forall x:CNat, ~x«x.
Axiom cle_trans: forall x y z:CNat, x«y->y«z->x«z.
Add Relation CNat CLe
  transitivity proved by cle_trans
  as cle_rel.

(* CAdd Operation *)
Parameter CAdd : CNat->CNat->CNat.
Infix "±" := CAdd (at level 50, left associativity).
Add Morphism CAdd with signature CEq ==> CEq ==> CEq 
  as ceq_add_mor. Admitted.
然后我定义了中性加法和自然归纳法,并尝试在测试定理中使用它们:

(* CNat Axioms *)
Axiom cnat_add_neutral: forall x:CNat, x±O¦x.
Axiom cnat_induction: forall P: CNat->Prop, P O ->
    (forall x:CNat, P x->P (x±i)) -> forall x:CNat, P x.

(* CNat Test Theorem *)
Example cle_neutral_test: forall x:CNat, O«x -> O«x±O.
Proof.
  intros x CH.
  rewrite cant_add_neutral. (* Error *)
  apply CH.
Qed.
出现以下错误:

Error:
Tactic failure: setoid rewrite failed: Unable to satisfy the following constraints:
In environment:
x : CNat
CH : O « x
do_subrelation := Morphisms.do_subrelation : Morphisms.apply_subrelation

?p : "Morphisms.Proper (CEq ==> Basics.flip Basics.impl) (CLe O)"

在能够进行此测试之前,我应该生成什么样的先前定义或演示

(使用更标准的符号,我希望您仍然清楚。
CEq
==
CLe
出于好奇,为什么选择该符号作为
CEq
y == z -> x < z -> x < y
Add Morphism CLe with signature CEq ==> CEq ==> iff
  as ceq_cle_mor. Admitted.
forall x x',
  x == x' ->
  forall y y',
  y == y' ->
  (x < y) <-> (x' < y')
Add Morphism CLe with signature CEq ==> CEq ==> iff
  as ceq_cle_mor. Admitted.

(* CNat Test Theorem *)
Example cle_neutral_test: forall x:CNat, O«x -> O«x±O.
Proof.
  intros x CH.
  rewrite cnat_add_neutral.
  apply CH.
Qed.