Skip to content

Commit cb66c71

Browse files
committed
Prove commutativity of delete
1 parent ff89dc4 commit cb66c71

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

theories/Storage/Properties.v

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,36 @@ Section basic.
4646
unfold_s_eq as k_.
4747
repeat storage_key_case_analysis k_...
4848
Qed.
49+
50+
Lemma delete_idempotent k (s : T) :
51+
delete k (delete k s) =s= delete k s.
52+
Proof.
53+
constructor. intros a.
54+
destruct (@key_eq_dec _ _ T _ a k) as [Hak|Hak].
55+
- rewrite Hak.
56+
now repeat rewrite delete_keep.
57+
- now rewrite <-delete_distinct with (k2 := k) by assumption.
58+
Qed.
59+
60+
Lemma delete_commute a b (s : T) :
61+
delete b (delete a s) =s= delete a (delete b s).
62+
Proof.
63+
destruct (@key_eq_dec _ _ T _ a b) as [Hab|Hab].
64+
- rewrite Hab.
65+
now rewrite delete_idempotent.
66+
- constructor. intros k.
67+
destruct (@key_eq_dec _ _ T _ k b) as [Hbk|Hbk].
68+
+ rewrite Hbk in *.
69+
rewrite <-delete_distinct with (k2 := a) by easy.
70+
now repeat rewrite delete_keep.
71+
+ destruct (@key_eq_dec _ _ T _ k a) as [Hak|Hak].
72+
* rewrite Hak.
73+
rewrite <-delete_distinct with (k2 := b) by easy.
74+
now repeat rewrite delete_keep.
75+
* rewrite <-delete_distinct with (k2 := b) by easy.
76+
repeat rewrite <-delete_distinct with (k2 := a) by easy.
77+
now rewrite <-delete_distinct with (k2 := b) by easy.
78+
Qed.
4979
End basic.
5080

5181
Section s_eq.

0 commit comments

Comments
 (0)