Section LabeledStepExecution.
Variable A : Type.
Variable L : Type.
Variable trace : Type.
Definition lb_step_relation := A -> L -> A -> list trace -> Prop.
Definition lb_step_ex (step : lb_step_relation) (l : L) (a : A) : Prop :=
exists a' tr, step a l a' tr.
Record event := { evt_a : A ; evt_l : L ; evt_trace : list trace }.
Definition enabled (step : lb_step_relation) (l : L) (e : event) : Prop :=
lb_step_ex step l (evt_a e).
Definition occurred (l : L) (e : event) : Prop := l = evt_l e.
Definition inf_enabled (step : lb_step_relation) (l : L) (s : infseq event) : Prop :=
inf_often (now (enabled step l)) s.
Definition cont_enabled (step : lb_step_relation) (l : L) (s : infseq event) : Prop :=
continuously (now (enabled step l)) s.
Definition inf_occurred (l : L) (s : infseq event) : Prop :=
inf_often (now (occurred l)) s.
Definition strong_fairness (step : lb_step_relation) (silent : L) (s : infseq event) : Prop :=
forall l : L, l <> silent -> inf_enabled step l s -> inf_occurred l s.
Definition weak_fairness (step : lb_step_relation) (silent : L) (s : infseq event) : Prop :=
forall l : L, l <> silent -> cont_enabled step l s -> inf_occurred l s.

Lemma strong_fairness_invar :
forall step e silent s, strong_fairness step silent (Cons e s) -> strong_fairness step silent s.