Definition same_except_cur (m m' : Mem.mem) :=
  Mem.mem_contents m = Mem.mem_contents m' /\
  max_access_at m = max_access_at m' /\
  Mem.nextblock m = Mem.nextblock m'.

(* Specifications: *)
Lemma mem_cohere_same_except_cur m m' phi : same_except_cur m m' -> mem_cohere' m phi -> mem_cohere' m' phi.
Lemma mem_compatible_with_same_except_cur (tp : jstate ge) m m' phi : same_except_cur m m' -> mem_compatible_with tp m phi -> mem_compatible_with tp m' phi.
Lemma same_perm_spec m1 m2 : Mem.perm m1 = Mem.perm m2 <-> (forall k x, access_at m1 x k = access_at m2 x k).
Lemma PTree_xmap_ext (A B : Type) (f f' : positive -> A -> B) t : (forall a, f a = f' a) -> PTree.xmap f t = PTree.xmap f' t.
Lemma ZIndexed_index_surj p : { z : Z | ZIndexed.index z = p }.
Lemma self_join_pshare_false (psh psh' : pshare) : ~sepalg.join psh psh psh'.
Lemma approx_eq_app_pred {P1 P2 : mpred} x n : level x < n -> @approx n P1 = approx n P2 -> app_pred P1 x -> app_pred P2 x.
Lemma exclusive_approx R n : exclusive_mpred R -> exclusive_mpred (approx n R).
Lemma exclusive_joins_false R phi1 phi2 : exclusive_mpred R -> app_pred R phi1 -> app_pred R phi2 -> joins phi1 phi2 -> False.
Lemma weak_exclusive_joins_false R phi phi1 phi2 : level phi = level phi1 -> app_pred (weak_exclusive_mpred R) phi -> app_pred R phi1 -> app_pred R phi2 -> joins phi1 phi2 -> False.
Lemma predat_inj {phi loc R1 R2} : predat phi loc R1 -> predat phi loc R2 -> R1 = R2.
Lemma predat2 {phi loc R sh } : LKspec_ext R sh loc phi -> predat phi loc (approx (level phi) R).
Lemma predat3 {phi loc R sh} : LK_at R sh loc phi -> predat phi loc (approx (level phi) R).
Lemma predat4 {phi b ofs sh R} : app_pred (lock_inv sh (Vptr b ofs) R) phi -> predat phi (b, Ptrofs.unsigned ofs) (approx (level phi) R).
Lemma predat6 {R loc phi} : lkat R loc phi -> predat phi loc (approx (level phi) R).
Lemma predat_join_sub {phi1 phi2 loc R} : join_sub phi1 phi2 -> predat phi1 loc R -> predat phi2 loc R.
Lemma lkat_hered R loc : hereditary age (lkat R loc).