diff --git a/heap_lang/proofmode.v b/heap_lang/proofmode.v
index aeb96f07d3563853b718475c898fdbd9e29e75c7..7d1113a18e573ff79e94cbcacd70db6261bcc066 100644
--- a/heap_lang/proofmode.v
+++ b/heap_lang/proofmode.v
@@ -12,14 +12,14 @@ Implicit Types P Q : iPropG heap_lang Σ.
 Implicit Types Φ : val → iPropG heap_lang Σ.
 Implicit Types Δ : envs (iResUR heap_lang (globalF Σ)).
 
-Global Instance sep_destruct_mapsto l q v :
-  SepDestruct false (l ↦{q} v) (l ↦{q/2} v) (l ↦{q/2} v).
-Proof. by rewrite /SepDestruct heap_mapsto_op_split. Qed.
+Global Instance into_sep_mapsto l q v :
+  IntoSep false (l ↦{q} v) (l ↦{q/2} v) (l ↦{q/2} v).
+Proof. by rewrite /IntoSep heap_mapsto_op_split. Qed.
 
 Lemma tac_wp_alloc Δ Δ' N E j e v Φ :
   to_val e = Some v → 
   (Δ ⊢ heap_ctx N) → nclose N ⊆ E →
-  StripLaterEnvs Δ Δ' →
+  IntoLaterEnvs Δ Δ' →
   (∀ l, ∃ Δ'',
     envs_app false (Esnoc Enil j (l ↦ v)) Δ' = Some Δ'' ∧
     (Δ'' ⊢ Φ (LitV (LitLoc l)))) →
@@ -27,60 +27,60 @@ Lemma tac_wp_alloc Δ Δ' N E j e v Φ :
 Proof.
   intros ???? HΔ. rewrite -wp_alloc // -always_and_sep_l.
   apply and_intro; first done.
