diff --git a/theories/proofmode/class_instances.v b/theories/proofmode/class_instances.v
index 776f6a2ba0c929584a13549cffec9dffd26670d8..4a3ab703ff7e18a40691abd0235f2a4f7e813ec2 100644
--- a/theories/proofmode/class_instances.v
+++ b/theories/proofmode/class_instances.v
@@ -27,34 +27,55 @@ Global Instance from_assumption_exact p P : FromAssumption p P P | 0.
 Proof. by rewrite /FromAssumption /= affinely_persistently_if_elim. Qed.
 
 Global Instance from_assumption_persistently_r P Q :
-  FromAssumption true P Q → FromAssumption true P (bi_persistently Q).
+  FromAssumption true P Q → KnownRFromAssumption true P (bi_persistently Q).
 Proof.
-  rewrite /FromAssumption /= =><-.
+  rewrite /KnownRFromAssumption /FromAssumption /= =><-.
   by rewrite -{1}affinely_persistently_idemp affinely_elim.
 Qed.
 Global Instance from_assumption_affinely_r P Q :
-  FromAssumption true P Q → FromAssumption true P (bi_affinely Q).
-Proof. rewrite /FromAssumption /= =><-. by rewrite affinely_idemp. Qed.
+  FromAssumption true P Q → KnownRFromAssumption true P (bi_affinely Q).
+Proof.
+  rewrite /KnownRFromAssumption /FromAssumption /= =><-.
+  by rewrite affinely_idemp.
+Qed.
 Global Instance from_assumption_absorbingly_r p P Q :
-  FromAssumption p P Q → FromAssumption p P (bi_absorbingly Q).
-Proof. rewrite /FromAssumption /= =><-. apply absorbingly_intro. Qed.
+  FromAssumption p P Q → KnownRFromAssumption p P (bi_absorbingly Q).
+Proof.
+  rewrite /KnownRFromAssumption /FromAssumption /= =><-.
+  apply absorbingly_intro.
+Qed.
 
 Global Instance from_assumption_affinely_persistently_l p P Q :
-  FromAssumption true P Q → FromAssumption p (□ P) Q.
-Proof. rewrite /FromAssumption /= =><-. by rewrite affinely_persistently_if_elim. Qed.
+  FromAssumption true P Q → KnownLFromAssumption p (□ P) Q.
+Proof.
+  rewrite /KnownLFromAssumption /FromAssumption /= =><-.
+  by rewrite affinely_persistently_if_elim.
+Qed.
 Global Instance from_assumption_persistently_l_true P Q :
