Section ENVSEC.
Context {key: Type}{A: Type}.
Instance JA: Join A := Join_equiv A. (* It's a feature, not a bug, that this Instance is not visible as an Instance
outside the Section *)
Parameter env_get: forall (rho: env key A) (id: key), option (pshare * A).
Parameter env_set_sh: forall {KE: EqDec key} (id: key) (v: option (pshare * A)) (rho: env key A), env key A.
Definition env_set  {KE: EqDec key} (id: key) (v: A) (rho: env key A) : env key A :=
env_set_sh id (Some (pfullshare, v)) rho.
Definition finite_idfun (f: key -> option (pshare * A)) :=
exists l, forall a, ~In a l -> f a = None.
Parameter mk_env:  forall (f: key -> option (pshare * A)), finite_idfun f -> env key A.
(* Arguments mk_env. *)

Axiom env_get_mk_env:  forall (f: key -> option (pshare * A)) P, env_get (mk_env f P) = f.