-  rewrite strip_later_env_sound; apply later_mono, forall_intro=> l.
+  rewrite into_later_env_sound; apply later_mono, forall_intro=> l.
   destruct (HΔ l) as (Δ''&?&HΔ'). rewrite envs_app_sound //; simpl.
   by rewrite right_id HΔ'.
 Qed.
 
 Lemma tac_wp_load Δ Δ' N E i l q v Φ :
   (Δ ⊢ heap_ctx N) → nclose N ⊆ E →
-  StripLaterEnvs Δ Δ' →
+  IntoLaterEnvs Δ Δ' →
   envs_lookup i Δ' = Some (false, l ↦{q} v)%I →
   (Δ' ⊢ Φ v) →
   Δ ⊢ WP Load (Lit (LitLoc l)) @ E {{ Φ }}.
 Proof.
   intros. rewrite -wp_load // -always_and_sep_l. apply and_intro; first done.
-  rewrite strip_later_env_sound -later_sep envs_lookup_split //; simpl.
+  rewrite into_later_env_sound -later_sep envs_lookup_split //; simpl.
   by apply later_mono, sep_mono_r, wand_mono.
 Qed.
 
 Lemma tac_wp_store Δ Δ' Δ'' N E i l v e v' Φ :
   to_val e = Some v' →
   (Δ ⊢ heap_ctx N) → nclose N ⊆ E →
-  StripLaterEnvs Δ Δ' →
+  IntoLaterEnvs Δ Δ' →
   envs_lookup i Δ' = Some (false, l ↦ v)%I →
   envs_simple_replace i false (Esnoc Enil i (l ↦ v')) Δ' = Some Δ'' →
   (Δ'' ⊢ Φ (LitV LitUnit)) → Δ ⊢ WP Store (Lit (LitLoc l)) e @ E {{ Φ }}.
 Proof.
   intros. rewrite -wp_store // -always_and_sep_l. apply and_intro; first done.
-  rewrite strip_later_env_sound -later_sep envs_simple_replace_sound //; simpl.
+  rewrite into_later_env_sound -later_sep envs_simple_replace_sound //; simpl.
   rewrite right_id. by apply later_mono, sep_mono_r, wand_mono.
 Qed.
 
 Lemma tac_wp_cas_fail Δ Δ' N E i l q v e1 v1 e2 v2 Φ :
   to_val e1 = Some v1 → to_val e2 = Some v2 →
   (Δ ⊢ heap_ctx N) → nclose N ⊆ E →
-  StripLaterEnvs Δ Δ' →
+  IntoLaterEnvs Δ Δ' →
   envs_lookup i Δ' = Some (false, l ↦{q} v)%I → v ≠ v1 →
   (Δ' ⊢ Φ (LitV (LitBool false))) →
   Δ ⊢ WP CAS (Lit (LitLoc l)) e1 e2 @ E {{ Φ }}.
 Proof.
   intros. rewrite -wp_cas_fail // -always_and_sep_l. apply and_intro; first done.
-  rewrite strip_later_env_sound -later_sep envs_lookup_split //; simpl.
+  rewrite into_later_env_sound -later_sep envs_lookup_split //; simpl.
   by apply later_mono, sep_mono_r, wand_mono.
 Qed.
 
 Lemma tac_wp_cas_suc Δ Δ' Δ'' N E i l v e1 v1 e2 v2 Φ :
   to_val e1 = Some v1 → to_val e2 = Some v2 →
   (Δ ⊢ heap_ctx N) → nclose N ⊆ E →
-  StripLaterEnvs Δ Δ' →
+  IntoLaterEnvs Δ Δ' →
   envs_lookup i Δ' = Some (false, l ↦ v)%I → v = v1 →
   envs_simple_replace i false (Esnoc Enil i (l ↦ v2)) Δ' = Some Δ'' →
   (Δ'' ⊢ Φ (LitV (LitBool true))) → Δ ⊢ WP CAS (Lit (LitLoc l)) e1 e2 @ E {{ Φ }}.
 Proof.
   intros; subst.
   rewrite -wp_cas_suc // -always_and_sep_l. apply and_intro; first done.
-  rewrite strip_later_env_sound -later_sep envs_simple_replace_sound //; simpl.
+  rewrite into_later_env_sound -later_sep envs_simple_replace_sound //; simpl.
   rewrite right_id. by apply later_mono, sep_mono_r, wand_mono.
 Qed.
 End heap.
diff --git a/proofmode/coq_tactics.v b/proofmode/coq_tactics.v
index fe01f3c17fc37162a686c6762f58f717efc134da..9611f7dcf7507f97354f63ad8ae6998f1ba3dafe 100644
--- a/proofmode/coq_tactics.v
+++ b/proofmode/coq_tactics.v
@@ -292,19 +292,19 @@ Proof.
 Qed.
 
 (** * Basic rules *)
-Class ToAssumption (p : bool) (P Q : uPred M) := to_assumption : □?p P ⊢ Q.
-Arguments to_assumption _ _ _ {_}.
-Global Instance to_assumption_exact p P : ToAssumption p P P.
-Proof. destruct p; by rewrite /ToAssumption /= ?always_elim. Qed.
-Global Instance to_assumption_always_l p P Q :
-  ToAssumption p P Q → ToAssumption p (□ P) Q.
-Proof. rewrite /ToAssumption=><-. by rewrite always_elim. Qed.
-Global Instance to_assumption_always_r P Q :
-  ToAssumption true P Q → ToAssumption true P (□ Q).
-Proof. rewrite /ToAssumption=><-. by rewrite always_always. Qed.
+Class FromAssumption (p : bool) (P Q : uPred M) := from_assumption : □?p P ⊢ Q.
+Arguments from_assumption _ _ _ {_}.
+Global Instance from_assumption_exact p P : FromAssumption p P P.
+Proof. destruct p; by rewrite /FromAssumption /= ?always_elim. Qed.
+Global Instance from_assumption_always_l p P Q :
+  FromAssumption p P Q → FromAssumption p (□ P) Q.
+Proof. rewrite /FromAssumption=><-. by rewrite always_elim. Qed.
+Global Instance from_assumption_always_r P Q :
+  FromAssumption true P Q → FromAssumption true P (□ Q).
+Proof. rewrite /FromAssumption=><-. by rewrite always_always. Qed.
 
 Lemma tac_assumption Δ i p P Q :
-  envs_lookup i Δ = Some (p,P) → ToAssumption p P Q → Δ ⊢ Q.
+  envs_lookup i Δ = Some (p,P) → FromAssumption p P Q → Δ ⊢ Q.
 Proof. intros. by rewrite envs_lookup_sound // sep_elim_l. Qed.
 
 Lemma tac_rename Δ Δ' i j p P Q :
@@ -327,96 +327,96 @@ Lemma tac_ex_falso Δ Q : (Δ ⊢ False) → Δ ⊢ Q.
 Proof. by rewrite -(False_elim Q). Qed.
 
 (** * Pure *)
-Class ToPure (P : uPred M) (φ : Prop) := to_pure : P ⊣⊢ ■ φ.
-Arguments to_pure : clear implicits.
-Global Instance to_pure_pure φ : ToPure (■ φ) φ.
+Class IsPure (P : uPred M) (φ : Prop) := is_pure : P ⊣⊢ ■ φ.
+Arguments is_pure : clear implicits.
+Global Instance is_pure_pure φ : IsPure (■ φ) φ.
 Proof. done. Qed.
-Global Instance to_pure_eq {A : cofeT} (a b : A) :
-  Timeless a → ToPure (a ≡ b) (a ≡ b).
+Global Instance is_pure_eq {A : cofeT} (a b : A) :
+  Timeless a → IsPure (a ≡ b) (a ≡ b).
 Proof. intros; red. by rewrite timeless_eq. Qed.
-Global Instance to_pure_valid `{CMRADiscrete A} (a : A) : ToPure (✓ a) (✓ a).
+Global Instance is_pure_valid `{CMRADiscrete A} (a : A) : IsPure (✓ a) (✓ a).
 Proof. intros; red. by rewrite discrete_valid. Qed.
 
-Lemma tac_pure_intro Δ Q (φ : Prop) : ToPure Q φ → φ → Δ ⊢ Q.
+Lemma tac_pure_intro Δ Q (φ : Prop) : IsPure Q φ → φ → Δ ⊢ Q.
 Proof. intros ->. apply pure_intro. Qed.
 
 Lemma tac_pure Δ Δ' i p P φ Q :
-  envs_lookup_delete i Δ = Some (p, P, Δ') → ToPure P φ →
+  envs_lookup_delete i Δ = Some (p, P, Δ') → IsPure P φ →
   (φ → Δ' ⊢ Q) → Δ ⊢ Q.
 Proof.
   intros ?? HQ. rewrite envs_lookup_delete_sound' //; simpl.
-  rewrite (to_pure P); by apply pure_elim_sep_l.
+  rewrite (is_pure P); by apply pure_elim_sep_l.
 Qed.
 
 Lemma tac_pure_revert Δ φ Q : (Δ ⊢ ■ φ → Q) → (φ → Δ ⊢ Q).
 Proof. intros HΔ ?. by rewrite HΔ pure_equiv // left_id. Qed.
 
 (** * Later *)
-Class StripLaterR (P Q : uPred M) := strip_later_r : P ⊢ ▷ Q.
-Arguments strip_later_r _ _ {_}.
-Class StripLaterL (P Q : uPred M) := strip_later_l : ▷ Q ⊢ P.
-Arguments strip_later_l _ _ {_}.
-Class StripLaterEnv (Γ1 Γ2 : env (uPred M)) :=
-  strip_later_env : env_Forall2 StripLaterR Γ1 Γ2.
-Class StripLaterEnvs (Δ1 Δ2 : envs M) := {
-  strip_later_persistent: StripLaterEnv (env_persistent Δ1) (env_persistent Δ2);
-  strip_later_spatial: StripLaterEnv (env_spatial Δ1) (env_spatial Δ2)
+Class IntoLater (P Q : uPred M) := into_later : P ⊢ ▷ Q.
+Arguments into_later _ _ {_}.
+Class FromLater (P Q : uPred M) := from_later : ▷ Q ⊢ P.
+Arguments from_later _ _ {_}.
+Class IntoLaterEnv (Γ1 Γ2 : env (uPred M)) :=
+  into_later_env : env_Forall2 IntoLater Γ1 Γ2.
+Class IntoLaterEnvs (Δ1 Δ2 : envs M) := {
+  into_later_persistent: IntoLaterEnv (env_persistent Δ1) (env_persistent Δ2);
+  into_later_spatial: IntoLaterEnv (env_spatial Δ1) (env_spatial Δ2)
 }.
 
-Global Instance strip_later_r_fallthrough P : StripLaterR P P | 1000.
+Global Instance into_later_fallthrough P : IntoLater P P | 1000.
 Proof. apply later_intro. Qed.
-Global Instance strip_later_r_later P : StripLaterR (â–· P) P.
+Global Instance into_later_later P : IntoLater (â–· P) P.
 Proof. done. Qed.
-Global Instance strip_later_r_and P1 P2 Q1 Q2 :
-  StripLaterR P1 Q1 → StripLaterR P2 Q2 → StripLaterR (P1 ∧ P2) (Q1 ∧ Q2).
+Global Instance into_later_and P1 P2 Q1 Q2 :
+  IntoLater P1 Q1 → IntoLater P2 Q2 → IntoLater (P1 ∧ P2) (Q1 ∧ Q2).
 Proof. intros ??; red. by rewrite later_and; apply and_mono. Qed.
-Global Instance strip_later_r_or P1 P2 Q1 Q2 :
-  StripLaterR P1 Q1 → StripLaterR P2 Q2 → StripLaterR (P1 ∨ P2) (Q1 ∨ Q2).
+Global Instance into_later_or P1 P2 Q1 Q2 :
+  IntoLater P1 Q1 → IntoLater P2 Q2 → IntoLater (P1 ∨ P2) (Q1 ∨ Q2).
 Proof. intros ??; red. by rewrite later_or; apply or_mono. Qed.
-Global Instance strip_later_r_sep P1 P2 Q1 Q2 :
-  StripLaterR P1 Q1 → StripLaterR P2 Q2 → StripLaterR (P1 ★ P2) (Q1 ★ Q2).
+Global Instance into_later_sep P1 P2 Q1 Q2 :
+  IntoLater P1 Q1 → IntoLater P2 Q2 → IntoLater (P1 ★ P2) (Q1 ★ Q2).
 Proof. intros ??; red. by rewrite later_sep; apply sep_mono. Qed.
 
-Global Instance strip_later_r_big_sepM `{Countable K} {A}
+Global Instance into_later_big_sepM `{Countable K} {A}
     (Φ Ψ : K → A → uPred M) (m : gmap K A) :
-  (∀ x k, StripLaterR (Φ k x) (Ψ k x)) →
-  StripLaterR ([★ map] k ↦ x ∈ m, Φ k x) ([★ map] k ↦ x ∈ m, Ψ k x).
+  (∀ x k, IntoLater (Φ k x) (Ψ k x)) →
+  IntoLater ([★ map] k ↦ x ∈ m, Φ k x) ([★ map] k ↦ x ∈ m, Ψ k x).
 Proof.
-  rewrite /StripLaterR=> ?. rewrite big_sepM_later; by apply big_sepM_mono.
+  rewrite /IntoLater=> ?. rewrite big_sepM_later; by apply big_sepM_mono.
 Qed.
-Global Instance strip_later_r_big_sepS `{Countable A}
+Global Instance into_later_big_sepS `{Countable A}
     (Φ Ψ : A → uPred M) (X : gset A) :
-  (∀ x, StripLaterR (Φ x) (Ψ x)) →
-  StripLaterR ([★ set] x ∈ X, Φ x) ([★ set] x ∈ X, Ψ x).
+  (∀ x, IntoLater (Φ x) (Ψ x)) →
+  IntoLater ([★ set] x ∈ X, Φ x) ([★ set] x ∈ X, Ψ x).
 Proof.
-  rewrite /StripLaterR=> ?. rewrite big_sepS_later; by apply big_sepS_mono.
+  rewrite /IntoLater=> ?. rewrite big_sepS_later; by apply big_sepS_mono.
 Qed.
 
-Global Instance strip_later_l_later P : StripLaterL (â–· P) P.
+Global Instance from_later_later P : FromLater (â–· P) P.
 Proof. done. Qed.
-Global Instance strip_later_l_and P1 P2 Q1 Q2 :
-  StripLaterL P1 Q1 → StripLaterL P2 Q2 → StripLaterL (P1 ∧ P2) (Q1 ∧ Q2).
+Global Instance from_later_and P1 P2 Q1 Q2 :
+  FromLater P1 Q1 → FromLater P2 Q2 → FromLater (P1 ∧ P2) (Q1 ∧ Q2).
 Proof. intros ??; red. by rewrite later_and; apply and_mono. Qed.
-Global Instance strip_later_l_or P1 P2 Q1 Q2 :
-  StripLaterL P1 Q1 → StripLaterL P2 Q2 → StripLaterL (P1 ∨ P2) (Q1 ∨ Q2).
+Global Instance from_later_or P1 P2 Q1 Q2 :
+  FromLater P1 Q1 → FromLater P2 Q2 → FromLater (P1 ∨ P2) (Q1 ∨ Q2).
 Proof. intros ??; red. by rewrite later_or; apply or_mono. Qed.
-Global Instance strip_later_l_sep P1 P2 Q1 Q2 :
-  StripLaterL P1 Q1 → StripLaterL P2 Q2 → StripLaterL (P1 ★ P2) (Q1 ★ Q2).
+Global Instance from_later_sep P1 P2 Q1 Q2 :
+  FromLater P1 Q1 → FromLater P2 Q2 → FromLater (P1 ★ P2) (Q1 ★ Q2).
 Proof. intros ??; red. by rewrite later_sep; apply sep_mono. Qed.
 
-Global Instance strip_later_env_nil : StripLaterEnv Enil Enil.
+Global Instance into_later_env_nil : IntoLaterEnv Enil Enil.
 Proof. constructor. Qed.
-Global Instance strip_later_env_snoc Γ1 Γ2 i P Q :
-  StripLaterEnv Γ1 Γ2 → StripLaterR P Q →
-  StripLaterEnv (Esnoc Γ1 i P) (Esnoc Γ2 i Q).
+Global Instance into_later_env_snoc Γ1 Γ2 i P Q :
+  IntoLaterEnv Γ1 Γ2 → IntoLater P Q →
+  IntoLaterEnv (Esnoc Γ1 i P) (Esnoc Γ2 i Q).
 Proof. by constructor. Qed.
 
-Global Instance strip_later_envs Γp1 Γp2 Γs1 Γs2 :
-  StripLaterEnv Γp1 Γp2 → StripLaterEnv Γs1 Γs2 →
-  StripLaterEnvs (Envs Γp1 Γs1) (Envs Γp2 Γs2).
+Global Instance into_later_envs Γp1 Γp2 Γs1 Γs2 :
+  IntoLaterEnv Γp1 Γp2 → IntoLaterEnv Γs1 Γs2 →
+  IntoLaterEnvs (Envs Γp1 Γs1) (Envs Γp2 Γs2).
 Proof. by split. Qed.
 
-Lemma strip_later_env_sound Δ1 Δ2 : StripLaterEnvs Δ1 Δ2 → Δ1 ⊢ ▷ Δ2.
+Lemma into_later_env_sound Δ1 Δ2 : IntoLaterEnvs Δ1 Δ2 → Δ1 ⊢ ▷ Δ2.
 Proof.
   intros [Hp Hs]; rewrite /of_envs /= !later_sep -always_later.
   repeat apply sep_mono; try apply always_mono.
@@ -427,8 +427,8 @@ Proof.
 Qed.
 
 Lemma tac_next Δ Δ' Q Q' :
-  StripLaterEnvs Δ Δ' → StripLaterL Q Q' → (Δ' ⊢ Q') → Δ ⊢ Q.
-Proof. intros ?? HQ. by rewrite -(strip_later_l Q) strip_later_env_sound HQ. Qed.
+  IntoLaterEnvs Δ Δ' → FromLater Q Q' → (Δ' ⊢ Q') → Δ ⊢ Q.
+Proof. intros ?? HQ. by rewrite -(from_later Q) into_later_env_sound HQ. Qed.
 
 Lemma tac_löb Δ Δ' i Q :
   envs_persistent Δ = true →
@@ -445,24 +445,24 @@ Qed.
 Lemma tac_always_intro Δ Q : envs_persistent Δ = true → (Δ ⊢ Q) → Δ ⊢ □ Q.
 Proof. intros. by apply: always_intro. Qed.
 
-Class ToPersistentP (P Q : uPred M) := to_persistentP : P ⊢ □ Q.
-Arguments to_persistentP : clear implicits.
-Global Instance to_persistentP_always_trans P Q :
-  ToPersistentP P Q → ToPersistentP (□ P) Q | 0.
-Proof. rewrite /ToPersistentP=> ->. by rewrite always_always. Qed.
-Global Instance to_persistentP_always P : ToPersistentP (â–¡ P) P | 1.
+Class IntoPersistentP (P Q : uPred M) := into_persistentP : P ⊢ □ Q.
+Arguments into_persistentP : clear implicits.
+Global Instance into_persistentP_always_trans P Q :
+  IntoPersistentP P Q → IntoPersistentP (□ P) Q | 0.
+Proof. rewrite /IntoPersistentP=> ->. by rewrite always_always. Qed.
+Global Instance into_persistentP_always P : IntoPersistentP (â–¡ P) P | 1.
 Proof. done. Qed.
-Global Instance to_persistentP_persistent P :
-  PersistentP P → ToPersistentP P P | 100.
+Global Instance into_persistentP_persistent P :
+  PersistentP P → IntoPersistentP P P | 100.
 Proof. done. Qed.
 
 Lemma tac_persistent Δ Δ' i p P P' Q :
-  envs_lookup i Δ = Some (p, P) → ToPersistentP P P' →
+  envs_lookup i Δ = Some (p, P) → IntoPersistentP P P' →
   envs_replace i p true (Esnoc Enil i P') Δ = Some Δ' →
   (Δ' ⊢ Q) → Δ ⊢ Q.
 Proof.
   intros ??? <-. rewrite envs_replace_sound //; simpl.
-  by rewrite right_id (to_persistentP P) always_if_always wand_elim_r.
+  by rewrite right_id (into_persistentP P) always_if_always wand_elim_r.
 Qed.
 
 (** * Implication and wand *)
@@ -475,16 +475,16 @@ Proof.
   by rewrite right_id always_wand_impl always_elim HQ.
 Qed.
 Lemma tac_impl_intro_persistent Δ Δ' i P P' Q :
-  ToPersistentP P P' →
+  IntoPersistentP P P' →
   envs_app true (Esnoc Enil i P') Δ = Some Δ' →
   (Δ' ⊢ Q) → Δ ⊢ P → Q.
 Proof.
   intros ?? HQ. rewrite envs_app_sound //; simpl. apply impl_intro_l.
-  by rewrite right_id {1}(to_persistentP P) always_and_sep_l wand_elim_r.
+  by rewrite right_id {1}(into_persistentP P) always_and_sep_l wand_elim_r.
 Qed.
-Lemma tac_impl_intro_pure Δ P φ Q : ToPure P φ → (φ → Δ ⊢ Q) → Δ ⊢ P → Q.
+Lemma tac_impl_intro_pure Δ P φ Q : IsPure P φ → (φ → Δ ⊢ Q) → Δ ⊢ P → Q.
 Proof.
-  intros. by apply impl_intro_l; rewrite (to_pure P); apply pure_elim_l.
+  intros. by apply impl_intro_l; rewrite (is_pure P); apply pure_elim_l.
 Qed.
 
 Lemma tac_wand_intro Δ Δ' i P Q :
@@ -493,37 +493,37 @@ Proof.
   intros ? HQ. rewrite envs_app_sound //; simpl. by rewrite right_id HQ.
 Qed.
 Lemma tac_wand_intro_persistent Δ Δ' i P P' Q :
-  ToPersistentP P P' →
+  IntoPersistentP P P' →
   envs_app true (Esnoc Enil i P') Δ = Some Δ' →
   (Δ' ⊢ Q) → Δ ⊢ P -★ Q.
 Proof.
   intros. rewrite envs_app_sound //; simpl.
   rewrite right_id. by apply wand_mono.
 Qed.
-Lemma tac_wand_intro_pure Δ P φ Q : ToPure P φ → (φ → Δ ⊢ Q) → Δ ⊢ P -★ Q.
+Lemma tac_wand_intro_pure Δ P φ Q : IsPure P φ → (φ → Δ ⊢ Q) → Δ ⊢ P -★ Q.
 Proof.
-  intros. by apply wand_intro_l; rewrite (to_pure P); apply pure_elim_sep_l.
+  intros. by apply wand_intro_l; rewrite (is_pure P); apply pure_elim_sep_l.
 Qed.
 
-Class ToWand (R P Q : uPred M) := to_wand : R ⊢ P -★ Q.
-Arguments to_wand : clear implicits.
-Global Instance to_wand_wand P Q : ToWand (P -★ Q) P Q.
+Class IntoWand (R P Q : uPred M) := into_wand : R ⊢ P -★ Q.
+Arguments into_wand : clear implicits.
+Global Instance into_wand_wand P Q : IntoWand (P -★ Q) P Q.
 Proof. done. Qed.
-Global Instance to_wand_impl P Q : ToWand (P → Q) P Q.
+Global Instance into_wand_impl P Q : IntoWand (P → Q) P Q.
 Proof. apply impl_wand. Qed.
-Global Instance to_wand_iff_l P Q : ToWand (P ↔ Q) P Q.
+Global Instance into_wand_iff_l P Q : IntoWand (P ↔ Q) P Q.
 Proof. by apply and_elim_l', impl_wand. Qed.
-Global Instance to_wand_iff_r P Q : ToWand (P ↔ Q) Q P.
+Global Instance into_wand_iff_r P Q : IntoWand (P ↔ Q) Q P.
 Proof. apply and_elim_r', impl_wand. Qed.
-Global Instance to_wand_always R P Q : ToWand R P Q → ToWand (□ R) P Q.
-+Proof. rewrite /ToWand=> ->. apply always_elim. Qed.
+Global Instance into_wand_always R P Q : IntoWand R P Q → IntoWand (□ R) P Q.
+Proof. rewrite /IntoWand=> ->. apply always_elim. Qed.
 
 (* This is pretty much [tac_specialize_assert] with [js:=[j]] and [tac_exact],
 but it is doing some work to keep the order of hypotheses preserved. *)
 Lemma tac_specialize Δ Δ' Δ'' i p j q P1 P2 R Q :
   envs_lookup_delete i Δ = Some (p, P1, Δ') →
   envs_lookup j (if p then Δ else Δ') = Some (q, R) →
-  ToWand R P1 P2 →
+  IntoWand R P1 P2 →
   match p with
   | true  => envs_simple_replace j q (Esnoc Enil j P2) Δ
   | false => envs_replace j q false (Esnoc Enil j P2) Δ'
@@ -533,22 +533,22 @@ Lemma tac_specialize Δ Δ' Δ'' i p j q P1 P2 R Q :
 Proof.
   intros [? ->]%envs_lookup_delete_Some ??? <-. destruct p.
   - rewrite envs_lookup_persistent_sound // envs_simple_replace_sound //; simpl.
-    rewrite assoc (to_wand R) (always_elim_if q) -always_if_sep wand_elim_r.
+    rewrite assoc (into_wand R) (always_elim_if q) -always_if_sep wand_elim_r.
     by rewrite right_id wand_elim_r.
   - rewrite envs_lookup_sound //; simpl.
     rewrite envs_lookup_sound // (envs_replace_sound' _ Δ'') //; simpl.
-    by rewrite right_id assoc (to_wand R) always_if_elim wand_elim_r wand_elim_r.
+    by rewrite right_id assoc (into_wand R) always_if_elim wand_elim_r wand_elim_r.
 Qed.
 
-Class ToAssert (P : uPred M) (Q : uPred M) (R : uPred M) :=
-  to_assert : R ★ (P -★ Q) ⊢ Q.
-Global Arguments to_assert _ _ _ {_}.
-Lemma to_assert_fallthrough P Q : ToAssert P Q P.
-Proof. by rewrite /ToAssert wand_elim_r. Qed.
+Class IntoAssert (P : uPred M) (Q : uPred M) (R : uPred M) :=
+  into_assert : R ★ (P -★ Q) ⊢ Q.
+Global Arguments into_assert _ _ _ {_}.
+Lemma into_assert_fallthrough P Q : IntoAssert P Q P.
+Proof. by rewrite /IntoAssert wand_elim_r. Qed.
 
 Lemma tac_specialize_assert Δ Δ' Δ1 Δ2' j q lr js R P1 P2 P1' Q :
   envs_lookup_delete j Δ = Some (q, R, Δ') →
-  ToWand R P1 P2 → ToAssert P1 Q P1' →
+  IntoWand R P1 P2 → IntoAssert P1 Q P1' →
   ('(Δ1,Δ2) ← envs_split lr js Δ';
     Δ2' ← envs_app false (Esnoc Enil j P2) Δ2;
     Some (Δ1,Δ2')) = Some (Δ1,Δ2') → (* does not preserve position of [j] *)
@@ -559,24 +559,24 @@ Proof.
     destruct (envs_app _ _ _) eqn:?; simplify_eq/=.
   rewrite envs_lookup_sound // envs_split_sound //.
   rewrite (envs_app_sound Δ2) //; simpl.
-  rewrite right_id (to_wand R) HP1 assoc -(comm _ P1') -assoc.
-  rewrite -(to_assert P1 Q); apply sep_mono_r, wand_intro_l.
+  rewrite right_id (into_wand R) HP1 assoc -(comm _ P1') -assoc.
+  rewrite -(into_assert P1 Q); apply sep_mono_r, wand_intro_l.
   by rewrite always_if_elim assoc !wand_elim_r.
 Qed.
 
 Lemma tac_specialize_pure Δ Δ' j q R P1 P2 φ Q :
   envs_lookup j Δ = Some (q, R) →
-  ToWand R P1 P2 → ToPure P1 φ →
+  IntoWand R P1 P2 → IsPure P1 φ →
   envs_simple_replace j q (Esnoc Enil j P2) Δ = Some Δ' →
   φ → (Δ' ⊢ Q) → Δ ⊢ Q.
 Proof.
   intros. rewrite envs_simple_replace_sound //; simpl.
-  by rewrite right_id (to_wand R) (to_pure P1) pure_equiv // wand_True wand_elim_r.
+  by rewrite right_id (into_wand R) (is_pure P1) pure_equiv // wand_True wand_elim_r.
 Qed.
 
 Lemma tac_specialize_persistent Δ Δ' Δ'' j q P1 P2 R Q :
   envs_lookup_delete j Δ = Some (q, R, Δ') →
-  ToWand R P1 P2 →
+  IntoWand R P1 P2 →
   envs_simple_replace j q (Esnoc Enil j P2) Δ = Some Δ'' →
   (Δ' ⊢ P1) → (PersistentP P1 ∨ PersistentP P2) →
   (Δ'' ⊢ Q) → Δ ⊢ Q.
@@ -586,11 +586,11 @@ Proof.
     rewrite -(idemp uPred_and (envs_delete _ _ _)).
     rewrite {1}HP1 (persistentP P1) always_and_sep_l assoc.
     rewrite envs_simple_replace_sound' //; simpl.
-    rewrite right_id (to_wand R) (always_elim_if q) -always_if_sep wand_elim_l.
+    rewrite right_id (into_wand R) (always_elim_if q) -always_if_sep wand_elim_l.
     by rewrite wand_elim_r.
   - rewrite -(idemp uPred_and Δ) {1}envs_lookup_sound //; simpl; rewrite HP1.
     rewrite envs_simple_replace_sound //; simpl.
-    rewrite (sep_elim_r _ (_ -★ _)) right_id (to_wand R) always_if_elim.
+    rewrite (sep_elim_r _ (_ -★ _)) right_id (into_wand R) always_if_elim.
     by rewrite wand_elim_l always_and_sep_l -{1}(always_if_always q P2) wand_elim_r.
 Qed.
 
@@ -610,7 +610,7 @@ Proof.
 Qed.
 
 Lemma tac_assert Δ Δ1 Δ2 Δ2' lr js j P Q R :
-  ToAssert P Q R →
+  IntoAssert P Q R →
   envs_split lr js Δ = Some (Δ1,Δ2) →
   envs_app false (Esnoc Enil j P) Δ2 = Some Δ2' →
   (Δ1 ⊢ R) → (Δ2' ⊢ Q) → Δ ⊢ Q.
@@ -630,22 +630,24 @@ Proof.
 Qed.
 
 (** Whenever posing [lem : True ⊢ Q] as [H] we want it to appear as [H : Q] and
-not as [H : True -★ Q]. The class [ToPosedProof] is used to strip off the
+not as [H : True -★ Q]. The class [IntoPosedProof] is used to strip off the
 [True]. Note that [to_posed_proof_True] is declared using a [Hint Extern] to
 make sure it is not used while posing [lem : ?P ⊢ Q] with [?P] an evar. *)
-Class ToPosedProof (P1 P2 R : uPred M) := to_pose_proof : (P1 ⊢ P2) → True ⊢ R.
-Arguments to_pose_proof : clear implicits.
-Instance to_posed_proof_True P : ToPosedProof True P P.
-Proof. by rewrite /ToPosedProof. Qed.
-Global Instance to_posed_proof_wand P Q : ToPosedProof P Q (P -★ Q).
-Proof. rewrite /ToPosedProof. apply entails_wand. Qed.
+Class IntoPosedProof (P1 P2 R : uPred M) :=
+  into_pose_proof : (P1 ⊢ P2) → True ⊢ R.
+Arguments into_pose_proof : clear implicits.
+Instance to_posed_proof_True P : IntoPosedProof True P P.
+Proof. by rewrite /IntoPosedProof. Qed.
+Global Instance to_posed_proof_wand P Q : IntoPosedProof P Q (P -★ Q).
+Proof. rewrite /IntoPosedProof. apply entails_wand. Qed.
 
 Lemma tac_pose_proof Δ Δ' j P1 P2 R Q :
-  (P1 ⊢ P2) → ToPosedProof P1 P2 R → envs_app true (Esnoc Enil j R) Δ = Some Δ' →
+  (P1 ⊢ P2) → IntoPosedProof P1 P2 R →
+  envs_app true (Esnoc Enil j R) Δ = Some Δ' →
   (Δ' ⊢ Q) → Δ ⊢ Q.
 Proof.
   intros HP ?? <-. rewrite envs_app_sound //; simpl.
-  by rewrite right_id -(to_pose_proof P1 P2 R) // always_pure wand_True.
+  by rewrite right_id -(into_pose_proof P1 P2 R) // always_pure wand_True.
 Qed.
 
 Lemma tac_pose_proof_hyp Δ Δ' Δ'' i p j P Q :
@@ -661,11 +663,11 @@ Proof.
 Qed.
 
 Lemma tac_apply Δ Δ' i p R P1 P2 :
-  envs_lookup_delete i Δ = Some (p, R, Δ') → ToWand R P1 P2 →
+  envs_lookup_delete i Δ = Some (p, R, Δ') → IntoWand R P1 P2 →
   (Δ' ⊢ P1) → Δ ⊢ P2.
 Proof.
   intros ?? HP1. rewrite envs_lookup_delete_sound' //.
-  by rewrite (to_wand R) HP1 wand_elim_l.
+  by rewrite (into_wand R) HP1 wand_elim_l.
 Qed.
 
 (** * Rewriting *)
@@ -703,71 +705,71 @@ Proof.
 Qed.
 
 (** * Conjunction splitting *)
-Class AndSplit (P Q1 Q2 : uPred M) := and_split : Q1 ∧ Q2 ⊢ P.
-Arguments and_split : clear implicits.
+Class FromAnd (P Q1 Q2 : uPred M) := from_and : Q1 ∧ Q2 ⊢ P.
+Arguments from_and : clear implicits.
 
-Global Instance and_split_and P1 P2 : AndSplit (P1 ∧ P2) P1 P2.
+Global Instance from_and_and P1 P2 : FromAnd (P1 ∧ P2) P1 P2.
 Proof. done. Qed.
-Global Instance and_split_sep_persistent_l P1 P2 :
-  PersistentP P1 → AndSplit (P1 ★ P2) P1 P2.
-Proof. intros. by rewrite /AndSplit always_and_sep_l. Qed.
-Global Instance and_split_sep_persistent_r P1 P2 :
-  PersistentP P2 → AndSplit (P1 ★ P2) P1 P2.
-Proof. intros. by rewrite /AndSplit always_and_sep_r. Qed.
-Global Instance and_split_always P Q1 Q2 :
-  AndSplit P Q1 Q2 → AndSplit (□ P) (□ Q1) (□ Q2).
-Proof. rewrite /AndSplit=> <-. by rewrite always_and. Qed.
-Global Instance and_split_later P Q1 Q2 :
-  AndSplit P Q1 Q2 → AndSplit (▷ P) (▷ Q1) (▷ Q2).
-Proof. rewrite /AndSplit=> <-. by rewrite later_and. Qed.
-
-Lemma tac_and_split Δ P Q1 Q2 : AndSplit P Q1 Q2 → (Δ ⊢ Q1) → (Δ ⊢ Q2) → Δ ⊢ P.
-Proof. intros. rewrite -(and_split P). by apply and_intro. Qed.
+Global Instance from_and_sep_persistent_l P1 P2 :
+  PersistentP P1 → FromAnd (P1 ★ P2) P1 P2.
+Proof. intros. by rewrite /FromAnd always_and_sep_l. Qed.
+Global Instance from_and_sep_persistent_r P1 P2 :
+  PersistentP P2 → FromAnd (P1 ★ P2) P1 P2.
+Proof. intros. by rewrite /FromAnd always_and_sep_r. Qed.
+Global Instance from_and_always P Q1 Q2 :
+  FromAnd P Q1 Q2 → FromAnd (□ P) (□ Q1) (□ Q2).
+Proof. rewrite /FromAnd=> <-. by rewrite always_and. Qed.
+Global Instance from_and_later P Q1 Q2 :
+  FromAnd P Q1 Q2 → FromAnd (▷ P) (▷ Q1) (▷ Q2).
+Proof. rewrite /FromAnd=> <-. by rewrite later_and. Qed.
+
+Lemma tac_and_split Δ P Q1 Q2 : FromAnd P Q1 Q2 → (Δ ⊢ Q1) → (Δ ⊢ Q2) → Δ ⊢ P.
+Proof. intros. rewrite -(from_and P). by apply and_intro. Qed.
 
 (** * Separating conjunction splitting *)
-Class SepSplit (P Q1 Q2 : uPred M) := sep_split : Q1 ★ Q2 ⊢ P.
-Arguments sep_split : clear implicits.
+Class FromSep (P Q1 Q2 : uPred M) := from_sep : Q1 ★ Q2 ⊢ P.
+Arguments from_sep : clear implicits.
 
-Global Instance sep_split_sep P1 P2 : SepSplit (P1 ★ P2) P1 P2 | 100.
+Global Instance from_sep_sep P1 P2 : FromSep (P1 ★ P2) P1 P2 | 100.
 Proof. done. Qed.
-Global Instance sep_split_always P Q1 Q2 :
-  SepSplit P Q1 Q2 → SepSplit (□ P) (□ Q1) (□ Q2).
-Proof. rewrite /SepSplit=> <-. by rewrite always_sep. Qed.
-Global Instance sep_split_later P Q1 Q2 :
-  SepSplit P Q1 Q2 → SepSplit (▷ P) (▷ Q1) (▷ Q2).
-Proof. rewrite /SepSplit=> <-. by rewrite later_sep. Qed.
-
-Global Instance sep_split_ownM (a b : M) :
-  SepSplit (uPred_ownM (a â‹… b)) (uPred_ownM a) (uPred_ownM b) | 99.
-Proof. by rewrite /SepSplit ownM_op. Qed.
-Global Instance sep_split_big_sepM
+Global Instance from_sep_always P Q1 Q2 :
+  FromSep P Q1 Q2 → FromSep (□ P) (□ Q1) (□ Q2).
+Proof. rewrite /FromSep=> <-. by rewrite always_sep. Qed.
+Global Instance from_sep_later P Q1 Q2 :
+  FromSep P Q1 Q2 → FromSep (▷ P) (▷ Q1) (▷ Q2).
+Proof. rewrite /FromSep=> <-. by rewrite later_sep. Qed.
+
+Global Instance from_sep_ownM (a b : M) :
+  FromSep (uPred_ownM (a â‹… b)) (uPred_ownM a) (uPred_ownM b) | 99.
+Proof. by rewrite /FromSep ownM_op. Qed.
+Global Instance from_sep_big_sepM
     `{Countable K} {A} (Φ Ψ1 Ψ2 : K → A → uPred M) m :
-  (∀ k x, SepSplit (Φ k x) (Ψ1 k x) (Ψ2 k x)) →
-  SepSplit ([★ map] k ↦ x ∈ m, Φ k x)
+  (∀ k x, FromSep (Φ k x) (Ψ1 k x) (Ψ2 k x)) →
+  FromSep ([★ map] k ↦ x ∈ m, Φ k x)
     ([★ map] k ↦ x ∈ m, Ψ1 k x) ([★ map] k ↦ x ∈ m, Ψ2 k x).
 Proof.
-  rewrite /SepSplit=> ?. rewrite -big_sepM_sepM. by apply big_sepM_mono.
+  rewrite /FromSep=> ?. rewrite -big_sepM_sepM. by apply big_sepM_mono.
 Qed.
-Global Instance sep_split_big_sepS `{Countable A} (Φ Ψ1 Ψ2 : A → uPred M) X :
-  (∀ x, SepSplit (Φ x) (Ψ1 x) (Ψ2 x)) →
-  SepSplit ([★ set] x ∈ X, Φ x) ([★ set] x ∈ X, Ψ1 x) ([★ set] x ∈ X, Ψ2 x).
+Global Instance from_sep_big_sepS `{Countable A} (Φ Ψ1 Ψ2 : A → uPred M) X :
+  (∀ x, FromSep (Φ x) (Ψ1 x) (Ψ2 x)) →
+  FromSep ([★ set] x ∈ X, Φ x) ([★ set] x ∈ X, Ψ1 x) ([★ set] x ∈ X, Ψ2 x).
 Proof.
-  rewrite /SepSplit=> ?. rewrite -big_sepS_sepS. by apply big_sepS_mono.
+  rewrite /FromSep=> ?. rewrite -big_sepS_sepS. by apply big_sepS_mono.
 Qed.
 
 Lemma tac_sep_split Δ Δ1 Δ2 lr js P Q1 Q2 :
-  SepSplit P Q1 Q2 →
+  FromSep P Q1 Q2 →
   envs_split lr js Δ = Some (Δ1,Δ2) →
   (Δ1 ⊢ Q1) → (Δ2 ⊢ Q2) → Δ ⊢ P.
 Proof.
-  intros. rewrite envs_split_sound // -(sep_split P). by apply sep_mono.
+  intros. rewrite envs_split_sound // -(from_sep P). by apply sep_mono.
 Qed.
 
 (** * Combining *)
 Lemma tac_combine Δ1 Δ2 Δ3 Δ4 i1 p P1 i2 q P2 j P Q :
   envs_lookup_delete i1 Δ1 = Some (p,P1,Δ2) →
   envs_lookup_delete i2 (if p then Δ1 else Δ2) = Some (q,P2,Δ3) →
-  SepSplit P P1 P2 →
+  FromSep P P1 P2 →
   envs_app (p && q) (Esnoc Enil j P)
     (if q then (if p then Δ1 else Δ2) else Δ3) = Some Δ4 →
   (Δ4 ⊢ Q) → Δ1 ⊢ Q.
@@ -776,83 +778,81 @@ Proof.
   destruct p.
   - rewrite envs_lookup_persistent_sound //. destruct q.
     + rewrite envs_lookup_persistent_sound // envs_app_sound //; simpl.
-      by rewrite right_id assoc -always_sep (sep_split P) wand_elim_r.
+      by rewrite right_id assoc -always_sep (from_sep P) wand_elim_r.
     + rewrite envs_lookup_sound // envs_app_sound //; simpl.
-      by rewrite right_id assoc always_elim (sep_split P) wand_elim_r.
+      by rewrite right_id assoc always_elim (from_sep P) wand_elim_r.
   - rewrite envs_lookup_sound //; simpl. destruct q.
     + rewrite envs_lookup_persistent_sound // envs_app_sound //; simpl.
-      by rewrite right_id assoc always_elim (sep_split P) wand_elim_r.
+      by rewrite right_id assoc always_elim (from_sep P) wand_elim_r.
     + rewrite envs_lookup_sound // envs_app_sound //; simpl.
-      by rewrite right_id assoc (sep_split P) wand_elim_r.
+      by rewrite right_id assoc (from_sep P) wand_elim_r.
 Qed.
 
 (** * Conjunction/separating conjunction elimination *)
-Class SepDestruct (p : bool) (P Q1 Q2 : uPred M) :=
-  sep_destruct : □?p P ⊢ □?p (Q1 ★ Q2).
-Arguments sep_destruct : clear implicits.
-Class OpDestruct {A : cmraT} (a b1 b2 : A) :=
-  op_destruct : a ≡ b1 ⋅ b2.
-Arguments op_destruct {_} _ _ _ {_}.
-
-Global Instance op_destruct_op {A : cmraT} (a b : A) : OpDestruct (a â‹… b) a b.
-Proof. by rewrite /OpDestruct. Qed.
-Global Instance op_destruct_persistent {A : cmraT} (a : A) :
-  Persistent a → OpDestruct a a a.
+Class IntoSep (p: bool) (P Q1 Q2 : uPred M) := into_sep : □?p P ⊢ □?p (Q1 ★ Q2).
+Arguments into_sep : clear implicits.
+Class IntoOp {A : cmraT} (a b1 b2 : A) := into_op : a ≡ b1 ⋅ b2.
+Arguments into_op {_} _ _ _ {_}.
+
+Global Instance into_op_op {A : cmraT} (a b : A) : IntoOp (a â‹… b) a b.
+Proof. by rewrite /IntoOp. Qed.
+Global Instance into_op_persistent {A : cmraT} (a : A) :
+  Persistent a → IntoOp a a a.
 Proof. intros; apply (persistent_dup a). Qed.
-Global Instance op_destruct_pair {A B : cmraT} (a b1 b2 : A) (a' b1' b2' : B) :
-  OpDestruct a b1 b2 → OpDestruct a' b1' b2' →
-  OpDestruct (a,a') (b1,b1') (b2,b2').
+Global Instance into_op_pair {A B : cmraT} (a b1 b2 : A) (a' b1' b2' : B) :
+  IntoOp a b1 b2 → IntoOp a' b1' b2' →
+  IntoOp (a,a') (b1,b1') (b2,b2').
 Proof. by constructor. Qed.
-Global Instance op_destruct_Some {A : cmraT} (a : A) b1 b2 :
-  OpDestruct a b1 b2 → OpDestruct (Some a) (Some b1) (Some b2).
+Global Instance into_op_Some {A : cmraT} (a : A) b1 b2 :
+  IntoOp a b1 b2 → IntoOp (Some a) (Some b1) (Some b2).
 Proof. by constructor. Qed.
 
-Global Instance sep_destruct_sep p P Q : SepDestruct p (P ★ Q) P Q.
-Proof. rewrite /SepDestruct. by rewrite always_if_sep. Qed.
-Global Instance sep_destruct_ownM p (a b1 b2 : M) :
-  OpDestruct a b1 b2 →
-  SepDestruct p (uPred_ownM a) (uPred_ownM b1) (uPred_ownM b2).
+Global Instance into_sep_sep p P Q : IntoSep p (P ★ Q) P Q.
+Proof. rewrite /IntoSep. by rewrite always_if_sep. Qed.
+Global Instance into_sep_ownM p (a b1 b2 : M) :
+  IntoOp a b1 b2 →
+  IntoSep p (uPred_ownM a) (uPred_ownM b1) (uPred_ownM b2).
 Proof.
-  rewrite /OpDestruct /SepDestruct=> ->. by rewrite ownM_op always_if_sep.
+  rewrite /IntoOp /IntoSep=> ->. by rewrite ownM_op always_if_sep.
 Qed.
 
-Global Instance sep_destruct_and P Q : SepDestruct true (P ∧ Q) P Q.
-Proof. by rewrite /SepDestruct /= always_and_sep. Qed.
-Global Instance sep_destruct_and_persistent_l P Q :
-  PersistentP P → SepDestruct false (P ∧ Q) P Q.
-Proof. intros; by rewrite /SepDestruct /= always_and_sep_l. Qed.
-Global Instance sep_destruct_and_persistent_r P Q :
-  PersistentP Q → SepDestruct false (P ∧ Q) P Q.
-Proof. intros; by rewrite /SepDestruct /= always_and_sep_r. Qed.
+Global Instance into_sep_and P Q : IntoSep true (P ∧ Q) P Q.
+Proof. by rewrite /IntoSep /= always_and_sep. Qed.
+Global Instance into_sep_and_persistent_l P Q :
+  PersistentP P → IntoSep false (P ∧ Q) P Q.
+Proof. intros; by rewrite /IntoSep /= always_and_sep_l. Qed.
+Global Instance into_sep_and_persistent_r P Q :
+  PersistentP Q → IntoSep false (P ∧ Q) P Q.
+Proof. intros; by rewrite /IntoSep /= always_and_sep_r. Qed.
 
-Global Instance sep_destruct_later p P Q1 Q2 :
-  SepDestruct p P Q1 Q2 → SepDestruct p (▷ P) (▷ Q1) (▷ Q2).
-Proof. by rewrite /SepDestruct -later_sep !always_if_later=> ->. Qed.
+Global Instance into_sep_later p P Q1 Q2 :
+  IntoSep p P Q1 Q2 → IntoSep p (▷ P) (▷ Q1) (▷ Q2).
+Proof. by rewrite /IntoSep -later_sep !always_if_later=> ->. Qed.
 
-Global Instance sep_destruct_big_sepM
+Global Instance into_sep_big_sepM
     `{Countable K} {A} (Φ Ψ1 Ψ2 : K → A → uPred M) p m :
-  (∀ k x, SepDestruct p (Φ k x) (Ψ1 k x) (Ψ2 k x)) →
-  SepDestruct p ([★ map] k ↦ x ∈ m, Φ k x)
+  (∀ k x, IntoSep p (Φ k x) (Ψ1 k x) (Ψ2 k x)) →
+  IntoSep p ([★ map] k ↦ x ∈ m, Φ k x)
     ([★ map] k ↦ x ∈ m, Ψ1 k x) ([★ map] k ↦ x ∈ m, Ψ2 k x).
 Proof.
-  rewrite /SepDestruct=> ?. rewrite -big_sepM_sepM !big_sepM_always_if.
+  rewrite /IntoSep=> ?. rewrite -big_sepM_sepM !big_sepM_always_if.
   by apply big_sepM_mono.
 Qed.
-Global Instance sep_destruct_big_sepS `{Countable A} (Φ Ψ1 Ψ2 : A → uPred M) p X :
-  (∀ x, SepDestruct p (Φ x) (Ψ1 x) (Ψ2 x)) →
-  SepDestruct p ([★ set] x ∈ X, Φ x) ([★ set] x ∈ X, Ψ1 x) ([★ set] x ∈ X, Ψ2 x).
+Global Instance into_sep_big_sepS `{Countable A} (Φ Ψ1 Ψ2 : A → uPred M) p X :
+  (∀ x, IntoSep p (Φ x) (Ψ1 x) (Ψ2 x)) →
+  IntoSep p ([★ set] x ∈ X, Φ x) ([★ set] x ∈ X, Ψ1 x) ([★ set] x ∈ X, Ψ2 x).
 Proof.
-  rewrite /SepDestruct=> ?. rewrite -big_sepS_sepS !big_sepS_always_if.
+  rewrite /IntoSep=> ?. rewrite -big_sepS_sepS !big_sepS_always_if.
   by apply big_sepS_mono.
 Qed.
 
 Lemma tac_sep_destruct Δ Δ' i p j1 j2 P P1 P2 Q :
-  envs_lookup i Δ = Some (p, P) → SepDestruct p P P1 P2 →
+  envs_lookup i Δ = Some (p, P) → IntoSep p P P1 P2 →
   envs_simple_replace i p (Esnoc (Esnoc Enil j1 P1) j2 P2) Δ = Some Δ' →
   (Δ' ⊢ Q) → Δ ⊢ Q.
 Proof.
   intros. rewrite envs_simple_replace_sound //; simpl.
-  by rewrite (sep_destruct p P) right_id (comm uPred_sep P1) wand_elim_r.
+  by rewrite (into_sep p P) right_id (comm uPred_sep P1) wand_elim_r.
 Qed.
 
 (** * Framing *)
@@ -930,32 +930,32 @@ Proof.
 Qed.
 
 (** * Disjunction *)
-Class OrSplit (P Q1 Q2 : uPred M) := or_split : Q1 ∨ Q2 ⊢ P.
-Arguments or_split : clear implicits.
-Global Instance or_split_or P1 P2 : OrSplit (P1 ∨ P2) P1 P2.
+Class FromOr (P Q1 Q2 : uPred M) := from_or : Q1 ∨ Q2 ⊢ P.
+Arguments from_or : clear implicits.
+Global Instance from_or_or P1 P2 : FromOr (P1 ∨ P2) P1 P2.
 Proof. done. Qed.
 
-Lemma tac_or_l Δ P Q1 Q2 : OrSplit P Q1 Q2 → (Δ ⊢ Q1) → Δ ⊢ P.
-Proof. intros. rewrite -(or_split P). by apply or_intro_l'. Qed.
-Lemma tac_or_r Δ P Q1 Q2 : OrSplit P Q1 Q2 → (Δ ⊢ Q2) → Δ ⊢ P.
-Proof. intros. rewrite -(or_split P). by apply or_intro_r'. Qed.
+Lemma tac_or_l Δ P Q1 Q2 : FromOr P Q1 Q2 → (Δ ⊢ Q1) → Δ ⊢ P.
+Proof. intros. rewrite -(from_or P). by apply or_intro_l'. Qed.
+Lemma tac_or_r Δ P Q1 Q2 : FromOr P Q1 Q2 → (Δ ⊢ Q2) → Δ ⊢ P.
+Proof. intros. rewrite -(from_or P). by apply or_intro_r'. Qed.
 
-Class OrDestruct P Q1 Q2 := or_destruct : P ⊢ Q1 ∨ Q2.
-Arguments or_destruct : clear implicits.
-Global Instance or_destruct_or P Q : OrDestruct (P ∨ Q) P Q.
+Class IntoOr P Q1 Q2 := into_or : P ⊢ Q1 ∨ Q2.
+Arguments into_or : clear implicits.
+Global Instance into_or_or P Q : IntoOr (P ∨ Q) P Q.
 Proof. done. Qed.
-Global Instance or_destruct_later P Q1 Q2 :
-  OrDestruct P Q1 Q2 → OrDestruct (▷ P) (▷ Q1) (▷ Q2).
-Proof. rewrite /OrDestruct=>->. by rewrite later_or. Qed.
+Global Instance into_or_later P Q1 Q2 :
+  IntoOr P Q1 Q2 → IntoOr (▷ P) (▷ Q1) (▷ Q2).
+Proof. rewrite /IntoOr=>->. by rewrite later_or. Qed.
 
 Lemma tac_or_destruct Δ Δ1 Δ2 i p j1 j2 P P1 P2 Q :
-  envs_lookup i Δ = Some (p, P) → OrDestruct P P1 P2 →
+  envs_lookup i Δ = Some (p, P) → IntoOr P P1 P2 →
   envs_simple_replace i p (Esnoc Enil j1 P1) Δ = Some Δ1 →
   envs_simple_replace i p (Esnoc Enil j2 P2) Δ = Some Δ2 →
   (Δ1 ⊢ Q) → (Δ2 ⊢ Q) → Δ ⊢ Q.
 Proof.
   intros ???? HP1 HP2. rewrite envs_lookup_sound //.
-  rewrite (or_destruct P) always_if_or sep_or_r; apply or_elim.
+  rewrite (into_or P) always_if_or sep_or_r; apply or_elim.
   - rewrite (envs_simple_replace_sound' _ Δ1) //.
     by rewrite /= right_id wand_elim_r.
   - rewrite (envs_simple_replace_sound' _ Δ2) //.
@@ -991,41 +991,40 @@ Lemma tac_forall_revert {A} Δ (Φ : A → uPred M) :
 Proof. intros HΔ a. by rewrite HΔ (forall_elim a). Qed.
 
 (** * Existential *)
-Class ExistSplit {A} (P : uPred M) (Φ : A → uPred M) :=
-  exist_split : (∃ x, Φ x) ⊢ P.
-Arguments exist_split {_} _ _ {_}.
-Global Instance exist_split_exist {A} (Φ: A → uPred M): ExistSplit (∃ a, Φ a) Φ.
+Class FromExist {A} (P : uPred M) (Φ : A → uPred M) :=
+  from_exist : (∃ x, Φ x) ⊢ P.
+Arguments from_exist {_} _ _ {_}.
+Global Instance from_exist_exist {A} (Φ: A → uPred M): FromExist (∃ a, Φ a) Φ.
 Proof. done. Qed.
 
 Lemma tac_exist {A} Δ P (Φ : A → uPred M) :
-  ExistSplit P Φ → (∃ a, Δ ⊢ Φ a) → Δ ⊢ P.
-Proof. intros ? [a ?]. rewrite -(exist_split P). eauto using exist_intro'. Qed.
-
-Class ExistDestruct {A} (P : uPred M) (Φ : A → uPred M) :=
-  exist_destruct : P ⊢ ∃ x, Φ x.
-Arguments exist_destruct {_} _ _ {_}.
-Global Instance exist_destruct_exist {A} (Φ : A → uPred M) :
-  ExistDestruct (∃ a, Φ a) Φ.
+  FromExist P Φ → (∃ a, Δ ⊢ Φ a) → Δ ⊢ P.
+Proof. intros ? [a ?]. rewrite -(from_exist P). eauto using exist_intro'. Qed.
+
+Class IntoExist {A} (P : uPred M) (Φ : A → uPred M) :=
+  into_exist : P ⊢ ∃ x, Φ x.
+Arguments into_exist {_} _ _ {_}.
+Global Instance into_exist_exist {A} (Φ : A → uPred M) : IntoExist (∃ a, Φ a) Φ.
 Proof. done. Qed.
-Global Instance exist_destruct_later {A} P (Φ : A → uPred M) :
-  ExistDestruct P Φ → Inhabited A → ExistDestruct (▷ P) (λ a, ▷ (Φ a))%I.
-Proof. rewrite /ExistDestruct=> HP ?. by rewrite HP later_exist. Qed.
-Global Instance exist_destruct_always {A} P (Φ : A → uPred M) :
-  ExistDestruct P Φ → ExistDestruct (□ P) (λ a, □ (Φ a))%I.
-Proof. rewrite /ExistDestruct=> HP. by rewrite HP always_exist. Qed.
+Global Instance into_exist_later {A} P (Φ : A → uPred M) :
+  IntoExist P Φ → Inhabited A → IntoExist (▷ P) (λ a, ▷ (Φ a))%I.
+Proof. rewrite /IntoExist=> HP ?. by rewrite HP later_exist. Qed.
+Global Instance into_exist_always {A} P (Φ : A → uPred M) :
+  IntoExist P Φ → IntoExist (□ P) (λ a, □ (Φ a))%I.
+Proof. rewrite /IntoExist=> HP. by rewrite HP always_exist. Qed.
 
 Lemma tac_exist_destruct {A} Δ i p j P (Φ : A → uPred M) Q :
-  envs_lookup i Δ = Some (p, P) → ExistDestruct P Φ →
+  envs_lookup i Δ = Some (p, P) → IntoExist P Φ →
   (∀ a, ∃ Δ',
     envs_simple_replace i p (Esnoc Enil j (Φ a)) Δ = Some Δ' ∧ (Δ' ⊢ Q)) →
   Δ ⊢ Q.
 Proof.
   intros ?? HΦ. rewrite envs_lookup_sound //.
-  rewrite (exist_destruct P) always_if_exist sep_exist_r.
+  rewrite (into_exist P) always_if_exist sep_exist_r.
   apply exist_elim=> a; destruct (HΦ a) as (Δ'&?&?).
   rewrite envs_simple_replace_sound' //; simpl. by rewrite right_id wand_elim_r.
 Qed.
 End tactics.
 
-Hint Extern 0 (ToPosedProof True _ _) =>
+Hint Extern 0 (IntoPosedProof True _ _) =>
   class_apply @to_posed_proof_True : typeclass_instances.
diff --git a/proofmode/ghost_ownership.v b/proofmode/ghost_ownership.v
index 87b8e0ef366fca8ff4a7e7addd186fc601bd451f..2c557444aa43cd73ce27521f0343a33329695cb7 100644
--- a/proofmode/ghost_ownership.v
+++ b/proofmode/ghost_ownership.v
@@ -6,10 +6,10 @@ Section ghost.
 Context `{inG Λ Σ A}.
 Implicit Types a b : A.
 
-Global Instance sep_destruct_own p γ a b1 b2 :
-  OpDestruct a b1 b2 → SepDestruct p (own γ a) (own γ b1) (own γ b2).
-Proof. rewrite /OpDestruct /SepDestruct => ->. by rewrite own_op. Qed.
-Global Instance sep_split_own γ a b :
-  SepSplit (own γ (a ⋅ b)) (own γ a) (own γ b) | 90.
-Proof. by rewrite /SepSplit own_op. Qed.
+Global Instance into_sep_own p γ a b1 b2 :
+  IntoOp a b1 b2 → IntoSep p (own γ a) (own γ b1) (own γ b2).
+Proof. rewrite /IntoOp /IntoSep => ->. by rewrite own_op. Qed.
+Global Instance from_sep_own γ a b :
+  FromSep (own γ (a ⋅ b)) (own γ a) (own γ b) | 90.
+Proof. by rewrite /FromSep own_op. Qed.
 End ghost.
diff --git a/proofmode/invariants.v b/proofmode/invariants.v
index fbb6478ec5880198823c56c4bddf31b8815ee6e7..48277e7cf32e364d58b8e12a9c6656f7a9c6ccca 100644
--- a/proofmode/invariants.v
+++ b/proofmode/invariants.v
@@ -9,23 +9,23 @@ Implicit Types N : namespace.
 Implicit Types P Q R : iProp Λ Σ.
 
 Lemma tac_inv_fsa {A} (fsa : FSA Λ Σ A) fsaV Δ Δ' E N i P Q Φ :
-  FSASplit Q E fsa fsaV Φ →
+  IsFSA Q E fsa fsaV Φ →
   fsaV → nclose N ⊆ E → (of_envs Δ ⊢ inv N P) →
   envs_app false (Esnoc Enil i (▷ P)) Δ = Some Δ' →
   (Δ' ⊢ fsa (E ∖ nclose N) (λ a, ▷ P ★ Φ a)) → Δ ⊢ Q.
 Proof.
-  intros ????? HΔ'. rewrite -(fsa_split Q) -(inv_fsa fsa _ _ P) //.
+  intros ????? HΔ'. rewrite (is_fsa Q) -(inv_fsa fsa _ _ P) //.
   rewrite // -always_and_sep_l. apply and_intro; first done.
   rewrite envs_app_sound //; simpl. by rewrite right_id HΔ'.
 Qed.
 
 Lemma tac_inv_fsa_timeless {A} (fsa : FSA Λ Σ A) fsaV Δ Δ' E N i P Q Φ :
-  FSASplit Q E fsa fsaV Φ →
+  IsFSA Q E fsa fsaV Φ →
   fsaV → nclose N ⊆ E → (of_envs Δ ⊢ inv N P) → TimelessP P →
   envs_app false (Esnoc Enil i P) Δ = Some Δ' →
   (Δ' ⊢ fsa (E ∖ nclose N) (λ a, P ★ Φ a)) → Δ ⊢ Q.
 Proof.
-  intros ?????? HΔ'. rewrite -(fsa_split Q) -(inv_fsa fsa _ _ P) //.
+  intros ?????? HΔ'. rewrite (is_fsa Q) -(inv_fsa fsa _ _ P) //.
   rewrite // -always_and_sep_l. apply and_intro, wand_intro_l; first done.
   trans (|={E ∖ N}=> P ★ Δ)%I; first by rewrite pvs_timeless pvs_frame_r.
   apply (fsa_strip_pvs _).
@@ -36,7 +36,7 @@ End invariants.
 
 Tactic Notation "iInvCore" constr(N) "as" constr(H) :=
   eapply tac_inv_fsa with _ _ _ _ N H _ _;
-    [let P := match goal with |- FSASplit ?P _ _ _ _ => P end in
+    [let P := match goal with |- IsFSA ?P _ _ _ _ => P end in
      apply _ || fail "iInv: cannot viewshift in goal" P
     |try fast_done (* atomic *)
     |done || eauto with ndisj (* [eauto with ndisj] is slow *)
@@ -62,7 +62,7 @@ Tactic Notation "iInv" constr(N) "as" "{" simple_intropattern(x1)
 
 Tactic Notation "iInvCore>" constr(N) "as" constr(H) :=
   eapply tac_inv_fsa_timeless with _ _ _ _ N H _ _;
-    [let P := match goal with |- FSASplit ?P _ _ _ _ => P end in
+    [let P := match goal with |- IsFSA ?P _ _ _ _ => P end in
      apply _ || fail "iInv: cannot viewshift in goal" P
     |try fast_done (* atomic *)
     |done || eauto with ndisj (* [eauto with ndisj] is slow *)
diff --git a/proofmode/pviewshifts.v b/proofmode/pviewshifts.v
index 5085e6c50b8fbbedad7a1430c7b2f8e2d9f0fce3..86afa3f6b9fb6156a51c91eb8df1573bbe389ba2 100644
--- a/proofmode/pviewshifts.v
+++ b/proofmode/pviewshifts.v
@@ -7,45 +7,44 @@ Section pvs.
 Context {Λ : language} {Σ : iFunctor}.
 Implicit Types P Q : iProp Λ Σ.
 
-Global Instance to_assumption_pvs E p P Q :
-  ToAssumption p P Q → ToAssumption p P (|={E}=> Q)%I.
-Proof. rewrite /ToAssumption=>->. apply pvs_intro. Qed.
-Global Instance sep_split_pvs E P Q1 Q2 :
-  SepSplit P Q1 Q2 → SepSplit (|={E}=> P) (|={E}=> Q1) (|={E}=> Q2).
-Proof. rewrite /SepSplit=><-. apply pvs_sep. Qed.
+Global Instance from_assumption_pvs E p P Q :
+  FromAssumption p P Q → FromAssumption p P (|={E}=> Q)%I.
+Proof. rewrite /FromAssumption=>->. apply pvs_intro. Qed.
+Global Instance from_sep_pvs E P Q1 Q2 :
+  FromSep P Q1 Q2 → FromSep (|={E}=> P) (|={E}=> Q1) (|={E}=> Q2).
+Proof. rewrite /FromSep=><-. apply pvs_sep. Qed.
 Global Instance or_split_pvs E1 E2 P Q1 Q2 :
-  OrSplit P Q1 Q2 → OrSplit (|={E1,E2}=> P) (|={E1,E2}=> Q1) (|={E1,E2}=> Q2).
-Proof. rewrite /OrSplit=><-. apply or_elim; apply pvs_mono; auto with I. Qed.
+  FromOr P Q1 Q2 → FromOr (|={E1,E2}=> P) (|={E1,E2}=> Q1) (|={E1,E2}=> Q2).
+Proof. rewrite /FromOr=><-. apply or_elim; apply pvs_mono; auto with I. Qed.
 Global Instance exists_split_pvs {A} E1 E2 P (Φ : A → iProp Λ Σ) :
-  ExistSplit P Φ → ExistSplit (|={E1,E2}=> P) (λ a, |={E1,E2}=> Φ a)%I.
+  FromExist P Φ → FromExist (|={E1,E2}=> P) (λ a, |={E1,E2}=> Φ a)%I.
 Proof.
-  rewrite /ExistSplit=><-. apply exist_elim=> a. by rewrite -(exist_intro a).
+  rewrite /FromExist=><-. apply exist_elim=> a. by rewrite -(exist_intro a).
 Qed.
 Global Instance frame_pvs E1 E2 R P Q :
   Frame R P Q → Frame R (|={E1,E2}=> P) (|={E1,E2}=> Q).
 Proof. rewrite /Frame=><-. by rewrite pvs_frame_l. Qed.
-Global Instance to_wand_pvs E1 E2 R P Q :
-  ToWand R P Q → ToWand R (|={E1,E2}=> P) (|={E1,E2}=> Q) | 100.
-Proof. rewrite /ToWand=>->. apply wand_intro_l. by rewrite pvs_wand_r. Qed.
+Global Instance into_wand_pvs E1 E2 R P Q :
+  IntoWand R P Q → IntoWand R (|={E1,E2}=> P) (|={E1,E2}=> Q) | 100.
+Proof. rewrite /IntoWand=>->. apply wand_intro_l. by rewrite pvs_wand_r. Qed.
 
-Class FSASplit {A} (P : iProp Λ Σ) (E : coPset)
+Class IsFSA {A} (P : iProp Λ Σ) (E : coPset)
     (fsa : FSA Λ Σ A) (fsaV : Prop) (Φ : A → iProp Λ Σ) := {
-  fsa_split : fsa E Φ ⊣⊢ P;
-  fsa_split_is_fsa :> FrameShiftAssertion fsaV fsa;
+  is_fsa : P ⊣⊢ fsa E Φ;
+  is_fsa_is_fsa :> FrameShiftAssertion fsaV fsa;
 }.
-Global Arguments fsa_split {_} _ _ _ _ _ {_}.
-Global Instance fsa_split_pvs E P :
-  FSASplit (|={E}=> P)%I E pvs_fsa True (λ _, P).
+Global Arguments is_fsa {_} _ _ _ _ _ {_}.
+Global Instance is_fsa_pvs E P :
+  IsFSA (|={E}=> P)%I E pvs_fsa True (λ _, P).
 Proof. split. done. apply _. Qed.
-Global Instance fsa_split_fsa {A} (fsa : FSA Λ Σ A) E Φ :
-  FrameShiftAssertion fsaV fsa → FSASplit (fsa E Φ) E fsa fsaV Φ.
+Global Instance is_fsa_fsa {A} (fsa : FSA Λ Σ A) E Φ :
+  FrameShiftAssertion fsaV fsa → IsFSA (fsa E Φ) E fsa fsaV Φ.
 Proof. done. Qed.
 
 Global Instance to_assert_pvs {A} P Q E (fsa : FSA Λ Σ A) fsaV Φ :
-  FSASplit Q E fsa fsaV Φ → ToAssert P Q (|={E}=> P).
+  IsFSA Q E fsa fsaV Φ → IntoAssert P Q (|={E}=> P).
 Proof.
-  intros.
-  by rewrite /ToAssert pvs_frame_r wand_elim_r -(fsa_split Q) fsa_pvs_fsa.
+  intros. by rewrite /IntoAssert pvs_frame_r wand_elim_r (is_fsa Q) fsa_pvs_fsa.
 Qed.
 
 Lemma tac_pvs_intro Δ E1 E2 Q : E1 = E2 → (Δ ⊢ Q) → Δ ⊢ |={E1,E2}=> Q.
@@ -66,11 +65,11 @@ Qed.
 
 Lemma tac_pvs_elim_fsa {A} (fsa : FSA Λ Σ A) fsaV Δ Δ' E i p P' P Q Φ :
   envs_lookup i Δ = Some (p, P') → P' = (|={E}=> P)%I →
-  FSASplit Q E fsa fsaV Φ →
+  IsFSA Q E fsa fsaV Φ →
   envs_replace i p false (Esnoc Enil i P) Δ = Some Δ' →
   (Δ' ⊢ fsa E Φ) → Δ ⊢ Q.
 Proof.
-  intros ? -> ??. rewrite -(fsa_split Q) -fsa_pvs_fsa.
+  intros ? -> ??. rewrite (is_fsa Q) -fsa_pvs_fsa.
   eapply tac_pvs_elim; set_solver.
 Qed.
 
@@ -85,12 +84,12 @@ Proof.
 Qed.
 
 Lemma tac_pvs_timeless_fsa {A} (fsa : FSA Λ Σ A) fsaV Δ Δ' E i p P Q Φ :
-  FSASplit Q E fsa fsaV Φ →
+  IsFSA Q E fsa fsaV Φ →
   envs_lookup i Δ = Some (p, ▷ P)%I → TimelessP P →
   envs_simple_replace i p (Esnoc Enil i P) Δ = Some Δ' →
   (Δ' ⊢ fsa E Φ) → Δ ⊢ Q.
 Proof.
-  intros ????. rewrite -(fsa_split Q) -fsa_pvs_fsa.
+  intros ????. rewrite (is_fsa Q) -fsa_pvs_fsa.
   eauto using tac_pvs_timeless.
 Qed.
 End pvs.
@@ -114,7 +113,7 @@ Tactic Notation "iPvsCore" constr(H) :=
       [env_cbv; reflexivity || fail "iPvs:" H "not found"
       |let P := match goal with |- ?P = _ => P end in
        reflexivity || fail "iPvs:" H ":" P "not a pvs with the right mask"
-      |let P := match goal with |- FSASplit ?P _ _ _ _ => P end in
+      |let P := match goal with |- IsFSA ?P _ _ _ _ => P end in
        apply _ || fail "iPvs:" P "not a pvs"
       |env_cbv; reflexivity|simpl]
   end.
@@ -170,7 +169,7 @@ Tactic Notation "iTimeless" constr(H) :=
        |env_cbv; reflexivity|simpl]
   | |- _ =>
      eapply tac_pvs_timeless_fsa with _ _ _ _ H _ _ _;
-       [let P := match goal with |- FSASplit ?P _ _ _ _ => P end in
+       [let P := match goal with |- IsFSA ?P _ _ _ _ => P end in
         apply _ || fail "iTimeless: " P "not a pvs"
        |env_cbv; reflexivity || fail "iTimeless:" H "not found"
        |let P := match goal with |- TimelessP ?P => P end in
diff --git a/proofmode/sts.v b/proofmode/sts.v
index b4817fbac06b37a265d03596ccaee0953ed03f6f..4b535fb3c5dc74ee37b52b283fd1f326212ae8f9 100644
--- a/proofmode/sts.v
+++ b/proofmode/sts.v
@@ -8,7 +8,7 @@ Context `{stsG Λ Σ sts} (φ : sts.state sts → iPropG Λ Σ).
 Implicit Types P Q : iPropG Λ Σ.
 
 Lemma tac_sts_fsa {A} (fsa : FSA Λ _ A) fsaV Δ E N i γ S T Q Φ :
-  FSASplit Q E fsa fsaV Φ →
+  IsFSA Q E fsa fsaV Φ →
   fsaV →
   envs_lookup i Δ = Some (false, sts_ownS γ S T) →
   (of_envs Δ ⊢ sts_ctx γ N φ) → nclose N ⊆ E →
@@ -18,7 +18,7 @@ Lemma tac_sts_fsa {A} (fsa : FSA Λ _ A) fsaV Δ E N i γ S T Q Φ :
       ■ sts.steps (s, T) (s', T') ★ ▷ φ s' ★ (sts_own γ s' T' -★ Φ a)))) →
   Δ ⊢ Q.
 Proof.
-  intros ????? HΔ'. rewrite -(fsa_split Q) -(sts_fsaS φ fsa) //.
+  intros ????? HΔ'. rewrite (is_fsa Q) -(sts_fsaS φ fsa) //.
   rewrite // -always_and_sep_l. apply and_intro; first done.
   rewrite envs_lookup_sound //; simpl; apply sep_mono_r.
   apply forall_intro=>s; apply wand_intro_l.
@@ -36,7 +36,7 @@ Tactic Notation "iSts" constr(H) "as"
   | gname => eapply tac_sts_fsa with _ _ _ _ _ _ _ H _ _ _
   | _ => fail "iSts:" H "not a string or gname"
   end;
-    [let P := match goal with |- FSASplit ?P _ _ _ _ => P end in
+    [let P := match goal with |- IsFSA ?P _ _ _ _ => P end in
      apply _ || fail "iSts: cannot viewshift in goal" P
     |try fast_done (* atomic *)
     |iAssumptionCore || fail "iSts:" H "not found"
diff --git a/proofmode/tactics.v b/proofmode/tactics.v
index 28d0300ca1d6a1c2c7f9bda44772824d5e9dfc77..ab34269abacb2eca10904e5aa69fafed32ecbf8c 100644
--- a/proofmode/tactics.v
+++ b/proofmode/tactics.v
@@ -68,7 +68,7 @@ Tactic Notation "iClear" constr(Hs) :=
 Tactic Notation "iExact" constr(H) :=
   eapply tac_assumption with H _ _; (* (i:=H) *)
     [env_cbv; reflexivity || fail "iExact:" H "not found"
-    |let P := match goal with |- ToAssumption _ ?P _ => P end in
+    |let P := match goal with |- FromAssumption _ ?P _ => P end in
      apply _ || fail "iExact:" H ":" P "does not match goal"].
 
 Tactic Notation "iAssumptionCore" :=
@@ -88,7 +88,7 @@ Tactic Notation "iAssumption" :=
   let rec find p Γ Q :=
     match Γ with
     | Esnoc ?Γ ?j ?P => first
-       [pose proof (_ : ToAssumption p P Q) as Hass;
+       [pose proof (_ : FromAssumption p P Q) as Hass;
         apply (tac_assumption _ j p P); [env_cbv; reflexivity|apply Hass]
        |find p Γ Q]
     end in
@@ -105,20 +105,20 @@ Tactic Notation "iExFalso" := apply tac_ex_falso.
 Local Tactic Notation "iPersistent" constr(H) :=
   eapply tac_persistent with _ H _ _ _; (* (i:=H) *)
     [env_cbv; reflexivity || fail "iPersistent:" H "not found"
-    |let Q := match goal with |- ToPersistentP ?Q _ => Q end in
+    |let Q := match goal with |- IntoPersistentP ?Q _ => Q end in
      apply _ || fail "iPersistent:" H ":" Q "not persistent"
     |env_cbv; reflexivity|].
 
 Local Tactic Notation "iPure" constr(H) "as" simple_intropattern(pat) :=
   eapply tac_pure with _ H _ _ _; (* (i:=H1) *)
     [env_cbv; reflexivity || fail "iPure:" H "not found"
-    |let P := match goal with |- ToPure ?P _ => P end in
+    |let P := match goal with |- IsPure ?P _ => P end in
      apply _ || fail "iPure:" H ":" P "not pure"
     |intros pat].
 
 Tactic Notation "iPureIntro" :=
   eapply tac_pure_intro;
-    [let P := match goal with |- ToPure ?P _ => P end in
+    [let P := match goal with |- IsPure ?P _ => P end in
      apply _ || fail "iPureIntro:" P "not pure"|].
 
 (** * Specialize *)
@@ -144,7 +144,7 @@ Local Tactic Notation "iSpecializeArgs" constr(H) open_constr(xs) :=
 
 Local Tactic Notation "iSpecializePat" constr(H) constr(pat) :=
   let solve_to_wand H1 :=
-    let P := match goal with |- ToWand ?P _ _ => P end in
+    let P := match goal with |- IntoWand ?P _ _ => P end in
     apply _ || fail "iSpecialize:" H1 ":" P "not an implication/wand" in
   let rec go H1 pats :=
     lazymatch pats with
@@ -154,8 +154,8 @@ Local Tactic Notation "iSpecializePat" constr(H) constr(pat) :=
        eapply tac_specialize with _ _ H2 _ H1 _ _ _ _; (* (j:=H1) (i:=H2) *)
          [env_cbv; reflexivity || fail "iSpecialize:" H2 "not found"
          |env_cbv; reflexivity || fail "iSpecialize:" H1 "not found"
-         |let P := match goal with |- ToWand ?P ?Q _ => P end in
-          let Q := match goal with |- ToWand ?P ?Q _ => Q end in
+         |let P := match goal with |- IntoWand ?P ?Q _ => P end in
+          let Q := match goal with |- IntoWand ?P ?Q _ => Q end in
           apply _ || fail "iSpecialize: cannot instantiate" H1 ":" P "with" H2 ":" Q
          |env_cbv; reflexivity|go H1 pats]
     | SName true ?H2 :: ?pats =>
@@ -184,7 +184,7 @@ Local Tactic Notation "iSpecializePat" constr(H) constr(pat) :=
        eapply tac_specialize_pure with _ H1 _ _ _ _ _;
          [env_cbv; reflexivity || fail "iSpecialize:" H1 "not found"
          |solve_to_wand H1
-         |let Q := match goal with |- ToPure ?Q _ => Q end in
+         |let Q := match goal with |- IsPure ?Q _ => Q end in
           apply _ || fail "iSpecialize:" Q "not pure"
          |env_cbv; reflexivity
          |(*goal*)
@@ -194,7 +194,7 @@ Local Tactic Notation "iSpecializePat" constr(H) constr(pat) :=
          [env_cbv; reflexivity || fail "iSpecialize:" H1 "not found"
          |solve_to_wand H1
          |match k with
-          | GoalStd => apply to_assert_fallthrough
+          | GoalStd => apply into_assert_fallthrough
           | GoalPvs => apply _ || fail "iSpecialize: cannot generate pvs goal"
           end
          |env_cbv; reflexivity || fail "iSpecialize:" Hs "not found"
@@ -237,7 +237,7 @@ Tactic Notation "iApply" open_constr(t) :=
     [iExact H
     |eapply tac_apply with _ H _ _ _;
        [env_cbv; reflexivity || fail 1 "iApply:" H "not found"
-       |let P := match goal with |- ToWand ?P _ _ => P end in
+       |let P := match goal with |- IntoWand ?P _ _ => P end in
         apply _ || fail 1 "iApply: cannot apply" H ":" P
        |lazy beta (* reduce betas created by instantiation *)]] in
   let Htmp := iFresh in
@@ -320,17 +320,17 @@ Tactic Notation "iRevert" "{" ident(x1) ident(x2) ident(x3) ident(x4)
 (** * Disjunction *)
 Tactic Notation "iLeft" :=
   eapply tac_or_l;
-    [let P := match goal with |- OrSplit ?P _ _ => P end in
+    [let P := match goal with |- FromOr ?P _ _ => P end in
      apply _ || fail "iLeft:" P "not a disjunction"|].
 Tactic Notation "iRight" :=
   eapply tac_or_r;
-    [let P := match goal with |- OrSplit ?P _ _ => P end in
+    [let P := match goal with |- FromOr ?P _ _ => P end in
      apply _ || fail "iRight:" P "not a disjunction"|].
 
 Local Tactic Notation "iOrDestruct" constr(H) "as" constr(H1) constr(H2) :=
   eapply tac_or_destruct with _ _ H _ H1 H2 _ _ _; (* (i:=H) (j1:=H1) (j2:=H2) *)
     [env_cbv; reflexivity || fail "iOrDestruct:" H "not found"
-    |let P := match goal with |- OrDestruct ?P _ _ => P end in
+    |let P := match goal with |- IntoOr ?P _ _ => P end in
      apply _ || fail "iOrDestruct:" H ":" P "not a disjunction"
     |env_cbv; reflexivity || fail "iOrDestruct:" H1 "not fresh"
     |env_cbv; reflexivity || fail "iOrDestruct:" H2 "not fresh"| |].
@@ -340,7 +340,7 @@ Tactic Notation "iSplit" :=
   lazymatch goal with
   | |- _ ⊢ _ =>
     eapply tac_and_split;
-      [let P := match goal with |- AndSplit ?P _ _ => P end in
+      [let P := match goal with |- FromAnd ?P _ _ => P end in
        apply _ || fail "iSplit:" P "not a conjunction"| |]
   | |- _ ⊣⊢ _ => apply (anti_symm (⊢))
   end.
@@ -348,13 +348,13 @@ Tactic Notation "iSplit" :=
 Tactic Notation "iSplitL" constr(Hs) :=
   let Hs := words Hs in
   eapply tac_sep_split with _ _ false Hs _ _; (* (js:=Hs) *)
-    [let P := match goal with |- SepSplit ?P _ _ => P end in
+    [let P := match goal with |- FromSep ?P _ _ => P end in
      apply _ || fail "iSplitL:" P "not a separating conjunction"
     |env_cbv; reflexivity || fail "iSplitL: hypotheses" Hs "not found"| |].
 Tactic Notation "iSplitR" constr(Hs) :=
   let Hs := words Hs in
   eapply tac_sep_split with _ _ true Hs _ _; (* (js:=Hs) *)
-    [let P := match goal with |- SepSplit ?P _ _ => P end in
+    [let P := match goal with |- FromSep ?P _ _ => P end in
      apply _ || fail "iSplitR:" P "not a separating conjunction"
     |env_cbv; reflexivity || fail "iSplitR: hypotheses" Hs "not found"| |].
 
@@ -364,7 +364,7 @@ Tactic Notation "iSplitR" := iSplitL "".
 Local Tactic Notation "iSepDestruct" constr(H) "as" constr(H1) constr(H2) :=
   eapply tac_sep_destruct with _ H _ H1 H2 _ _ _; (* (i:=H) (j1:=H1) (j2:=H2) *)
     [env_cbv; reflexivity || fail "iSepDestruct:" H "not found"
-    |let P := match goal with |- SepDestruct _ ?P _ _ => P end in
+    |let P := match goal with |- IntoSep _ ?P _ _ => P end in
      apply _ || fail "iSepDestruct:" H ":" P "not separating destructable"
     |env_cbv; reflexivity || fail "iSepDestruct:" H1 "or" H2 " not fresh"|].
 
@@ -395,15 +395,15 @@ Tactic Notation "iCombine" constr(H1) constr(H2) "as" constr(H) :=
   eapply tac_combine with _ _ _ H1 _ _ H2 _ _ H _;
     [env_cbv; reflexivity || fail "iCombine:" H1 "not found"
     |env_cbv; reflexivity || fail "iCombine:" H2 "not found"
-    |let P1 := match goal with |- SepSplit _ ?P1 _ => P1 end in
-     let P2 := match goal with |- SepSplit _ _ ?P2 => P2 end in
+    |let P1 := match goal with |- FromSep _ ?P1 _ => P1 end in
+     let P2 := match goal with |- FromSep _ _ ?P2 => P2 end in
      apply _ || fail "iCombine: cannot combine" H1 ":" P1 "and" H2 ":" P2
     |env_cbv; reflexivity || fail "iCombine:" H "not fresh"|].
 
 (** * Existential *)
 Tactic Notation "iExists" uconstr(x1) :=
   eapply tac_exist;
-    [let P := match goal with |- ExistSplit ?P _ => P end in
+    [let P := match goal with |- FromExist ?P _ => P end in
      apply _ || fail "iExists:" P "not an existential"
     |cbv beta; eexists x1].
 
@@ -432,7 +432,7 @@ Local Tactic Notation "iExistDestruct" constr(H)
     "as" simple_intropattern(x) constr(Hx) :=
   eapply tac_exist_destruct with H _ Hx _ _; (* (i:=H) (j:=Hx) *)
     [env_cbv; reflexivity || fail "iExistDestruct:" H "not found"
-    |let P := match goal with |- ExistDestruct ?P _ => P end in
+    |let P := match goal with |- IntoExist ?P _ => P end in
      apply _ || fail "iExistDestruct:" H ":" P "not an existential"|];
   let y := fresh in
   intros y; eexists; split;
@@ -498,18 +498,18 @@ Tactic Notation "iAlways":=
 Tactic Notation "iNext":=
   eapply tac_next;
     [apply _
-    |let P := match goal with |- StripLaterL ?P _ => P end in
+    |let P := match goal with |- FromLater ?P _ => P end in
      apply _ || fail "iNext:" P "does not contain laters"|].
 
 (** * Introduction tactic *)
 Local Tactic Notation "iIntro" "{" simple_intropattern(x) "}" := first
   [ (* (∀ _, _) *) apply tac_forall_intro; intros x
   | (* (?P → _) *) eapply tac_impl_intro_pure;
-     [let P := match goal with |- ToPure ?P _ => P end in
+     [let P := match goal with |- IsPure ?P _ => P end in
       apply _ || fail "iIntro:" P "not pure"
      |intros x]
   | (* (?P -★ _) *) eapply tac_wand_intro_pure;
-     [let P := match goal with |- ToPure ?P _ => P end in
+     [let P := match goal with |- IsPure ?P _ => P end in
       apply _ || fail "iIntro:" P "not pure"
      |intros x]
   |intros x].
@@ -528,12 +528,12 @@ Local Tactic Notation "iIntro" constr(H) := first
 Local Tactic Notation "iIntro" "#" constr(H) := first
   [ (* (?P → _) *)
     eapply tac_impl_intro_persistent with _ H _; (* (i:=H) *)
-      [let P := match goal with |- ToPersistentP ?P _ => P end in
+      [let P := match goal with |- IntoPersistentP ?P _ => P end in
        apply _ || fail 1 "iIntro: " P " not persistent"
       |env_cbv; reflexivity || fail 1 "iIntro:" H "not fresh"|]
   | (* (?P -★ _) *)
     eapply tac_wand_intro_persistent with _ H _; (* (i:=H) *)
-      [let P := match goal with |- ToPersistentP ?P _ => P end in
+      [let P := match goal with |- IntoPersistentP ?P _ => P end in
        apply _ || fail 1 "iIntro: " P " not persistent"
       |env_cbv; reflexivity || fail 1 "iIntro:" H "not fresh"|]
   | fail 1 "iIntro: nothing to introduce" ].
@@ -746,7 +746,7 @@ Tactic Notation "iAssert" open_constr(Q) "with" constr(Hs) "as" constr(pat) :=
   | [SGoal ?k ?lr ?Hs] =>
      eapply tac_assert with _ _ _ lr Hs H Q _; (* (js:=Hs) (j:=H) (P:=Q) *)
        [match k with
-        | GoalStd => apply to_assert_fallthrough
+        | GoalStd => apply into_assert_fallthrough
         | GoalPvs => apply _ || fail "iAssert: cannot generate pvs goal"
         end
        |env_cbv; reflexivity || fail "iAssert:" Hs "not found"
diff --git a/proofmode/weakestpre.v b/proofmode/weakestpre.v
index 2e60cd40e9d4d4b24fedff69edd140ceafa25fac..e7249a464a4880bf6186676c4dd352c7fab5566b 100644
--- a/proofmode/weakestpre.v
+++ b/proofmode/weakestpre.v
@@ -11,7 +11,7 @@ Implicit Types Φ : val Λ → iProp Λ Σ.
 Global Instance frame_wp E e R Φ Ψ :
   (∀ v, Frame R (Φ v) (Ψ v)) → Frame R (WP e @ E {{ Φ }}) (WP e @ E {{ Ψ }}).
 Proof. rewrite /Frame=> HR. rewrite wp_frame_l. apply wp_mono, HR. Qed.
-Global Instance fsa_split_wp E e Φ :
-  FSASplit (WP e @ E {{ Φ }})%I E (wp_fsa e) (language.atomic e) Φ.
+Global Instance is_fsa_wp E e Φ :
+  IsFSA (WP e @ E {{ Φ }})%I E (wp_fsa e) (language.atomic e) Φ.
 Proof. split. done. apply _. Qed.
 End weakestpre.