Definition juicy_mem_resource: forall jm m', resource_at m' = resource_at (m_phi jm) ->
  {jm' | m_phi jm' = m' /\ m_dry jm' = m_dry jm}.

(* Specifications: *)
Lemma perm_of_empty_inv {s} : perm_of_sh s = None -> s = Share.bot.
Lemma writable_join_sub: forall loc phi1 phi2, join_sub phi1 phi2 -> writable loc phi1 -> writable loc phi2.
Lemma age1_joinx {A} {JA: Join A}{PA: Perm_alg A}{agA: ageable A}{AgeA: Age_alg A} : forall phi1 phi2 phi3 phi1' phi2' phi3', age phi1 phi1' -> age phi2 phi2' -> age phi3 phi3' -> join phi1 phi2 phi3 -> join phi1' phi2' phi3'.
Lemma constructive_age1_join {A} {JA: Join A}{PA: Perm_alg A}{agA: ageable A}{AgeA: Age_alg A} : forall x y z x' : A, join x y z -> age x x' -> { yz' : A*A | join x' (fst yz') (snd yz') /\ age y (fst yz') /\ age z (snd yz')}.
Lemma age1_constructive_joins_eq : forall {A} {JA: Join A}{PA: Perm_alg A}{agA: ageable A}{AgeA: Age_alg A} {phi1 phi2}, constructive_joins phi1 phi2 -> forall {phi1'}, age1 phi1 = Some phi1' -> forall {phi2'}, age1 phi2 = Some phi2' -> constructive_joins phi1' phi2'.