Local Arguments getThreadR {_} {_} {_} _ _ _.
Local Arguments getThreadC {_} {_} {_} _ _ _.
Local Arguments personal_mem : clear implicits.
Local Arguments updThread {_} {_} {_} _ _ _ _ _.
Local Arguments updThreadR {_} {_} {_} _ _ _ _.
Local Arguments updThreadC {_} {_} {_} _ _ _ _.
Local Arguments juicyRestrict : clear implicits.
Set Bullet Behavior "Strict Subproofs".
Open Scope string_scope.

(* Specifications: *)
Lemma resource_decay_joinlist b phi1 phi1' l Phi :
rmap_bound b Phi ->
resource_decay b phi1 phi1' ->
ghost_of phi1' = ghost_fmap (approx (level phi1')) (approx (level phi1')) (ghost_of phi1) ->
joinlist (phi1 :: l) Phi ->
exists Phi',
joinlist (phi1' :: (map (age_to (level phi1')) l)) Phi' /\
resource_decay b Phi Phi' /\ ghost_of Phi' = own.ghost_approx Phi' (ghost_of Phi).
Lemma resource_decay_join_all ge {tp : jstate ge} {m Phi} c' {phi' i} {cnti : containsThread tp i}:
rmap_bound (Mem.nextblock m) Phi ->
resource_decay (Mem.nextblock m) (getThreadR i tp cnti) phi' /\
level (getThreadR i tp cnti) = S (level phi') /\
ghost_of phi' = ghost_fmap (approx (level phi')) (approx (level phi')) (ghost_of (getThreadR i tp cnti)) ->
join_all tp Phi ->
exists Phi',
join_all (updThread i (age_tp_to (level phi') tp) (cnt_age' cnti) c' phi') Phi' /\
resource_decay (Mem.nextblock m) Phi Phi' /\
ghost_of Phi' = own.ghost_approx Phi' (ghost_of Phi) /\
level Phi = S (level Phi').
Lemma resource_decay_join_identity b phi phi' e e' :
resource_decay b phi phi' ->
ghost_of phi' = ghost_fmap (approx (level phi')) (approx (level phi')) (ghost_of phi) ->
sepalg.joins phi e ->
sepalg.joins phi' e' ->
identity e ->
identity e' ->
e' = age_to (level phi') e.
Lemma same_except_cur_jm_ ge tp m phi i cnti compat :
same_except_cur m (m_dry (@jm_ ge tp m phi i cnti compat)).
Lemma resource_decay_lockSet_in_juicyLocks b phi phi' lset :
resource_decay b phi phi' ->
lockSet_block_bound lset b ->
lockSet_in_juicyLocks lset phi ->
lockSet_in_juicyLocks lset phi'.