Proof using.
red. unfold logs_leaderLogs_inductive. intros.
match goal with
| H : nwState ?net ?h = (?gd, ?d) |- _ =>
replace gd with (fst (nwState net h)) in * by (rewrite H; reflexivity);
replace d with (snd (nwState net h)) in * by (rewrite H; reflexivity);
clear H
end.
intuition.
- subst. unfold logs_leaderLogs in *. intros.
repeat find_reverse_higher_order_rewrite.
find_higher_order_rewrite.
update_destruct; subst; rewrite_update; unfold reboot in *; simpl in *;
find_apply_hyp_hyp; break_exists_exists; intuition;
find_higher_order_rewrite; simpl in *; auto;
update_destruct; subst; rewrite_update; simpl in *; auto.
- unfold logs_leaderLogs_nw in *. intros.
find_reverse_rewrite.
eapply_prop_hyp pBody pBody; eauto.
break_exists_exists; intuition; subst;
repeat find_reverse_higher_order_rewrite; auto;
repeat find_higher_order_rewrite; simpl in *; auto;
update_destruct; subst; rewrite_update; simpl in *; auto.
Qed.

Theorem logs_leaderLogs_inductive_invariant :
forall net,
refined_raft_intermediate_reachable net ->
logs_leaderLogs_inductive net.