Proof using.
intros.
unfold execute_log.
change (log_to_IR env_o l) with (log_to_IR env_o ([] ++ l)).
eapply exported_execute_log'; eauto.
Qed.
Definition input_correct (tr : list (name * (raft_input + list raft_output))) : Prop :=
(forall client id i i' h h',
In (h, inl (ClientRequest client id i)) tr ->
In (h', inl (ClientRequest client id i')) tr ->
i = i').

Lemma in_input_trace_get_input :
forall tr e,
input_correct tr ->
in_input_trace (eClient e) (eId e) (eInput e) tr ->
get_input tr (eClient e, eId e) = Some (eInput e).