(* Peiring Return with its canontics specification *)
End Return.
Section Act.
Variable this : nid.
Variable W : world.
Variables (A : Type)  (x : A).
Variable a : action W A this.
Definition act_set t := t = Unfinished \/ t = @Act this W A a.
Definition act_prog := @Prog _ _ _ act_set (or_introl (erefl _)).
(* Relaxing the precondition with respect to the rely, via action's safety *)
Definition act_s : spec A :=
(fun i => forall j, network_rely W this i j -> a_safe a j,
fun i y m => exists j k,
[/\ network_rely W this i j,
exists (S: a_safe a j), a_step S k y & network_rely W this k m]).

(* Specifications: *)
Lemma act_has_spec : act_prog \In has_spec this W act_s.
Definition act := with_spec (DTbin_make act_has_spec).