(* TODO: This is obviously true. Ask Xavior to remove the definition list_norepet.*)
Axiom list_norepet_NoDup: forall {A: Type} (l: list A), list_norepet l <-> NoDup l.

(* Specifications: *)
Lemma PTree_In_fst_elements {A: Type}: forall (T: PTree.t A) i, In i (map fst (PTree.elements T)) <-> exists a, PTree.get i T = Some a.
Lemma PTree_gs {A: Type}: forall (T: PTree.t A) i j x, (exists a, PTree.get i T= Some a) -> exists a, PTree.get i (PTree.set j x T) = Some a.
Lemma PTree_gs_equiv {A: Type}: forall (T: PTree.t A) i j x, (exists a, PTree.get i T= Some a) \/ i = j <-> exists a, PTree.get i (PTree.set j x T) = Some a.
Lemma PTree_set_In_fst_elements {A: Type}: forall (T: PTree.t A) i i' a', In i (map fst (PTree.elements T)) -> In i (map fst (PTree.elements (PTree.set i' a' T))).