Set Bullet Behavior "Strict Subproofs".
Section atomics.
Context {CS : compspecs}.
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).

(* Specifications: *)
Axiom protocol_piece_nonexpansive : forall sh l s ord Tread1 Tfull1 Tread2 Tfull2,
(ALL s : state, ALL v : Z, (Tread1 s v <=> Tread2 s v) && (Tfull1 s v <=> Tfull2 s v)) |--
protocol_piece sh l s ord (Tread1, Tfull1) <=> protocol_piece sh l s ord (Tread2, Tfull2).
Lemma protocol_piece_super_non_expansive : forall n sh l s ord Tread Tfull,
approx n (protocol_piece sh l s ord (Tread, Tfull)) =
approx n (protocol_piece sh l s ord (fun s v => approx n (Tread s v), fun s v => approx n (Tfull s v))).