Axiom ghost_precise : forall sh {t} p, precise (EX f : share * hist (reptype t), ghost sh f p).

(* Specifications: *)
Lemma tqueue_inj : forall r (buf1 buf2 : list val) len1 len2 head1 head2 tail1 tail2 (addc1 addc2 remc1 remc2 : val) p r1 r2 (Hp1 : predicates_hered.app_pred(A := compcert_rmaps.R.rmap) (data_at Tsh tqueue (buf1, (vint len1, (vint head1, (vint tail1, (addc1, remc1))))) p) r1) (Hp2 : predicates_hered.app_pred(A := compcert_rmaps.R.rmap) (data_at Tsh tqueue (buf2, (vint len2, (vint head2, (vint tail2, (addc2, remc2))))) p) r2) (Hr1 : sepalg.join_sub r1 r) (Hr2 : sepalg.join_sub r2 r) (Hbuf1 : Forall (fun v => v <> Vundef) buf1) (Hl1 : Zlength buf1 = MAX) (Hbuf2 : Forall (fun v => v <> Vundef) buf2) (Hl2 : Zlength buf2 = MAX) (Haddc1 : addc1 <> Vundef) (Haddc2 : addc2 <> Vundef) (Hremc1 : remc1 <> Vundef) (Hremc2 : remc2 <> Vundef), r1 = r2 /\ buf1 = buf2 /\ Int.repr len1 = Int.repr len2 /\ Int.repr head1 = Int.repr head2 /\ Int.repr tail1 = Int.repr tail2 /\ addc1 = addc2 /\ remc1 = remc2.
Lemma q_inv_precise : forall t P p lock gsh2, precise (q_lock_pred t P p lock gsh2).
Lemma q_inv_positive : forall t P p lock gsh2, positive_mpred (q_lock_pred t P p lock gsh2).
Lemma lqueue_precise : forall lsh t P p lock gsh1 gsh2, precise (EX h : hist (reptype t), lqueue lsh t P p lock gsh1 gsh2 h).
Lemma list_incl_refl : forall {A} (l : list A), list_incl l l.
Lemma consistent_inj : forall {t} (h : hist t) a b b' (Hb : consistent h a b) (Hb' : consistent h a b'), b = b'.
Lemma consistent_trans : forall {t} (h1 h2 : hist t) a b c, consistent h1 a b -> consistent h2 b c -> consistent (h1 ++ h2) a c.
Lemma list_incl_app2 : forall {A} (l l1 l2 : list A), list_incl l l2 -> list_incl l (l1 ++ l2).
Lemma list_incl_app : forall {A} (l1 l2 l1' l2' : list A), list_incl l1 l2 -> list_incl l1' l2' -> list_incl (l1 ++ l1') (l2 ++ l2').