Section Logs.
(* A log is a map from nat, and a finite log has a latest element. *)
Context {B : Type}.
Local Close Scope Z.
Definition log_latest s (v1 : nat) (v2 : B) := s v1 = Some v2 /\ forall v', v1 < v' -> s v' = None.

Lemma log_latest_upd_list : forall l (m : nat -> option B) k v k' v' (Hm : log_latest m k v)
(Hlast : last l (k, v) = (k', v')) (Hlt : k <= k') (Hordered : Forall (fun '(k, v) => k <= k') l),
log_latest (map_upd_list m l) k' v'.