Definition sup_prog es := @Prog _ _ _ (sup_set es) (or_introl (erefl _)).Definition sup es := DTbin_make (@sup_spec es).Definition stPosetMixin := PosetMixin (@leq_refl this W A s) 
                                      (@leq_asym this W A s) (@leq_trans this W A s).Canonical stPoset := Eval hnf in Poset (@DTbin this W A s) stPosetMixin.Definition stLatticeMixin := LatticeMixin (@sup_supB this W A s) (@sup_supL this W A s).Canonical stLattice := Eval hnf in Lattice (@DTbin this W A s) stLatticeMixin.Notation tp := (forall x, DTbin this W (s x)).Definition ffix : tp := tarski_lfp f'.(* Trees inhabiting a return statement *)
Definition ret_set t := t = Unfinished \/ t = @Ret this W A x.(* It naturally has the unfinished statement *)
Definition ret_prog := @Prog _ _ _ ret_set (or_introl (erefl _)).Definition ret_s : spec A := 
  (fun i => True, fun i y m => network_rely W this i m /\ y = x).(* Peiring Return with its canontics specification *)
Definition ret := with_spec (DTbin_make ret_has_spec).Definition act_set t := t = Unfinished \/ t = @Act this W A a.Definition act_prog := @Prog _ _ _ act_set (or_introl (erefl _)).Definition act := with_spec (DTbin_make act_has_spec).Definition bnd_prog := @Prog _ _ _ bnd_set (or_introl (erefl _)).(* First command spec *)
Notation s1 := (spec_of e1).(* Continuation spec *)
Notation s2 := (fun x => spec_of (e2 x)).Definition bind := with_spec (DTbin_make bind_has_spec).Notation W2 := (inj_ext w).Notation s := (spec_of e).Definition inject_prog := @Prog _ _ _ inject_set (or_introl (erefl _)).Definition inject := with_spec (DTbin_make inject_has_spec).(* Decompose the initial protocol *)
Notation l := (plab pr).Notation coh := (coh pr).Notation V := (mkWorld pr).Notation W := (mkWorld (ProtocolWithIndInv ii)).Definition with_inv_prog := @Prog _ _ _ with_inv_set (or_introl (erefl _)).Notation getS i := (getStatelet i l).Definition with_inv := with_spec (DTbin_make with_inv_has_spec).

Lemma conseq_refl (W : world) A this (e : DT this W A) : conseq e (spec_of e).