Instance Sep_env {SA: Sep_alg A}: @Sep_alg env Join_env.
refine (mkSep Join_env (fun _ => empty_env) _ _).
repeat intro; rewrite env_get_empty; constructor.
auto.
Defined.
Instance Sing_env {SA: Sep_alg A}: @Sing_alg env Join_env Sep_env.
refine (mkSing empty_env _). reflexivity.
Defined.
Instance Canc_env {PA: Perm_alg A}{CA: Canc_alg A}: @Canc_alg env Join_env.
Instance Disj_env {PA: Perm_alg A}{DA: Disj_alg A}: @Disj_alg env Join_env.
Instance Cross_env: Cross_alg env.
Definition _env_mapsto {KE: EqDec key} (id: key) (sh: Share.t) (v: A) : pred env :=
fun rho => exists p,
forall id', env_get rho id' = if eq_dec id id' then Some (exist _ sh p,v) else None.

Lemma _env_mapsto_splittable {KE: EqDec key}: forall id v (sh sh1 sh2: pshare) rho,
join (proj1_sig sh1) (proj1_sig sh2) (proj1_sig sh)
-> (_env_mapsto id (pshare_sh sh) v rho
<-> (_env_mapsto id (pshare_sh sh1) v * _env_mapsto id (pshare_sh sh2)  v)%pred rho).