Parameter env: forall (key: Type) (A: Type), Type.
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.

Axiom env_gso_sh: forall {KE: EqDec key} i j v rho, i <> j ->
env_get (env_set_sh j v rho) i = env_get rho i.