diff --git a/theories/algebra/list.v b/theories/algebra/list.v
index 669500516482021e9b5cff81e849443ebc3900b2..b40a301c568ec7f0fb01661a75f65daa17f696aa 100644
--- a/theories/algebra/list.v
+++ b/theories/algebra/list.v
@@ -296,12 +296,17 @@ Section cmra.
     by apply cmra_discrete_valid.
   Qed.
 
-  Global Instance list_core_id l : (∀ x : A, CoreId x) → CoreId l.
+  Lemma list_core_id' l : (∀ x, x ∈ l → CoreId x) → CoreId l.
   Proof.
-    intros ?; constructor; apply list_equiv_lookup=> i.
-    by rewrite list_lookup_core (core_id_core (l !! i)).
+    intros Hyp. constructor. apply list_equiv_lookup=> i.
+    rewrite list_lookup_core.
+    destruct (l !! i) eqn:E; last done.
+    by eapply Hyp, elem_of_list_lookup_2.
   Qed.
 
+  Global Instance list_core_id l : (∀ x : A, CoreId x) → CoreId l.
+  Proof. intros Hyp; by apply list_core_id'. Qed.
+
   (** Internalized properties *)
   Lemma list_equivI {M} l1 l2 : l1 ≡ l2 ⊣⊢@{uPredI M} ∀ i, l1 !! i ≡ l2 !! i.
   Proof. uPred.unseal; constructor=> n x ?. apply list_dist_lookup. Qed.