Commit bb9d75d9 by Robbert Krebbers

### Various changes.

```* Parametrize refinements with memories. This way, refinements imply typing,
for example [w1 ⊑{Γ,f@m1↦m2} w2 : τ → (Γ,m1) ⊢ w1 : τ]. This relieves us from
various hacks.
* Use addresses instead of index/references pairs for lookup and alter
operations on memories.
* Prove various disjointness properties.```
parent d21800ed
 ... ... @@ -30,6 +30,9 @@ Proof. by destruct (decide P). Qed. Lemma decide_False {A} `{Decision P} (x y : A) : ¬P → (if decide P then x else y) = y. Proof. by destruct (decide P). Qed. Lemma decide_iff {A} P Q `{Decision P, Decision Q} (x y : A) : (P ↔ Q) → (if decide P then x else y) = (if decide Q then x else y). Proof. intros [??]. destruct (decide P), (decide Q); intuition. Qed. (** The tactic [destruct_decide] destructs a sumbool [dec]. If one of the components is double negated, it will try to remove the double negation. *) ... ...
 ... ... @@ -1305,10 +1305,10 @@ simplify overlapping look ups, and perform cancellations of equalities involving unions. *) Tactic Notation "simplify_map_equality" "by" tactic3(tac) := decompose_map_disjoint; repeat match goal with repeat match goal with | _ => progress simpl_map by tac | _ => progress simplify_equality | _ => progress simpl_option_monad by tac | H : {[ _ ]} !! _ = None |- _ => rewrite lookup_singleton_None in H | H : {[ _ ]} !! _ = Some _ |- _ => rewrite lookup_singleton_Some in H; destruct H ... ... @@ -1328,11 +1328,7 @@ Tactic Notation "simplify_map_equality" "by" tactic3(tac) := end. Tactic Notation "simplify_map_equality'" "by" tactic3(tac) := repeat (progress simpl in * || simplify_map_equality by tac). Tactic Notation "simplify_option_map_equality" "by" tactic3(tac) := repeat (simplify_option_equality || simplify_map_equality by tac). Tactic Notation "simplify_map_equality" := simplify_map_equality by eauto with simpl_map map_disjoint. Tactic Notation "simplify_map_equality'" := simplify_map_equality' by eauto with simpl_map map_disjoint. Tactic Notation "simplify_option_map_equality" := simplify_option_map_equality by eauto with simpl_map map_disjoint.