Definition splittable {A} {JA: Join A}{PA: Perm_alg A}{agA: ageable A}{AgeA: Age_alg A} (Q: Share.t -> pred A) := 
  forall (sh1 sh2 sh3: Share.t) (rsh1: readable_share sh1) (rsh2: readable_share sh2),
    join sh1 sh2 sh3 ->
    Q sh1 * Q sh2 = Q sh3.

(* Specifications: *)
Lemma not_readable_share_retainer_part_eq: forall sh, ~ readable_share sh -> retainer_part sh = sh.
Lemma slice_resource_resource_share: forall r sh sh', resource_share r = Some sh -> join_sub sh' sh -> resource_share (slice_resource sh' r) = Some sh'.
Lemma slice_resource_nonlock: forall r sh sh', resource_share r = Some sh -> join_sub sh' sh -> nonlock r -> nonlock (slice_resource sh' r).
Lemma NO_ext: forall sh1 sh2 rsh1 rsh2, sh1=sh2 -> NO sh1 rsh1 = NO sh2 rsh2.
Lemma join_sub_is_slice_resource: forall r r' sh', join_sub r' r -> resource_share r' = Some sh' -> r' = slice_resource sh' r.
Lemma slice_resource_share_join: forall sh1 sh2 sh r, join sh1 sh2 sh -> resource_share r = Some sh -> join (slice_resource sh1 r) (slice_resource sh2 r) r.