End ProtocolWithInvariant.
Section InductiveInvConj.
Variable p : protocol.
Definition s_inv_conj (I1 I2 : dstatelet -> pred nid -> Prop)
(st : send_trans (coh p)) :=
S_inv (fun d n => I1 d n /\ I2 d n) st.

(* Specifications: *)
Lemma s_inv_conjC I1 I2 st :
s_inv_conj I1 I2 st <-> s_inv_conj I2 I1 st.
Lemma s_inv_conjA I1 I2 I3 st :
s_inv_conj I1 (fun d n => I2 d n /\ I3 d n) st <->
s_inv_conj (fun d n => I1 d n /\ I2 d n) I3 st.