Notation T := (Tread, Tfull).

(* Specifications: *)
Axiom make_protocol_R : forall sh l s,
protocol_piece sh l s ord T |-- |==> protocol_piece sh l s ord T * protocol_R l s ord T.
Corollary protocol_R_duplicable : forall l s, duplicable (protocol_R l s ord T).
Corollary protocol_W_R : forall l s,
protocol_W l s ord T |-- |==> protocol_W l s ord T * protocol_R l s ord T.
Axiom protocol_R_absorb : forall sh l s s', sh <> Share.bot ->
protocol_piece sh l s ord T * protocol_R l s' ord T |-- |==> !!(ord s' s) && protocol_piece sh l s ord T.
Corollary protocol_R_W : forall l s s',
protocol_W l s ord T * protocol_R l s' ord T |-- |==> !!(ord s' s) && protocol_W l s ord T.
Axiom protocol_R_join' : forall l s1 s2,
protocol_R l s1 ord T * protocol_R l s2 ord T |--
EX s : _, !!(ord s1 s /\ ord s2 s) && protocol_R l s ord T.
Axiom make_protocol : forall {P : protocol Tread Tfull} l v s, repable_signed v ->
data_at Tsh tint (vint v) l * |> Tfull s v |-- |==> protocol_W l s ord T.
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.
Axiom protocol_later : forall sh l s,
protocol_piece sh l s ord (|>Tread, |>Tfull) |-- |>protocol_piece sh l s ord T.
Axiom protocol_delay : forall sh l s,
protocol_piece sh l s ord T |-- protocol_piece sh l s ord (|>Tread, |>Tfull).