Section protocols.
Context {state : Type}.
Parameter protocol_piece : share -> val -> state -> (state -> state -> Prop) ->
((state -> Z -> mpred) * (state -> Z -> mpred)) -> mpred.
Definition protocol_R := protocol_piece Share.bot.
Definition protocol_W := protocol_piece gsh2.
Context (ord : state -> state -> Prop) `{RelationClasses.PreOrder _ ord}
(Tread Tfull : state -> Z -> mpred).
Notation T := (Tread, Tfull).

Axiom protocol_piece_share_join : forall sh1 sh2 sh l s1 s2 (Hsh : sepalg.join sh1 sh2 sh)
(Hsh1 : sh1 <> Share.bot) (Hsh2 : sh2 <> Share.bot),
protocol_piece sh1 l s1 ord T * protocol_piece sh2 l s2 ord T =
!!(s1 = s2) && protocol_piece sh l s1 ord T.