Definition list_assoc_inv :=
  (fix list_assoc_inv_rec (A:Type) (B:Set)
                          (eq_dec:forall e1 e2:B, {e1 = e2} + {e1 <> e2})
                          (lst : list (prodT A B)) {struct lst} : B -> A -> A :=
  fun (key:B) (default:A) =>
    match lst with
      | nil => default
      | cons (pairT v e) l =>
        match eq_dec e key with
          | left _ => v
          | right _ => list_assoc_inv_rec A B eq_dec l key default
        end
    end).

(* Specifications: *)
Lemma positive_dec : forall (p1 p2:positive), {p1=p2}+{~p1=p2}.
Lemma positive_dec : forall (p1 p2:positive), {p1=p2}+{~p1=p2}.