diff --git a/theories/proofmode/class_instances.v b/theories/proofmode/class_instances.v index db9633a91c9d501b68a550bab15c79b3bea73368..4557f7908d4e1669e2ac714f2a40fd706082ef8c 100644 --- a/theories/proofmode/class_instances.v +++ b/theories/proofmode/class_instances.v @@ -43,32 +43,32 @@ Global Instance into_pure_cmra_valid `{CMRADiscrete A} (a : A) : @IntoPure M (✓ a) (✓ a). Proof. by rewrite /IntoPure discrete_valid. Qed. -Global Instance into_pure_pure_conj (φ1 φ2 : uPred M) P1 P2 : - IntoPure φ1 P1 -> IntoPure φ2 P2 -> IntoPure (φ1 ∧ φ2) (P1 ∧ P2). +Global Instance into_pure_pure_conj (φ1 φ2 : Prop) P1 P2 : + IntoPure P1 φ1 -> IntoPure P2 φ2 -> IntoPure (P1 ∧ P2) (φ1 ∧ φ2). Proof. rewrite /IntoPure pure_and. by intros -> ->. Qed. -Global Instance into_pure_pure_sep (φ1 φ2 : uPred M) P1 P2 : - IntoPure φ1 P1 -> IntoPure φ2 P2 -> IntoPure (φ1 ∗ φ2) (P1 ∧ P2). +Global Instance into_pure_pure_sep (φ1 φ2 : Prop) P1 P2 : + IntoPure P1 φ1 -> IntoPure P2 φ2 -> IntoPure (P1 ∗ P2) (φ1 ∧ φ2). Proof. rewrite /IntoPure sep_and pure_and. by intros -> ->. Qed. -Global Instance into_pure_pure_disj (φ1 φ2 : uPred M) P1 P2 : - IntoPure φ1 P1 -> IntoPure φ2 P2 -> IntoPure (φ1 ∨ φ2) (P1 ∨ P2). +Global Instance into_pure_pure_disj (φ1 φ2 : Prop) P1 P2 : + IntoPure P1 φ1 -> IntoPure P2 φ2 -> IntoPure (P1 ∨ P2) (φ1 ∨ φ2). Proof. rewrite /IntoPure pure_or. by intros -> ->. Qed. -Global Instance into_pure_pure_impl (φ1 φ2 : uPred M) P1 P2 : - FromPure φ1 P1 -> IntoPure φ2 P2 -> IntoPure (φ1 → φ2) (P1 → P2). +Global Instance into_pure_pure_impl (φ1 φ2 : Prop) P1 P2 : + FromPure P1 φ1 -> IntoPure P2 φ2 -> IntoPure (P1 → P2) (φ1 → φ2). Proof. rewrite /FromPure /IntoPure pure_impl. by intros -> ->. Qed. -Global Instance into_pure_pure_wand (φ1 φ2 : uPred M) P1 P2 : - FromPure φ1 P1 -> IntoPure φ2 P2 -> IntoPure (φ1 -∗ φ2) (P1 → P2). +Global Instance into_pure_pure_wand (φ1 φ2 : Prop) P1 P2 : + FromPure P1 φ1 -> IntoPure P2 φ2 -> IntoPure (P1 -∗ P2) (φ1 → φ2). Proof. rewrite /FromPure /IntoPure pure_impl always_impl_wand. by intros -> ->. Qed. -Global Instance into_pure_exist {X : Type} (Φ : X → uPred M) φ : +Global Instance into_pure_exist {X : Type} (Φ : X → uPred M) (φ : X → Prop) : (∀ x, @IntoPure M (Φ x) (φ x)) → @IntoPure M (∃ x, Φ x) (∃ x, φ x). Proof. rewrite /IntoPure=>Hx. apply exist_elim=>x. rewrite Hx. apply pure_elim'=>Hφ. apply pure_intro. eauto. Qed. -Global Instance into_pure_forall {X : Type} (Φ : X → uPred M) φ : +Global Instance into_pure_forall {X : Type} (Φ : X → uPred M) (φ : X → Prop) : (∀ x, @IntoPure M (Φ x) (φ x)) → @IntoPure M (∀ x, Φ x) (∀ x, φ x). Proof. rewrite /IntoPure=>Hx. rewrite -pure_forall_2. by setoid_rewrite Hx. @@ -91,32 +91,31 @@ Qed. Global Instance from_pure_bupd P φ : FromPure P φ → FromPure (|==> P) φ. Proof. rewrite /FromPure=> ->. apply bupd_intro. Qed. - -Global Instance from_pure_pure_conj (φ1 φ2 : uPred M) P1 P2 : - FromPure φ1 P1 -> FromPure φ2 P2 -> FromPure (φ1 ∧ φ2) (P1 ∧ P2). +Global Instance from_pure_pure_conj (φ1 φ2 : Prop) P1 P2 : + FromPure P1 φ1 -> FromPure P2 φ2 -> FromPure (P1 ∧ P2) (φ1 ∧ φ2). Proof. rewrite /FromPure pure_and. by intros -> ->. Qed. -Global Instance from_pure_pure_sep (φ1 φ2 : uPred M) P1 P2 : - FromPure φ1 P1 -> FromPure φ2 P2 -> FromPure (φ1 ∗ φ2) (P1 ∧ P2). +Global Instance from_pure_pure_sep (φ1 φ2 : Prop) P1 P2 : + FromPure P1 φ1 -> FromPure P2 φ2 -> FromPure (P1 ∗ P2) (φ1 ∧ φ2). Proof. rewrite /FromPure pure_and always_and_sep_l. by intros -> ->. Qed. -Global Instance from_pure_pure_disj (φ1 φ2 : uPred M) P1 P2 : - FromPure φ1 P1 -> FromPure φ2 P2 -> FromPure (φ1 ∨ φ2) (P1 ∨ P2). +Global Instance from_pure_pure_disj (φ1 φ2 : Prop) P1 P2 : + FromPure P1 φ1 -> FromPure P2 φ2 -> FromPure (P1 ∨ P2) (φ1 ∨ φ2). Proof. rewrite /FromPure pure_or. by intros -> ->. Qed. -Global Instance from_pure_pure_impl (φ1 φ2 : uPred M) P1 P2 : - IntoPure φ1 P1 -> FromPure φ2 P2 -> FromPure (φ1 → φ2) (P1 → P2). +Global Instance from_pure_pure_impl (φ1 φ2 : Prop) P1 P2 : + IntoPure P1 φ1 -> FromPure P2 φ2 -> FromPure (P1 → P2) (φ1 → φ2). Proof. rewrite /FromPure /IntoPure pure_impl. by intros -> ->. Qed. -Global Instance from_pure_pure_wand (φ1 φ2 : uPred M) P1 P2 : - IntoPure φ1 P1 -> FromPure φ2 P2 -> FromPure (φ1 -∗ φ2) (P1 → P2). +Global Instance from_pure_pure_wand (φ1 φ2 : Prop) P1 P2 : + IntoPure P1 φ1 -> FromPure P2 φ2 -> FromPure (P1 -∗ P2) (φ1 → φ2). Proof. rewrite /FromPure /IntoPure pure_impl always_impl_wand. by intros -> ->. Qed. -Global Instance from_pure_exist {X : Type} (Φ : X → uPred M) φ : +Global Instance from_pure_exist {X : Type} (Φ : X → uPred M) (φ : X → Prop) : (∀ x, @FromPure M (Φ x) (φ x)) → @FromPure M (∃ x, Φ x) (∃ x, φ x). Proof. rewrite /FromPure=>Hx. apply pure_elim'=>-[x ?]. rewrite -(exist_intro x). rewrite -Hx. apply pure_intro. done. Qed. -Global Instance from_pure_forall {X : Type} (Φ : X → uPred M) φ : +Global Instance from_pure_forall {X : Type} (Φ : X → uPred M) (φ : X → Prop) : (∀ x, @FromPure M (Φ x) (φ x)) → @FromPure M (∀ x, Φ x) (∀ x, φ x). Proof. rewrite /FromPure=>Hx. apply forall_intro=>x. apply pure_elim'=>Hφ.