Local Notation key := D.t.Definition eqk {elt} : relation (key*elt) := D.eq @@1.Definition eqke {elt} : relation (key*elt) := D.eq * Logic.eq.(** eqk, eqke are equalities *)

#[global]
 Instance eqk_equiv {elt} : Equivalence (@eqk elt) := _.#[global]
 Instance eqke_equiv {elt} : Equivalence (@eqke elt) := _.(** eqke is stricter than eqk *)

#[global]
 Instance eqke_eqk {elt} : subrelation (@eqke elt) (@eqk elt).

(* Specifications: *)
Lemma eqke_def {elt} k k' (e e':elt) : eqke (k,e) (k',e') = (D.eq k k' /\ e = e').
Lemma eqke_def' {elt} (p q:key*elt) : eqke p q = (D.eq (fst p) (fst q) /\ snd p = snd q).
Lemma eqke_1 {elt} k k' (e e':elt) : eqke (k,e) (k',e') -> D.eq k k'.
Lemma eqke_2 {elt} k k' (e e':elt) : eqke (k,e) (k',e') -> e=e'.
Lemma eqk_def {elt} k k' (e e':elt) : eqk (k,e) (k',e') = D.eq k k'.
Lemma eqk_def' {elt} (p q:key*elt) : eqk p q = D.eq (fst p) (fst q).
Lemma eqk_1 {elt} k k' (e e':elt) : eqk (k,e) (k',e') -> D.eq k k'.
Lemma InA_eqke_eqk {elt} p (m:list (key*elt)) : InA eqke p m -> InA eqk p m.
Lemma InA_eqk_eqke {elt} p (m:list (key*elt)) : InA eqk p m -> exists q, eqk p q /\ InA eqke q m.
Lemma InA_eqk {elt} p q (m:list (key*elt)) : eqk p q -> InA eqk p m -> InA eqk q m.