proposition: Lemma get_set_heap_neq : ∀ h ℓ v ℓ', ℓ' != ℓ → get_heap (set_heap h ℓ v) ℓ' = get_heap h ℓ'.
proof: Proof. intros h ℓ v ℓ' ne. funelim (get_heap (set_heap h ℓ v) ℓ'). - rewrite -Heqcall. clear Heqcall. pose proof e as ep. simpl in ep. rewrite setmE in ep. eapply negbTE in ne. rewrite ne in ep. funelim (get_heap h ℓ). 2:{ rewrite -e in ep. noconf ep. } rewrite -Heqcall. clear Heqcall. apply cast_pointed_value_ext. rewrite -e in ep. noconf ep. reflexivity. - rewrite -Heqcall. clear Heqcall. clear H. simpl in e. rewrite setmE in e. eapply negbTE in ne. rewrite ne in e. funelim (get_heap h ℓ). 1:{ rewrite -e in e0. noconf e0. } rewrite -Heqcall. reflexivity. Qed.
imports: Coq(Utf8) Relational(OrderEnrichedCategory OrderEnrichedRelativeMonadExamples) mathcomp(ssrnat ssreflect ssrfun ssrbool ssrnum eqtype choice reals distr seq all_algebra fintype realsum) extructures(ord fset fmap) Mon(SPropBase) Crypt(Prelude Axioms ChoiceAsOrd SubDistr Couplings RulesStateProb UniformStateProb UniformDistrLemmas StateTransfThetaDens StateTransformingLaxMorph choice_type pkg_core_definition pkg_notation pkg_tactics pkg_composition) Equations.Prop.DepElim Equations(Equations) Crypt(FreeProbProg)