diff --git a/theories/algebra/list.v b/theories/algebra/list.v index 0d3d22a06c7fb097755cb758cccdd9ed41f2bdef..d97f640aabf04d14d62757d8c41fb9a829f3e110 100644 --- a/theories/algebra/list.v +++ b/theories/algebra/list.v @@ -359,6 +359,9 @@ Section properties. Global Instance list_singleton_core_id i (x : A) : CoreId x → CoreId {[ i := x ]}. Proof. by rewrite !core_id_total list_core_singletonM=> ->. Qed. + Lemma list_singleton_snoc l x: + {[length l := x]} ⋅ l ≡ l ++ [x]. + Proof. elim: l => //= ?? <-. by rewrite left_id. Qed. (* Update *) Lemma list_singleton_updateP (P : A → Prop) (Q : list A → Prop) x : @@ -446,6 +449,17 @@ Section properties. x ~l~> y @ ml ≫= (!! i) → {[ i := x ]} ~l~> {[ i := y ]} @ ml. Proof. intros; apply list_middle_local_update. by rewrite replicate_length. Qed. *) + + Lemma list_alloc_singleton_local_update x l : + ✓ x → (l, ε) ~l~> (l ++ [x], {[length l := x]}). + Proof. + move => ?. + have -> : ({[length l := x]} ≡ {[length l := x]} ⋅ ε) by rewrite right_id. + rewrite -list_singleton_snoc. apply op_local_update => ??. + rewrite list_singleton_snoc app_validN cons_validN. split_and? => //; [| constructor]. + by apply cmra_valid_validN. + Qed. + End properties. (** Functor *)