Ltac get_invariant_pre inv :=
    match goal with
      | H : raft_intermediate_reachable _ |- _=>
        match (type of H) with
          | context [mkNetwork] =>
            fail 2
        end || copy_apply inv H
    end.Ltac get_invariant_post inv :=
    match goal with
      | H : raft_intermediate_reachable _ |- _=>
        match (type of H) with
          | context [mkNetwork] =>
            copy_apply inv H            
        end
    end.Definition clientCache_to_ks (c : list (clientId * (nat * output))) :=
    map (fun e => (fst e, fst (snd e))) c.

Lemma applyEntries_app : forall l h st os d l', applyEntries h st (l ++ l') = (os, d) -> exists os' os'' d', applyEntries h st l = (os', d') /\ applyEntries h d' l' = (os'', d) /\ os = os' ++ os''.