Je travaille avec la bibliothèque math-classes dans Coq. Cette bibliothèque utilise intelligemment les classes de type pour surcharger les notations, comme ceci.
(* From math-classes *)
Class Equiv A := equiv : relation A.
Infix "=" := equiv : type_scope.
(* Mon code *)
Definition MyDataType : Type := ...
Definition MyEquality (x y : MyDataType) : Prop := ...
Instance MyEq_equiv : Equiv MyDataType := MyEquality.
Je peux définir de telles instances pour de nombreux types de données différents, et x = y
sera compris comme l'égalité que j'ai enregistrée pour le type de x
et y
grâce au mécanisme de résolution d'instance.
Cependant, manipuler ces égalités dans les preuves est un peu ennuyeux car je dois unfold
plusieurs définitions successives :
Lemma MyEquality_refl : forall x : MyDataType, x = x.
Proof
intro.
unfold equiv, MyEq_equiv, MyEquality.
...
Qed.
Y a-t-il un moyen plus efficace de faire cet unfold
?