Instance EqDec_AMap_key : EqDec AMap.key.

(* Specifications: *)
Lemma AMap_find_add {A} m x (y : A) x' : AMap.find x' (AMap.add x y m) = if eq_dec x x' then Some y else AMap.find x' m.
Lemma AMap_find_remove {A} (m : AMap.t A) x x' : AMap.find x' (AMap.remove x m) = if eq_dec x x' then None else AMap.find x' m.
Lemma AMap_Raw_map_app {A} (f : A -> A) l1 l2 : AMap.Raw.map (option_map f) (app l1 l2) = app (AMap.Raw.map (option_map f) l1) (AMap.Raw.map (option_map f) l2).
Lemma AMap_Raw_map_rev {A} (f : A -> A) l : AMap.Raw.map (option_map f) (rev l) = rev (AMap.Raw.map (option_map f) l).
Lemma A2PMap_option_map {A} (m : AMap.t (option A)) (f : A -> A) : A2PMap (AMap.map (option_map f) m) = A2PMap m.
Lemma AMap_map_add {A B} (f : A -> B) m x y : AMap.Equal (AMap.map f (AMap.add x y m)) (AMap.add x (f y) (AMap.map f m)).
Lemma AMap_Raw_add_fold_left A (EQ : A -> A -> Prop) B f k (x : B) l (e : A) : (forall e, EQ e e) -> (forall e e', EQ e e' -> EQ e' e) -> (forall e e' e'', EQ e e' -> EQ e' e'' -> EQ e e'') -> (forall a e e', EQ e e' -> EQ (f e a) (f e' a)) -> (forall a b e, fst a = fst b -> EQ (f (f e a) b) (f e a)) -> (forall a b e, EQ (f (f e a) b) (f (f e b) a)) -> EQ (fold_left f (AMap.Raw.add k x l) e) (fold_left f ((k, x) :: l) e).
Lemma AMap_Raw_add_fold_left_permut A (EQ : A -> A -> Prop) B f (l l' : list B) (e : A) : (forall e, EQ e e) -> (forall e e', EQ e e' -> EQ e' e) -> (forall e e' e'', EQ e e' -> EQ e' e'' -> EQ e e'') -> (forall a e e', EQ e e' -> EQ (f e a) (f e' a)) -> (forall a b e, EQ (f (f e a) b) (f (f e b) a)) -> Permutation l l' -> EQ (fold_left f l e) (fold_left f l' e).
Lemma AMap_Raw_add_fold_left_right A (EQ : A -> A -> Prop) B f (l : list B) (e : A) : (forall e, EQ e e) -> (forall e e', EQ e e' -> EQ e' e) -> (forall e e' e'', EQ e e' -> EQ e' e'' -> EQ e e'') -> (forall a e e', EQ e e' -> EQ (f e a) (f e' a)) -> (forall a b e, EQ (f (f e a) b) (f (f e b) a)) -> EQ (fold_left f l e) (fold_right (fun x y => f y x) e l).
Lemma setPerm_b_comm o b ofs1 ofs2 t : setPerm o b ofs1 (setPerm o b ofs2 t) = setPerm o b ofs2 (setPerm o b ofs1 t).
Lemma setPerm_b_idem o b ofs t : setPerm o b ofs (setPerm o b ofs t) = setPerm o b ofs t.
Lemma PMap_eq_refl {A} : reflexive _ (@PMap_eq A).
Lemma PMap_eq_sym {A} : symmetric _ (@PMap_eq A).
Lemma PMap_eq_trans {A} : transitive _ (@PMap_eq A).