CoInductive lb_step_execution (step : lb_step_relation) : infseq event -> Prop :=
    Cons_lb_step_exec : forall (e e' : event) (tr : list trace) (s : infseq event),
      step (evt_a e) (evt_l e) (evt_a e') tr ->
      evt_trace e' = evt_trace e ++ tr ->
      lb_step_execution step (Cons e' s) ->
      lb_step_execution step (Cons e (Cons e' s)).CoInductive lb_step_execution (step : lb_step_relation) : infseq event -> Prop :=
    Cons_lb_step_exec : forall (e e' : event) (tr : list trace) (s : infseq event),
      step (evt_a e) (evt_l e) (evt_a e') tr ->
      evt_trace e' = evt_trace e ++ tr ->
      lb_step_execution step (Cons e' s) ->
      lb_step_execution step (Cons e (Cons e' s)).

(* Specifications: *)
Lemma lb_step_execution_invar : forall step x s, lb_step_execution step (Cons x s) -> lb_step_execution step s.
Lemma lb_step_execution_extensional : forall step, extensional (lb_step_execution step).