diff options
Diffstat (limited to 'matching.v')
| -rw-r--r-- | matching.v | 29 |
1 files changed, 1 insertions, 28 deletions
| @@ -64,32 +64,6 @@ Definition matches (m : matcher) (bs : gmap string expr) : | |||
| 64 | snd <$> matches_aux ms bs | 64 | snd <$> matches_aux ms bs |
| 65 | end. | 65 | end. |
| 66 | 66 | ||
| 67 | (* Copied from stdpp and changed so that the value types | ||
| 68 | of m1 and m2 are decoupled *) | ||
| 69 | Lemma dom_subseteq_size' `{FinMapDom K M D} {A B} (m1 : M A) (m2 : M B) : | ||
| 70 | dom m2 ⊆ dom m1 → size m2 ≤ size m1. | ||
| 71 | Proof. | ||
| 72 | revert m1. induction m2 as [|i x m2 ? IH] using map_ind; intros m1 Hdom. | ||
| 73 | { rewrite map_size_empty. lia. } | ||
| 74 | rewrite dom_insert in Hdom. | ||
| 75 | assert (i ∉ dom m2) by (by apply not_elem_of_dom). | ||
| 76 | assert (i ∈ dom m1) as [x' Hx']%elem_of_dom by set_solver. | ||
| 77 | rewrite <-(insert_delete m1 i x') by done. | ||
| 78 | rewrite !map_size_insert_None, <-Nat.succ_le_mono | ||
| 79 | by (by rewrite ?lookup_delete). | ||
| 80 | apply IH. rewrite dom_delete. set_solver. | ||
| 81 | Qed. | ||
| 82 | |||
| 83 | Lemma dom_empty_subset `{Countable K} `{FinMapDom K M D} {A B} (m : M A) : | ||
| 84 | dom m ⊆ dom (∅ : M B) → m = ∅. | ||
| 85 | Proof. | ||
| 86 | intros Hdom. | ||
| 87 | apply dom_subseteq_size' in Hdom. | ||
| 88 | rewrite map_size_empty in Hdom. | ||
| 89 | inv Hdom. | ||
| 90 | by apply map_size_empty_inv. | ||
| 91 | Qed. | ||
| 92 | |||
| 93 | Lemma matches_aux_empty bs : matches_aux ∅ bs = Some (bs, ∅). | 67 | Lemma matches_aux_empty bs : matches_aux ∅ bs = Some (bs, ∅). |
| 94 | Proof. done. Qed. | 68 | Proof. done. Qed. |
| 95 | 69 | ||
| @@ -496,8 +470,7 @@ Proof. | |||
| 496 | revert strict bs brs Hmatches. | 470 | revert strict bs brs Hmatches. |
| 497 | induction ms using map_ind; intros strict bs brs Hmatches. | 471 | induction ms using map_ind; intros strict bs brs Hmatches. |
| 498 | - destruct strict; simplify_option_eq. | 472 | - destruct strict; simplify_option_eq. |
| 499 | + apply dom_empty_subset in H0. simplify_eq. | 473 | + apply map_dom_empty_subset in H0. simplify_eq. constructor. |
| 500 | constructor. | ||
| 501 | + constructor. | 474 | + constructor. |
| 502 | - destruct x. | 475 | - destruct x. |
| 503 | + apply matches_step' in Hmatches as He. | 476 | + apply matches_step' in Hmatches as He. |