-  FromAssumption true P Q → FromAssumption true (bi_persistently P) Q.
-Proof. rewrite /FromAssumption /= =><-. by rewrite persistently_idemp. Qed.
+  FromAssumption true P Q → KnownLFromAssumption true (bi_persistently P) Q.
+Proof.
+  rewrite /KnownLFromAssumption /FromAssumption /= =><-.
+  by rewrite persistently_idemp.
+Qed.
 Global Instance from_assumption_persistently_l_false `{BiAffine PROP} P Q :
-  FromAssumption true P Q → FromAssumption false (bi_persistently P) Q.
-Proof. rewrite /FromAssumption /= =><-. by rewrite affine_affinely. Qed.
+  FromAssumption true P Q → KnownLFromAssumption false (bi_persistently P) Q.
+Proof.
+  rewrite /KnownLFromAssumption /FromAssumption /= =><-.
+  by rewrite affine_affinely.
+Qed.
 Global Instance from_assumption_affinely_l_true p P Q :
-  FromAssumption p P Q → FromAssumption p (bi_affinely P) Q.
-Proof. rewrite /FromAssumption /= =><-. by rewrite affinely_elim. Qed.
+  FromAssumption p P Q → KnownLFromAssumption p (bi_affinely P) Q.
+Proof.
+  rewrite /KnownLFromAssumption /FromAssumption /= =><-.
+  by rewrite affinely_elim.
+Qed.
 
 Global Instance from_assumption_forall {A} p (Φ : A → PROP) Q x :
-  FromAssumption p (Φ x) Q → FromAssumption p (∀ x, Φ x) Q.
-Proof. rewrite /FromAssumption=> <-. by rewrite forall_elim. Qed.
+  FromAssumption p (Φ x) Q → KnownLFromAssumption p (∀ x, Φ x) Q.
+Proof.
+  rewrite /KnownLFromAssumption /FromAssumption=> <-.
+  by rewrite forall_elim.
+Qed.
 
 (* IntoPure *)
 Global Instance into_pure_pure φ : @IntoPure PROP ⌜φ⌝ φ.
@@ -999,32 +1020,32 @@ Implicit Types P Q R : PROP.
 
 (* FromAssumption *)
 Global Instance from_assumption_later p P Q :
-  FromAssumption p P Q → FromAssumption p P (▷ Q)%I.
-Proof. rewrite /FromAssumption=>->. apply later_intro. Qed.
+  FromAssumption p P Q → KnownRFromAssumption p P (▷ Q)%I.
+Proof. rewrite /KnownRFromAssumption /FromAssumption=>->. apply later_intro. Qed.
 Global Instance from_assumption_laterN n p P Q :
-  FromAssumption p P Q → FromAssumption p P (▷^n Q)%I.
-Proof. rewrite /FromAssumption=>->. apply laterN_intro. Qed.
+  FromAssumption p P Q → KnownRFromAssumption p P (▷^n Q)%I.
+Proof. rewrite /KnownRFromAssumption /FromAssumption=>->. apply laterN_intro. Qed.
 Global Instance from_assumption_except_0 p P Q :
-  FromAssumption p P Q → FromAssumption p P (◇ Q)%I.
-Proof. rewrite /FromAssumption=>->. apply except_0_intro. Qed.
+  FromAssumption p P Q → KnownRFromAssumption p P (◇ Q)%I.
+Proof. rewrite /KnownRFromAssumption /FromAssumption=>->. apply except_0_intro. Qed.
 
 Global Instance from_assumption_bupd `{BiBUpd PROP} p P Q :
-  FromAssumption p P Q → FromAssumption p P (|==> Q).
-Proof. rewrite /FromAssumption=>->. apply bupd_intro. Qed.
+  FromAssumption p P Q → KnownRFromAssumption p P (|==> Q).
+Proof. rewrite /KnownRFromAssumption /FromAssumption=>->. apply bupd_intro. Qed.
 Global Instance from_assumption_fupd `{BiBUpdFUpd PROP} E p P Q :
-  FromAssumption p P (|==> Q) → FromAssumption p P (|={E}=> Q)%I.
-Proof. rewrite /FromAssumption=>->. apply bupd_fupd. Qed.
+  FromAssumption p P (|==> Q) → KnownRFromAssumption p P (|={E}=> Q)%I.
+Proof. rewrite /KnownRFromAssumption /FromAssumption=>->. apply bupd_fupd. Qed.
 
 Global Instance from_assumption_plainly_l_true `{BiPlainly PROP} P Q :
-  FromAssumption true P Q → FromAssumption true (■ P) Q.
+  FromAssumption true P Q → KnownLFromAssumption true (■ P) Q.
 Proof.
