Proof using.
induction es; intros; simpl in *; intuition.
- find_inversion. destruct st'; repeat eexists; eauto.
- unfold cacheApplyEntry, applyEntry in *.
repeat break_match; repeat find_inversion;
find_apply_hyp_hyp; break_exists; repeat eexists; eauto.
Qed.

Lemma applyEntries_spec_ind :
forall {es h st os st'},
applyEntries h st es = (os, st') ->
forall P : raft_data -> Prop,
(forall d cc,
P {[ {[ st with stateMachine := d ]} with clientCache := cc ]}) ->
P st'.