Fromiris.heap_langRequireImportmetatheoryadequacy.Fromactris.logrelRequireExportterm_types.Fromactris.logrelRequireImportenvironments.Fromiris.proofmodeRequireImporttactics.(* The semantic typing judgement *)Definitionltyped`{!heapGΣ}(ΓΓ':gmapstring(lttyΣ))(e:expr)(A:lttyΣ):iPropΣ:=(■∀vs,env_ltypedΓvs-∗WPsubst_mapvse{{v,ltty_carAv∗env_ltypedΓ'vs}})%I.Notation"Γ ⊨ e : A ⫤ Γ'":=(ltypedΓΓ'eA)(atlevel100,eatnextlevel,Aatlevel200).Notation"Γ ⊨ e : A":=(Γ⊨e:A⫤Γ)(atlevel100,eatnextlevel,Aatlevel200).Lemmaltyped_safety`{heapPreGΣ}eσesσ'e':(∀`{heapGΣ},∃AΓ',⊢∅⊨e:A⫤Γ')→rtcerased_step([e],σ)(es,σ')→e'∈es→is_Some(to_vale')∨reduciblee'σ'.Proof.introsHty.apply(heap_adequacyΣNotStuckeσ(λ_,True))=>//?.destruct(Hty_)as(A&Γ'&He).iDestruct(He)as"He".iSpecialize("He"$!∅).iSpecialize("He"with"[]");firstbyrewrite/env_ltyped.iEval(rewrite-(subst_map_emptye)).iApply(wp_wandwith"He");auto.Qed.