Notation epoch := nat (only parsing).Record server_state :=
  ServerState {
      outstanding : seq nid;
      current_epoch : epoch;
      current_holder : option nid
    }.Record server_state :=
  ServerState {
      outstanding : seq nid;
      current_epoch : epoch;
      current_holder : option nid
    }.Record server_state :=
  ServerState {
      outstanding : seq nid;
      current_epoch : epoch;
      current_holder : option nid
    }.Record server_state :=
  ServerState {
      outstanding : seq nid;
      current_epoch : epoch;
      current_holder : option nid
    }.Record server_state :=
  ServerState {
      outstanding : seq nid;
      current_epoch : epoch;
      current_holder : option nid
    }.Inductive client_state :=
| NotHeld
| Held of epoch.Inductive client_state :=
| NotHeld
| Held of epoch.Inductive client_state :=
| NotHeld
| Held of epoch.Definition acquire_tag := 0.Definition grant_tag := 1.Definition release_tag := 2.Definition st := ptr_nat 1.

(* Specifications: *)
Lemma l1 d: lock_coh d -> valid (dstate d).
Lemma l2 d: lock_coh d -> valid (dsoup d).
Lemma l3 d: lock_coh d -> dom (dstate d) =i nodes.