diff --git a/iris/bi/lib/fractional.v b/iris/bi/lib/fractional.v
index 0f8973217d4c13af936175d744849f60640b5dc9..c8add9a28534a4045358c7cf7aaaa9e1f0cb6b2e 100644
--- a/iris/bi/lib/fractional.v
+++ b/iris/bi/lib/fractional.v
@@ -197,26 +197,40 @@ Section fractional.
   Qed.
 End fractional.
 
+(** Marked [tc_opaque] instead [Typeclasses Opaque] so that you can use
+[iDestruct] to eliminate and [iModIntro] to introduce [internal_fractional],
+while still preventing [iFrame] and [iNext] from unfolding. *)
+Definition internal_fractional {PROP : bi} (Φ : Qp → PROP) : PROP :=
+  tc_opaque (□ ∀ p q, Φ (p + q)%Qp ∗-∗ Φ p ∗ Φ q)%I.
+Global Instance: Params (@internal_fractional) 1 := {}.
+
 Section internal_fractional.
   Context {PROP : bi}.
   Implicit Types Φ Ψ : Qp → PROP.
   Implicit Types q : Qp.
 
-  Definition internal_fractional Φ
-    := (□ (∀ p q, Φ (p + q)%Qp ∗-∗ Φ p ∗ Φ q))%I.
+  Global Instance internal_fractional_ne n :
+    Proper (pointwise_relation _ (dist n) ==> dist n) (@internal_fractional PROP).
+  Proof. solve_proper. Qed.
+  Global Instance internal_fractional_proper :
+    Proper (pointwise_relation _ (≡) ==> (≡)) (@internal_fractional PROP).
+  Proof. solve_proper. Qed.
+
+  Global Instance internal_fractional_affine Φ : Affine (internal_fractional Φ).
+  Proof. rewrite /internal_fractional /=. apply _. Qed.
   Global Instance internal_fractional_persistent Φ :
-    Persistent (internal_fractional Φ) := _.
+    Persistent (internal_fractional Φ).
+  Proof. rewrite /internal_fractional /=. apply _. Qed.
 
   Lemma fractional_internal_fractional Φ :
     Fractional Φ → ⊢ internal_fractional Φ.
   Proof.
-    intros frac.
-    iIntros "!>" (q1 q2).
-    rewrite [Φ (q1 + q2)%Qp]frac //=;  auto.
+    intros. iIntros "!>" (q1 q2).
+    rewrite [Φ (q1 + q2)%Qp]fractional //=; auto.
   Qed.
 
-  Lemma internal_fractional_iff `{!BiAffine PROP} Φ Ψ:
-    □ (∀ q, Φ q ↔ Ψ q) ⊢ internal_fractional Φ -∗ internal_fractional Ψ.
+  Lemma internal_fractional_iff Φ Ψ:
+    □ (∀ q, Φ q ∗-∗ Ψ q) ⊢ internal_fractional Φ -∗ internal_fractional Ψ.
   Proof.
     iIntros "#Hiff #HΦdup !>" (p q).
     iSplit.
diff --git a/iris_heap_lang/lib/rw_lock.v b/iris_heap_lang/lib/rw_lock.v
index 9e2196eac515a12fc33e7594ce2bee192ae5c935..2350e14a6163e4dbc12cb750f6cc1fff3bd598c3 100644
--- a/iris_heap_lang/lib/rw_lock.v
+++ b/iris_heap_lang/lib/rw_lock.v
@@ -35,7 +35,7 @@ Class rwlock `{!heapGS_gen hlc Σ} := RwLock {
   (** * General properties of the predicates *)
   is_rw_lock_persistent γ lk Φ :> Persistent (is_rw_lock γ lk Φ);
   is_rw_lock_iff γ lk Φ Ψ :
-    is_rw_lock γ lk Φ -∗ ▷ □ (∀ q,  Φ q ↔ Ψ q) -∗ is_rw_lock γ lk Ψ;
+    is_rw_lock γ lk Φ -∗ ▷ □ (∀ q,  Φ q ∗-∗ Ψ q) -∗ is_rw_lock γ lk Ψ;
   reader_locked_timeless γ q :> Timeless (reader_locked γ q);
   writer_locked_timeless γ :> Timeless (writer_locked γ);
   writer_locked_exclusive γ : writer_locked γ -∗ writer_locked γ -∗ False;
@@ -63,4 +63,3 @@ Class rwlock `{!heapGS_gen hlc Σ} := RwLock {
     {{{ RET #(); True }}};
 }.
 Global Hint Mode rwlock + + + : typeclass_instances.
-
diff --git a/iris_heap_lang/lib/rw_spin_lock.v b/iris_heap_lang/lib/rw_spin_lock.v
index 5e984bbc36b5e76ecbd03f41cfd29171db58789a..f15555acb3756e79efd9a4011553cb9dca66432e 100644
--- a/iris_heap_lang/lib/rw_spin_lock.v
+++ b/iris_heap_lang/lib/rw_spin_lock.v
@@ -96,7 +96,7 @@ Section proof.
   Qed.
 
   Lemma is_rw_lock_iff γ lk Φ Ψ :
-    is_rw_lock γ lk Φ -∗ ▷ □ (∀ q, Φ q ↔ Ψ q) -∗ is_rw_lock γ lk Ψ.
+    is_rw_lock γ lk Φ -∗ ▷ □ (∀ q, Φ q ∗-∗ Ψ q) -∗ is_rw_lock γ lk Ψ.
   Proof.
     iIntros "[#HΦdup [%l [-> #Hlockinv]]] #Hiff".
     unfold is_rw_lock.
@@ -393,7 +393,7 @@ Section proof.
   Qed.
 End proof.
 
-Program Definition rw_spin_lock `{!heapGS_gen hlc Σ, !rwlockG Σ} : rwlock :=
+Definition rw_spin_lock `{!heapGS_gen hlc Σ, !rwlockG Σ} : rwlock :=
   {| rw_lock.writer_locked_exclusive := writer_locked_exclusive;
      rw_lock.writer_locked_not_reader_locked := writer_locked_not_reader_locked;
      rw_lock.is_rw_lock_iff := is_rw_lock_iff;