(* Definition ii_conj (I1 I2 : dstatelet -> pred nid -> Prop) *)
(*            (ii1 : InductiveInv p I1) *)
(*            (ii2 : InductiveInv p I2) : *)
(*   InductiveInv p (fun d n => I1 d n /\ I2 d n). *)
(* Proof. *)
(* case: ii1 ii2=>sts1 rts1 Es1 Er1 [sts2] rts2 Es2 Er2. *)
(* Qed. *)
End InductiveInvConj.
End ProtocolWithInvariant.
Module PWIExports.
Section PWIExports.
Definition st_helper := st_helper.
Definition cohSt := cohSt.
Definition S_inv := ProtocolWithInvariant.S_inv.
Definition R_inv := ProtocolWithInvariant.R_inv.
Definition SendInv := SendInv.
Definition SI := SI.
Definition ReceiveInv := ReceiveInv.
Definition RI := RI.
Definition InductiveInv := InductiveInv.

(* Specifications: *)
Lemma with_inv_coh pr I (ii : InductiveInv pr I) s:
s \In Coh (mkWorld (ProtocolWithIndInv ii)) ->
s \In Coh (mkWorld pr).
Lemma with_inv_nodes pr I (ii : InductiveInv pr I) l :
nodes (getProtocol (mkWorld (ProtocolWithIndInv ii)) l) =
nodes (getProtocol (mkWorld pr) l).
Lemma with_inv_labE pr I (ii : InductiveInv pr I):
plab (ProtocolWithIndInv ii) = plab pr.
Lemma with_inv_step' pr I (ii : InductiveInv pr I) z s1 s2:
network_step (mkWorld (ProtocolWithIndInv ii)) z s1 s2 ->
network_step (mkWorld pr) z s1 s2.
Lemma with_inv_rely' pr I (ii : InductiveInv pr I) z s1 s2:
network_rely (mkWorld (ProtocolWithIndInv ii)) z s1 s2 ->
network_rely (mkWorld pr) z s1 s2.