@@ -29,13 +29,13 @@ Definition gmap_mov (a b: gmap K (option V)) : Prop :=
29
29
Lemma gmap_dot_comm x y
30
30
: gmap_dot x y = gmap_dot y x.
31
31
Proof .
32
- intros. unfold gmap_dot, gmerge. apply map_eq. intro. rewrite lookup_merge.
32
+ intros. unfold gmap_dot, gmerge. apply map_eq. intro i . rewrite lookup_merge.
33
33
rewrite lookup_merge. unfold diag_None. destruct (x !! i), (y !! i); trivial.
34
34
Qed .
35
35
36
36
Lemma gmap_dot_assoc x y z
37
37
: gmap_dot x (gmap_dot y z) = gmap_dot (gmap_dot x y) z.
38
- Proof . intros. unfold gmap_dot, gmerge. apply map_eq. intro. rewrite lookup_merge.
38
+ Proof . intros. unfold gmap_dot, gmerge. apply map_eq. intro i . rewrite lookup_merge.
39
39
rewrite lookup_merge.
40
40
rewrite lookup_merge.
41
41
unfold diag_None.
47
47
Lemma gmap_dot_empty
48
48
: ∀ x : gmap K (option V), gmap_dot x ∅ = x.
49
49
Proof .
50
- intros. unfold gmap_dot. apply map_eq. intro. rewrite lookup_merge. rewrite lookup_empty.
50
+ intros x . unfold gmap_dot. apply map_eq. intro i . rewrite lookup_merge. rewrite lookup_empty.
51
51
unfold diag_None, gmerge. destruct (x !! i); trivial.
52
52
Qed .
53
53
54
54
Lemma gmap_dot_empty_left
55
55
: ∀ x : gmap K (option V), gmap_dot ∅ x = x.
56
56
Proof .
57
- intros. unfold gmap_dot. apply map_eq. intro. rewrite lookup_merge. rewrite lookup_empty.
57
+ intros x . unfold gmap_dot. apply map_eq. intro i . rewrite lookup_merge. rewrite lookup_empty.
58
58
unfold diag_None, gmerge. destruct (x !! i); trivial.
59
59
Qed .
60
60
61
61
Lemma lookup_gmap_dot_left a b k
62
62
: gmap_valid (gmap_dot a b) -> (a !! k ≠ None) -> (gmap_dot a b) !! k = a !! k.
63
63
Proof .
64
- unfold gmap_valid, gmap_dot. intros.
65
- have j := H k. rewrite lookup_merge.
64
+ unfold gmap_valid, gmap_dot. intros Q R .
65
+ have j := Q k. rewrite lookup_merge.
66
66
rewrite lookup_merge in j. unfold diag_None, gmerge in *. destruct (a !! k), (b !! k);
67
67
trivial; contradiction.
68
68
Qed .
69
69
70
70
Lemma lookup_gmap_dot_right a b k
71
71
: gmap_valid (gmap_dot a b) -> (b !! k ≠ None) -> (gmap_dot a b) !! k = b !! k.
72
72
Proof .
73
- unfold gmap_valid, gmap_dot. intros. have j := H k. rewrite lookup_merge.
73
+ unfold gmap_valid, gmap_dot. intros Q R . have j := Q k. rewrite lookup_merge.
74
74
rewrite lookup_merge in j. unfold diag_None, gmerge in *. destruct (a !! k), (b !! k);
75
75
trivial; contradiction.
76
76
Qed .
@@ -79,9 +79,9 @@ Lemma lookup_gmap_dot_3mid a b c k
79
79
: gmap_valid (gmap_dot (gmap_dot a b) c) -> (b !! k ≠ None) ->
80
80
gmap_dot (gmap_dot a b) c !! k = b !! k.
81
81
Proof .
82
- intros.
83
- rewrite gmap_dot_comm in H .
84
- rewrite gmap_dot_assoc in H .
82
+ intros Q R .
83
+ rewrite gmap_dot_comm in Q .
84
+ rewrite gmap_dot_assoc in Q .
85
85
rewrite gmap_dot_comm.
86
86
rewrite gmap_dot_assoc.
87
87
apply lookup_gmap_dot_right; trivial.
@@ -91,8 +91,8 @@ Lemma lookup_gmap_dot_3left a b c k
91
91
: gmap_valid (gmap_dot (gmap_dot a b) c) -> (a !! k ≠ None) ->
92
92
gmap_dot (gmap_dot a b) c !! k = a !! k.
93
93
Proof .
94
- intros.
95
- rewrite <- gmap_dot_assoc in H .
94
+ intros Q R .
95
+ rewrite <- gmap_dot_assoc in Q .
96
96
rewrite <- gmap_dot_assoc.
97
97
apply lookup_gmap_dot_left; trivial.
98
98
Qed .
107
107
Lemma gmap_valid_left
108
108
: ∀ x y : gmap K (option V), gmap_valid (gmap_dot x y) → gmap_valid x.
109
109
Proof .
110
- intros. unfold gmap_valid, gmap_dot in *.
111
- intro . have h := H k. clear H . rewrite lookup_merge in h. unfold diag_None in h.
110
+ intros x y . unfold gmap_valid, gmap_dot in *.
111
+ intros Q k . have h := Q k. clear Q . rewrite lookup_merge in h. unfold diag_None in h.
112
112
unfold gmerge in h.
113
113
destruct (x !! k); trivial.
114
114
destruct (y !! k); trivial. contradiction.
@@ -124,8 +124,8 @@ Lemma gmap_valid_update_singleton j x y (m: gmap K (option V)) :
124
124
gmap_valid (gmap_dot {[j := Some x]} m) ->
125
125
gmap_valid (gmap_dot {[j := Some y]} m).
126
126
Proof .
127
- intros. unfold gmap_valid, gmap_dot in *. intro.
128
- have r := H k. rewrite lookup_merge. rewrite lookup_merge in r.
127
+ intros Q . unfold gmap_valid, gmap_dot in *. intro k .
128
+ have r := Q k. rewrite lookup_merge. rewrite lookup_merge in r.
129
129
unfold gmerge, diag_None in *.
130
130
have h : Decision (j = k) by solve_decision. destruct h.
131
131
- subst k. rewrite lookup_singleton. rewrite lookup_singleton in r.
@@ -134,30 +134,6 @@ Proof.
134
134
rewrite lookup_singleton_ne in r; trivial.
135
135
Qed .
136
136
137
- (*
138
- #[refine]
139
- Global Instance gmap_tpcm : TPCM (gmap K (option V)) := {
140
- m_valid p := gmap_valid p ;
141
- dot a b := gmap_dot a b ;
142
- mov a b := gmap_mov a b ;
143
- unit := empty ;
144
- }.
145
- - apply gmap_valid_left.
146
- - unfold gmap_valid. intros. rewrite lookup_empty. trivial.
147
- - apply gmap_dot_empty.
148
- - intros. apply gmap_dot_comm.
149
- - intros. apply gmap_dot_assoc.
150
- - intros. unfold gmap_mov. intro. trivial.
151
- - intros. unfold gmap_mov in *. intros. apply H0. apply H. trivial.
152
- - intros. split.
153
- * unfold gmap_mov in H. apply H. apply H0.
154
- * unfold gmap_mov in H. unfold gmap_mov. intro.
155
- rewrite <- gmap_dot_assoc.
156
- rewrite <- gmap_dot_assoc.
157
- apply H.
158
- Defined.
159
- *)
160
-
161
137
Definition gmap_le (a b : gmap K (option V)) := ∃ c , gmap_dot a c = b.
162
138
163
139
Lemma le_of_subset (a b : gmap K (option V))
@@ -166,19 +142,19 @@ Proof.
166
142
assert (∀ x : K * option V, Decision (match x with (k,v) => a !! k = None end)) as X
167
143
by solve_decision.
168
144
exists (map_filter (λ x , match x with (k,v) => a !! k = None end) X b).
169
- unfold gmap_dot. apply map_eq. intro.
145
+ unfold gmap_dot. apply map_eq. intro i .
170
146
have ff := f i.
171
147
rewrite lookup_merge. unfold diag_None, gmerge.
172
- destruct (a !! i) eqn:ai.
148
+ destruct (a !! i) as [o|] eqn:ai.
173
149
- rewrite map_lookup_filter.
174
- unfold "≫=", option_bind. destruct (b!!i) eqn:bi.
175
- + unfold guard. have fff := ff o. intuition . inversion H .
150
+ unfold "≫=", option_bind. destruct (b!!i) as [o0|] eqn:bi.
151
+ + unfold guard. have fff := ff o. have ffff := fff eq_refl . inversion ffff. subst o0 .
176
152
destruct (X (i, o)) as [e|e].
177
153
* rewrite e in ai. discriminate.
178
154
* trivial.
179
155
+ have fff := ff o. intuition.
180
156
- rewrite map_lookup_filter.
181
- unfold "≫=", option_bind. destruct (b!!i) eqn:bi; trivial.
157
+ unfold "≫=", option_bind. destruct (b!!i) as [o|] eqn:bi; trivial.
182
158
destruct (X (i, o)); trivial.
183
159
contradiction.
184
160
Qed .
@@ -194,7 +170,7 @@ Lemma conjunct_and_gmap
194
170
Proof .
195
171
apply le_of_subset. intros k v e1.
196
172
unfold gmap_dot in e1. rewrite lookup_merge in e1. unfold diag_None in e1.
197
- destruct (a1 !! k) eqn:a1k; destruct (a2 !! k) eqn:a2k.
173
+ destruct (a1 !! k) as [o|] eqn:a1k; destruct (a2 !! k) as [o0|] eqn:a2k.
198
174
- have l := a_disj _ _ _ a1k a2k. contradiction.
199
175
- unfold gmerge in e1. inversion e1. subst o. unfold gmap_le in la1.
200
176
destruct la1 as [d la]. subst c.
@@ -204,7 +180,7 @@ Proof.
204
180
have gvk := gv k.
205
181
rewrite lookup_merge in gvk. rewrite a1k in gvk. unfold diag_None in gvk.
206
182
unfold gmerge. unfold gmerge in gvk. destruct (d !! k); trivial. contradiction.
207
- - unfold gmerge in e1. inversion e1. subst o . unfold gmap_le in la2.
183
+ - unfold gmerge in e1. inversion e1. subst o0 . unfold gmap_le in la2.
208
184
destruct la2 as [d la]. subst c.
209
185
unfold gmap_dot.
210
186
unfold gmap_valid in gv. unfold gmap_dot in gv.
0 commit comments