diff options
author | 2009-04-27 16:50:42 +0000 | |
---|---|---|
committer | 2009-04-27 16:50:42 +0000 | |
commit | e9667ab2ee2b05e54030345668c13fa363a399d9 (patch) | |
tree | d157af03964c8eff15b28fb7a587fc9c8d420d4b /theories/Classes/RelationClasses.v | |
parent | 94affd965c1554d2ad10654e9832fcdb2a024daf (diff) |
- Implementation of a new typeclasses eauto procedure based on success
and failure continuations, allowing to do safe cuts correctly.
- Fix bug #2097 by suppressing useless nf_evars calls.
- Improve the proof search strategy used by rewrite for subrelations and
fix some hints.
Up to 20% speed improvement in setoid-intensive files.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@12110 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'theories/Classes/RelationClasses.v')
-rw-r--r-- | theories/Classes/RelationClasses.v | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/theories/Classes/RelationClasses.v b/theories/Classes/RelationClasses.v index 88fba1a30..681bd90a9 100644 --- a/theories/Classes/RelationClasses.v +++ b/theories/Classes/RelationClasses.v @@ -43,7 +43,9 @@ Class Reflexive {A} (R : relation A) := reflexivity : forall x, R x x. Class Irreflexive {A} (R : relation A) := - irreflexivity :> Reflexive (complement R). + irreflexivity : Reflexive (complement R). + +Hint Extern 1 (Reflexive (complement _)) => eapply @irreflexivity : typeclasses_instances. Class Symmetric {A} (R : relation A) := symmetry : forall x y, R x y -> R y x. @@ -70,8 +72,10 @@ Hint Extern 4 => solve_relation : relations. (** We can already dualize all these properties. *) -Program Instance flip_Reflexive `(Reflexive A R) : Reflexive (flip R) := - reflexivity (R:=R). +Program Lemma flip_Reflexive `(Reflexive A R) : Reflexive (flip R). +Proof. tauto. Qed. + +Hint Extern 3 (Reflexive (flip _)) => apply flip_Reflexive : typeclass_instances. Program Instance flip_Irreflexive `(Irreflexive A R) : Irreflexive (flip R) := irreflexivity (R:=R). |