diff --git a/theories/list.v b/theories/list.v
index f1e5b42bc8c43c8af2d1f2cf318d115567806678..b04984ffd2648f0be6810e441ef525565a5da38c 100644
--- a/theories/list.v
+++ b/theories/list.v
@@ -523,6 +523,8 @@ Lemma list_insert_commute l i j x y :
 Proof. revert i j. by induction l; intros [|?] [|?] ?; f_equal/=; auto. Qed.
 Lemma list_insert_id l i x : l !! i = Some x → <[i:=x]>l = l.
 Proof. revert i. induction l; intros [|i] [=]; f_equal/=; auto. Qed.
+Lemma list_insert_ge l i x : length l ≤ i → <[i:=x]>l = l.
+Proof. revert i. induction l; intros [|i] ?; f_equal/=; auto with lia. Qed.
 
 Lemma list_lookup_other l i x :
   length l ≠ 1 → l !! i = Some x → ∃ j y, j ≠ i ∧ l !! j = Some y.
@@ -689,6 +691,13 @@ Proof.
   - intros (x&Hx&?). by induction Hx; csimpl; repeat case_match;
       simplify_eq; try constructor; auto.
 Qed.
+Lemma list_elem_of_insert l i x : i < length l → x ∈ <[i:=x]>l.
+Proof. intros. by eapply elem_of_list_lookup_2, list_lookup_insert. Qed.
+Lemma nth_elem_of l i d : i < length l → nth i l d ∈ l.
+Proof.
+  intros; eapply elem_of_list_lookup_2.
+  destruct (nth_lookup_or_length l i d); [done | by lia].
+Qed.
 
 (** ** Properties of the [NoDup] predicate *)
 Lemma NoDup_nil : NoDup (@nil A) ↔ True.
@@ -851,6 +860,13 @@ Section find.
       [ match goal with x : prod _ _ |- _ => destruct x end
       | simplify_option_eq ]; eauto.
   Qed.
+  Lemma list_find_None l :
+    list_find P l = None → Forall (λ x, ¬ P x) l.
+  Proof.
+    induction l as [|? l IHl]; [eauto|]. simpl. case_decide; [done|].
+    intros. constructor; [done|]. apply IHl.
+    by destruct (list_find P l).
+  Qed.
   Lemma list_find_elem_of l x : x ∈ l → P x → is_Some (list_find P l).
   Proof.
     induction 1 as [|x y l ? IH]; intros; simplify_option_eq; eauto.
@@ -960,6 +976,11 @@ Proof.
   - by rewrite !lookup_take_ge.
   - by rewrite !lookup_take, !list_lookup_insert_ne by lia.
 Qed.
+Lemma take_insert_lt l n i x : i < n → take n (<[i:=x]>l) = <[i:=x]>(take n l).
+Proof.
+  revert l i. induction n as [|? IHn]; auto; simpl.
+  intros [|] [|] ?; auto; simpl. by rewrite IHn by lia.
+Qed.
 
 (** ** Properties of the [drop] function *)
 Lemma drop_0 l : drop 0 l = l.
@@ -2237,6 +2258,14 @@ Section Forall_Exists.
   Proof. by rewrite Forall_lookup. Qed.
   Lemma Forall_tail l : Forall P l → Forall P (tail l).
   Proof. destruct 1; simpl; auto. Qed.
+  Lemma Forall_nth d l : Forall P l ↔ ∀ i, i < length l → P (nth i l d).
+  Proof.
+    rewrite Forall_lookup. split.
+    - intros Hl ? [x Hl']%lookup_lt_is_Some_2.
+      rewrite (nth_lookup_Some _ _ _ _ Hl'). by eapply Hl.
+    - intros Hl i x Hl'. specialize (Hl _ (lookup_lt_Some _ _ _ Hl')).
+      by rewrite (nth_lookup_Some _ _ _ _ Hl') in Hl.
+  Qed.
   Lemma Forall_alter f l i :
     Forall P l → (∀ x, l!!i = Some x → P x → P (f x)) → Forall P (alter f i l).
   Proof.