(** Concurrent instructions are built on top of those [C'] *)

Inductive C : Set :=
  | acquire : nat -> C -> C
  | release : nat -> C -> C
  | normal : C' -> C.(** Concurrent instructions are built on top of those [C'] *)

Inductive C : Set :=
  | acquire : nat -> C -> C
  | release : nat -> C -> C
  | normal : C' -> C.(** Concurrent instructions are built on top of those [C'] *)

Inductive C : Set :=
  | acquire : nat -> C -> C
  | release : nat -> C -> C
  | normal : C' -> C.(** Concurrent instructions are built on top of those [C'] *)

Inductive C : Set :=
  | acquire : nat -> C -> C
  | release : nat -> C -> C
  | normal : C' -> C.Axiom selfjoins_jointo : forall {A} (maps : A -> map),
    selfjoins maps -> exists m, jointo maps m.Axiom jointo_selfjoins : forall {A} (maps : A -> map) m,
    jointo maps m -> selfjoins maps.Axiom jointo_det : forall {A} (maps : A -> map) m1 m2,
    jointo maps m1 -> jointo maps m2 -> m1 = m2.Axiom jointo_Some : forall {A} (maps : A -> map) m a addr v,
    jointo maps m -> maps a addr = Some v -> m addr = Some v.Axiom jointo_Some_inv : forall {A} (maps : A -> map) m addr v,
    jointo maps m -> m addr = Some v -> exists a, maps a addr = Some v.

(* Specifications: *)
Lemma join_Some m1 m2 m addr v : join m1 m2 m -> m1 addr = Some v -> m addr = Some v.