Definition resource_share (r: resource) : option share :=
 match r with
 | YES sh _ _ _ => Some sh
 | NO sh _ => Some sh
 | PURE _ _ => None
 end.Definition nonlock (r: resource) : Prop :=
 match r with
 | YES _ _ k _ => isVAL k \/ isFUN k
 | NO _ _ => True
 | PURE _ _ => False
 end.

(* Specifications: *)
Lemma resource_share_join_exists: forall r1 r2 r sh1 sh2, resource_share r1 = Some sh1 -> resource_share r2 = Some sh2 -> join r1 r2 r -> exists sh, join sh1 sh2 sh /\ resource_share r = Some sh.
Lemma resource_share_join: forall r1 r2 r sh1 sh2 sh, resource_share r1 = Some sh1 -> resource_share r2 = Some sh2 -> join r1 r2 r -> join sh1 sh2 sh -> resource_share r = Some sh.
Lemma resource_share_joins: forall r1 r2 sh1 sh2, resource_share r1 = Some sh1 -> resource_share r2 = Some sh2 -> joins r1 r2 -> joins sh1 sh2.
Lemma nonlock_join: forall r1 r2 r, nonlock r1 -> nonlock r2 -> join r1 r2 r -> nonlock r.