-  rewrite /FromAssumption /= =><-.
+  rewrite /KnownLFromAssumption /FromAssumption /= =><-.
   by rewrite persistently_elim plainly_elim_persistently.
 Qed.
 Global Instance from_assumption_plainly_l_false `{BiPlainly PROP, BiAffine PROP} P Q :
-  FromAssumption true P Q → FromAssumption false (■ P) Q.
+  FromAssumption true P Q → KnownLFromAssumption false (■ P) Q.
 Proof.
-  rewrite /FromAssumption /= =><-.
+  rewrite /KnownLFromAssumption /FromAssumption /= =><-.
   by rewrite affine_affinely plainly_elim_persistently.
 Qed.
 
diff --git a/theories/proofmode/classes.v b/theories/proofmode/classes.v
index 255c7bce9b3ab262d8e90b2c768846211775e800..b758e8b85bd351d555d5484e4bc46029ad238afc 100644
--- a/theories/proofmode/classes.v
+++ b/theories/proofmode/classes.v
@@ -8,10 +8,20 @@ Class FromAssumption {PROP : bi} (p : bool) (P Q : PROP) :=
   from_assumption : □?p P ⊢ Q.
 Arguments FromAssumption {_} _ _%I _%I : simpl never.
 Arguments from_assumption {_} _ _%I _%I {_}.
-(* No need to restrict Hint Mode, we have a default instance that will always
-be used in case of evars *)
 Hint Mode FromAssumption + + - - : typeclass_instances.
 
+Class KnownLFromAssumption {PROP : bi} (p : bool) (P Q : PROP) :=
+  knownl_from_assumption :> FromAssumption p P Q.
+Arguments KnownLFromAssumption {_} _ _%I _%I : simpl never.
+Arguments knownl_from_assumption {_} _ _%I _%I {_}.
+Hint Mode KnownLFromAssumption + + ! - : typeclass_instances.
+
+Class KnownRFromAssumption {PROP : bi} (p : bool) (P Q : PROP) :=
+  knownr_from_assumption :> FromAssumption p P Q.
+Arguments KnownRFromAssumption {_} _ _%I _%I : simpl never.
+Arguments knownr_from_assumption {_} _ _%I _%I {_}.
+Hint Mode KnownRFromAssumption + + - ! : typeclass_instances.
+
 Class IntoPure {PROP : bi} (P : PROP) (φ : Prop) :=
   into_pure : P ⊢ ⌜φ⌝.
 Arguments IntoPure {_} _%I _%type_scope : simpl never.
diff --git a/theories/proofmode/monpred.v b/theories/proofmode/monpred.v
index 9fed49141e8f464194c7a7e23485858b8276d65d..fef4a9078ccfaa95a9ba85927ecc581908b42e1a 100644
--- a/theories/proofmode/monpred.v
+++ b/theories/proofmode/monpred.v
@@ -123,24 +123,30 @@ Global Instance make_monPred_at_bupd `{BiBUpd PROP} i P 𝓟 :
 Proof. by rewrite /MakeMonPredAt monPred_at_bupd=> <-. Qed.
 
 Global Instance from_assumption_make_monPred_at_l p i j P 𝓟 :
-  MakeMonPredAt i P 𝓟 → IsBiIndexRel j i → FromAssumption p (P j) 𝓟.
+  MakeMonPredAt i P 𝓟 → IsBiIndexRel j i → KnownLFromAssumption p (P j) 𝓟.
 Proof.
-  rewrite /MakeMonPredAt /FromAssumption /IsBiIndexRel=><- ->.
+  rewrite /MakeMonPredAt /KnownLFromAssumption /FromAssumption /IsBiIndexRel=><- ->.
   apply  bi.affinely_persistently_if_elim.
 Qed.
 Global Instance from_assumption_make_monPred_at_r p i j P 𝓟 :
-  MakeMonPredAt i P 𝓟 → IsBiIndexRel i j → FromAssumption p 𝓟 (P j).
+  MakeMonPredAt i P 𝓟 → IsBiIndexRel i j → KnownRFromAssumption p 𝓟 (P j).
 Proof.
-  rewrite /MakeMonPredAt /FromAssumption /IsBiIndexRel=><- ->.
+  rewrite /MakeMonPredAt /KnownRFromAssumption /FromAssumption /IsBiIndexRel=><- ->.
   apply  bi.affinely_persistently_if_elim.
 Qed.
 
 Global Instance from_assumption_make_monPred_absolutely P Q :
-  FromAssumption p P Q → FromAssumption p (∀ᵢ P) Q.
-Proof. intros ?. by rewrite /FromAssumption monPred_absolutely_elim. Qed.
+  FromAssumption p P Q → KnownLFromAssumption p (∀ᵢ P) Q.
+Proof.
+  intros ?.
+  by rewrite /KnownLFromAssumption /FromAssumption monPred_absolutely_elim.
+Qed.
 Global Instance from_assumption_make_monPred_relatively P Q :
-  FromAssumption p P Q → FromAssumption p P (∃ᵢ Q).
-Proof. intros ?. by rewrite /FromAssumption -monPred_relatively_intro. Qed.
+  FromAssumption p P Q → KnownRFromAssumption p P (∃ᵢ Q).
+Proof.
+  intros ?.
+  by rewrite /KnownRFromAssumption /FromAssumption -monPred_relatively_intro.
+Qed.
 
 Global Instance as_valid_monPred_at φ P (Φ : I → PROP) :
   AsValid0 φ P → (∀ i, MakeMonPredAt i P (Φ i)) → AsValid φ (∀ i, Φ i) | 100.