diff --git a/theories/fin_maps.v b/theories/fin_maps.v
index f87cc30127fd950c803724c106aaa0d7f6633370..d8d65511501671fffe29ecb6bd1193b03d51f2c0 100644
--- a/theories/fin_maps.v
+++ b/theories/fin_maps.v
@@ -287,6 +287,8 @@ Lemma lookup_empty_is_Some {A} i : ¬is_Some ((∅ : M A) !! i).
 Proof. rewrite lookup_empty. by inversion 1. Qed.
 Lemma lookup_empty_Some {A} i (x : A) : ¬(∅ : M A) !! i = Some x.
 Proof. by rewrite lookup_empty. Qed.
+Lemma loopup_total_empty `{!Inhabited A} i : (∅ : M A) !!! i = inhabitant.
+Proof. by rewrite lookup_total_alt, lookup_empty. Qed.
 Lemma map_subset_empty {A} (m : M A) : m ⊄ ∅.
 Proof.
   intros [_ []]. rewrite map_subseteq_spec. intros ??. by rewrite lookup_empty.
@@ -419,8 +421,14 @@ Qed.
 (** ** Properties of the [delete] operation *)
 Lemma lookup_delete {A} (m : M A) i : delete i m !! i = None.
 Proof. apply lookup_partial_alter. Qed.
+Lemma lookup_total_delete `{!Inhabited A} (m : M A) i :
+  delete i m !!! i = inhabitant.
+Proof. by rewrite lookup_total_alt, lookup_delete. Qed.
 Lemma lookup_delete_ne {A} (m : M A) i j : i ≠ j → delete i m !! j = m !! j.
 Proof. apply lookup_partial_alter_ne. Qed.
+Lemma lookup_total_delete_ne `{!Inhabited A} (m : M A) i j :
+  i ≠ j → delete i m !!! j = m !!! j.
+Proof. intros. by rewrite lookup_total_alt, lookup_delete_ne. Qed.
 Lemma lookup_delete_Some {A} (m : M A) i j y :
   delete i m !! j = Some y ↔ i ≠ j ∧ m !! j = Some y.
 Proof.
@@ -486,10 +494,15 @@ Qed.
 (** ** Properties of the [insert] operation *)
 Lemma lookup_insert {A} (m : M A) i x : <[i:=x]>m !! i = Some x.
 Proof. unfold insert. apply lookup_partial_alter. Qed.
+Lemma lookup_total_insert `{!Inhabited A} (m : M A) i x : <[i:=x]>m !!! i = x.
+Proof. by rewrite lookup_total_alt, lookup_insert. Qed.
 Lemma lookup_insert_rev {A}  (m : M A) i x y : <[i:=x]>m !! i = Some y → x = y.
 Proof. rewrite lookup_insert. congruence. Qed.
 Lemma lookup_insert_ne {A} (m : M A) i j x : i ≠ j → <[i:=x]>m !! j = m !! j.
 Proof. unfold insert. apply lookup_partial_alter_ne. Qed.
+Lemma lookup_total_insert_ne `{!Inhabited A} (m : M A) i j x :
+  i ≠ j → <[i:=x]>m !!! j = m !!! j.
+Proof. intros. by rewrite lookup_total_alt, lookup_insert_ne. Qed.
 Lemma insert_insert {A} (m : M A) i x y : <[i:=x]>(<[i:=y]>m) = <[i:=x]>m.
 Proof. unfold insert, map_insert. by rewrite <-partial_alter_compose. Qed.
 Lemma insert_commute {A} (m : M A) i j x y :
@@ -595,9 +608,15 @@ Lemma lookup_singleton_None {A} i j (x : A) :
 Proof. rewrite <-insert_empty,lookup_insert_None, lookup_empty; tauto. Qed.
 Lemma lookup_singleton {A} i (x : A) : ({[i := x]} : M A) !! i = Some x.
 Proof. by rewrite lookup_singleton_Some. Qed.
+Lemma lookup_total_singleton `{!Inhabited A} i (x : A) :
+  ({[i := x]} : M A) !!! i = x.
+Proof. by rewrite lookup_total_alt, lookup_singleton. Qed.
 Lemma lookup_singleton_ne {A} i j (x : A) :
   i ≠ j → ({[i := x]} : M A) !! j = None.
 Proof. by rewrite lookup_singleton_None. Qed.
+Lemma lookup_total_singleton_ne `{!Inhabited A} i j (x : A) :
+  i ≠ j → ({[i := x]} : M A) !!! j = inhabitant.
+Proof. intros. by rewrite lookup_total_alt, lookup_singleton_ne. Qed.
 Lemma map_non_empty_singleton {A} i (x : A) : {[i := x]} ≠ (∅ : M A).
 Proof.
   intros Hix. apply (f_equal (.!! i)) in Hix.