Commit 237fd8c7 authored by Ralf Jung's avatar Ralf Jung

class_instances: coqdoc; move higher priority instances up a bit

parent c1fc2269
Pipeline #9560 passed with stage
in 15 minutes and 19 seconds
...@@ -8,7 +8,7 @@ Section bi_instances. ...@@ -8,7 +8,7 @@ Section bi_instances.
Context {PROP : bi}. Context {PROP : bi}.
Implicit Types P Q R : PROP. Implicit Types P Q R : PROP.
(* AsEmpValid *) (** AsEmpValid *)
Global Instance as_emp_valid_emp_valid {PROP : bi} (P : PROP) : AsEmpValid0 (bi_emp_valid P) P | 0. Global Instance as_emp_valid_emp_valid {PROP : bi} (P : PROP) : AsEmpValid0 (bi_emp_valid P) P | 0.
Proof. by rewrite /AsEmpValid. Qed. Proof. by rewrite /AsEmpValid. Qed.
Global Instance as_emp_valid_entails {PROP : bi} (P Q : PROP) : AsEmpValid0 (P Q) (P - Q). Global Instance as_emp_valid_entails {PROP : bi} (P Q : PROP) : AsEmpValid0 (P Q) (P - Q).
...@@ -35,7 +35,7 @@ Global Instance as_emp_valid_embed `{BiEmbed PROP PROP'} (φ : Prop) (P : PROP) ...@@ -35,7 +35,7 @@ Global Instance as_emp_valid_embed `{BiEmbed PROP PROP'} (φ : Prop) (P : PROP)
AsEmpValid0 φ P AsEmpValid φ P. AsEmpValid0 φ P AsEmpValid φ P.
Proof. rewrite /AsEmpValid0 /AsEmpValid=> _ ->. rewrite embed_emp_valid //. Qed. Proof. rewrite /AsEmpValid0 /AsEmpValid=> _ ->. rewrite embed_emp_valid //. Qed.
(* FromAffinely *) (** FromAffinely *)
Global Instance from_affinely_affine P : Affine P FromAffinely P P. Global Instance from_affinely_affine P : Affine P FromAffinely P P.
Proof. intros. by rewrite /FromAffinely affinely_elim. Qed. Proof. intros. by rewrite /FromAffinely affinely_elim. Qed.
Global Instance from_affinely_default P : FromAffinely (<affine> P) P | 100. Global Instance from_affinely_default P : FromAffinely (<affine> P) P | 100.
...@@ -44,7 +44,7 @@ Global Instance from_affinely_intuitionistically P : ...@@ -44,7 +44,7 @@ Global Instance from_affinely_intuitionistically P :
FromAffinely ( P) (<pers> P) | 100. FromAffinely ( P) (<pers> P) | 100.
Proof. by rewrite /FromAffinely. Qed. Proof. by rewrite /FromAffinely. Qed.
(* IntoAbsorbingly *) (** IntoAbsorbingly *)
Global Instance into_absorbingly_True : @IntoAbsorbingly PROP True emp | 0. Global Instance into_absorbingly_True : @IntoAbsorbingly PROP True emp | 0.
Proof. by rewrite /IntoAbsorbingly -absorbingly_True_emp absorbingly_pure. Qed. Proof. by rewrite /IntoAbsorbingly -absorbingly_True_emp absorbingly_pure. Qed.
Global Instance into_absorbingly_absorbing P : Absorbing P IntoAbsorbingly P P | 1. Global Instance into_absorbingly_absorbing P : Absorbing P IntoAbsorbingly P P | 1.
...@@ -57,7 +57,7 @@ Qed. ...@@ -57,7 +57,7 @@ Qed.
Global Instance into_absorbingly_default P : IntoAbsorbingly (<absorb> P) P | 100. Global Instance into_absorbingly_default P : IntoAbsorbingly (<absorb> P) P | 100.
Proof. by rewrite /IntoAbsorbingly. Qed. Proof. by rewrite /IntoAbsorbingly. Qed.
(* FromAssumption *) (** FromAssumption *)
Global Instance from_assumption_exact p P : FromAssumption p P P | 0. Global Instance from_assumption_exact p P : FromAssumption p P P | 0.
Proof. by rewrite /FromAssumption /= intuitionistically_if_elim. Qed. Proof. by rewrite /FromAssumption /= intuitionistically_if_elim. Qed.
...@@ -124,7 +124,7 @@ Proof. ...@@ -124,7 +124,7 @@ Proof.
by rewrite forall_elim. by rewrite forall_elim.
Qed. Qed.
(* IntoPure *) (** IntoPure *)
Global Instance into_pure_pure φ : @IntoPure PROP ⌜φ⌝ φ. Global Instance into_pure_pure φ : @IntoPure PROP ⌜φ⌝ φ.
Proof. by rewrite /IntoPure. Qed. Proof. by rewrite /IntoPure. Qed.
...@@ -171,7 +171,7 @@ Global Instance into_pure_embed `{BiEmbed PROP PROP'} P φ : ...@@ -171,7 +171,7 @@ Global Instance into_pure_embed `{BiEmbed PROP PROP'} P φ :
IntoPure P φ IntoPure P φ. IntoPure P φ IntoPure P φ.
Proof. rewrite /IntoPure=> ->. by rewrite embed_pure. Qed. Proof. rewrite /IntoPure=> ->. by rewrite embed_pure. Qed.
(* FromPure *) (** FromPure *)
Global Instance from_pure_pure a φ : @FromPure PROP a ⌜φ⌝ φ. Global Instance from_pure_pure a φ : @FromPure PROP a ⌜φ⌝ φ.
Proof. rewrite /FromPure. apply affinely_if_elim. Qed. Proof. rewrite /FromPure. apply affinely_if_elim. Qed.
Global Instance from_pure_pure_and a (φ1 φ2 : Prop) P1 P2 : Global Instance from_pure_pure_and a (φ1 φ2 : Prop) P1 P2 :
...@@ -252,7 +252,7 @@ Global Instance from_pure_embed `{BiEmbed PROP PROP'} a P φ : ...@@ -252,7 +252,7 @@ Global Instance from_pure_embed `{BiEmbed PROP PROP'} a P φ :
FromPure a P φ FromPure a P φ. FromPure a P φ FromPure a P φ.
Proof. rewrite /FromPure=> <-. by rewrite -embed_pure embed_affinely_if_2. Qed. Proof. rewrite /FromPure=> <-. by rewrite -embed_pure embed_affinely_if_2. Qed.
(* IntoPersistent *) (** IntoPersistent *)
Global Instance into_persistent_persistently p P Q : Global Instance into_persistent_persistently p P Q :
IntoPersistent true P Q IntoPersistent p (<pers> P) Q | 0. IntoPersistent true P Q IntoPersistent p (<pers> P) Q | 0.
Proof. Proof.
...@@ -281,7 +281,7 @@ Global Instance into_persistent_persistent P : ...@@ -281,7 +281,7 @@ Global Instance into_persistent_persistent P :
Persistent P IntoPersistent false P P | 100. Persistent P IntoPersistent false P P | 100.
Proof. intros. by rewrite /IntoPersistent. Qed. Proof. intros. by rewrite /IntoPersistent. Qed.
(* FromModal *) (** FromModal *)
Global Instance from_modal_affinely P : Global Instance from_modal_affinely P :
FromModal modality_affinely (<affine> P) (<affine> P) P | 2. FromModal modality_affinely (<affine> P) (<affine> P) P | 2.
Proof. by rewrite /FromModal. Qed. Proof. by rewrite /FromModal. Qed.
...@@ -326,7 +326,7 @@ Global Instance from_modal_intuitionistically_embed `{BiEmbed PROP PROP'} `(sel ...@@ -326,7 +326,7 @@ Global Instance from_modal_intuitionistically_embed `{BiEmbed PROP PROP'} `(sel
FromModal modality_intuitionistically sel P Q | 100. FromModal modality_intuitionistically sel P Q | 100.
Proof. rewrite /FromModal /= =><-. by rewrite embed_intuitionistically_2. Qed. Proof. rewrite /FromModal /= =><-. by rewrite embed_intuitionistically_2. Qed.
(* IntoWand *) (** IntoWand *)
Global Instance into_wand_wand p q P Q P' : Global Instance into_wand_wand p q P Q P' :
FromAssumption q P P' IntoWand p q (P' - Q) P Q. FromAssumption q P P' IntoWand p q (P' - Q) P Q.
Proof. Proof.
...@@ -455,21 +455,21 @@ Proof. ...@@ -455,21 +455,21 @@ Proof.
by rewrite embed_affinely_2 embed_intuitionistically_if_2 embed_wand. by rewrite embed_affinely_2 embed_intuitionistically_if_2 embed_wand.
Qed. Qed.
(* FromWand *) (** FromWand *)
Global Instance from_wand_wand P1 P2 : FromWand (P1 - P2) P1 P2. Global Instance from_wand_wand P1 P2 : FromWand (P1 - P2) P1 P2.
Proof. by rewrite /FromWand. Qed. Proof. by rewrite /FromWand. Qed.
Global Instance from_wand_embed `{BiEmbed PROP PROP'} P Q1 Q2 : Global Instance from_wand_embed `{BiEmbed PROP PROP'} P Q1 Q2 :
FromWand P Q1 Q2 FromWand P Q1 Q2. FromWand P Q1 Q2 FromWand P Q1 Q2.
Proof. by rewrite /FromWand -embed_wand => <-. Qed. Proof. by rewrite /FromWand -embed_wand => <-. Qed.
(* FromImpl *) (** FromImpl *)
Global Instance from_impl_impl P1 P2 : FromImpl (P1 P2) P1 P2. Global Instance from_impl_impl P1 P2 : FromImpl (P1 P2) P1 P2.
Proof. by rewrite /FromImpl. Qed. Proof. by rewrite /FromImpl. Qed.
Global Instance from_impl_embed `{BiEmbed PROP PROP'} P Q1 Q2 : Global Instance from_impl_embed `{BiEmbed PROP PROP'} P Q1 Q2 :
FromImpl P Q1 Q2 FromImpl P Q1 Q2. FromImpl P Q1 Q2 FromImpl P Q1 Q2.
Proof. by rewrite /FromImpl -embed_impl => <-. Qed. Proof. by rewrite /FromImpl -embed_impl => <-. Qed.
(* FromAnd *) (** FromAnd *)
Global Instance from_and_and P1 P2 : FromAnd (P1 P2) P1 P2 | 100. Global Instance from_and_and P1 P2 : FromAnd (P1 P2) P1 P2 | 100.
Proof. by rewrite /FromAnd. Qed. Proof. by rewrite /FromAnd. Qed.
Global Instance from_and_sep_persistent_l P1 P1' P2 : Global Instance from_and_sep_persistent_l P1 P1' P2 :
...@@ -513,7 +513,7 @@ Global Instance from_and_big_sepL_app_persistent {A} (Φ : nat → A → PROP) l ...@@ -513,7 +513,7 @@ Global Instance from_and_big_sepL_app_persistent {A} (Φ : nat → A → PROP) l
([ list] k y l1, Φ k y) ([ list] k y l2, Φ (length l1 + k) y). ([ list] k y l1, Φ k y) ([ list] k y l2, Φ (length l1 + k) y).
Proof. intros. by rewrite /FromAnd big_opL_app persistent_and_sep_1. Qed. Proof. intros. by rewrite /FromAnd big_opL_app persistent_and_sep_1. Qed.
(* FromSep *) (** FromSep *)
Global Instance from_sep_sep P1 P2 : FromSep (P1 P2) P1 P2 | 100. Global Instance from_sep_sep P1 P2 : FromSep (P1 P2) P1 P2 | 100.
Proof. by rewrite /FromSep. Qed. Proof. by rewrite /FromSep. Qed.
Global Instance from_sep_and P1 P2 : Global Instance from_sep_and P1 P2 :
...@@ -550,7 +550,7 @@ Global Instance from_sep_big_sepL_app {A} (Φ : nat → A → PROP) l1 l2 : ...@@ -550,7 +550,7 @@ Global Instance from_sep_big_sepL_app {A} (Φ : nat → A → PROP) l1 l2 :
([ list] k y l1, Φ k y) ([ list] k y l2, Φ (length l1 + k) y). ([ list] k y l1, Φ k y) ([ list] k y l2, Φ (length l1 + k) y).
Proof. by rewrite /FromSep big_opL_app. Qed. Proof. by rewrite /FromSep big_opL_app. Qed.
(* IntoAnd *) (** IntoAnd *)
Global Instance into_and_and p P Q : IntoAnd p (P Q) P Q | 10. Global Instance into_and_and p P Q : IntoAnd p (P Q) P Q | 10.
Proof. by rewrite /IntoAnd intuitionistically_if_and. Qed. Proof. by rewrite /IntoAnd intuitionistically_if_and. Qed.
Global Instance into_and_and_affine_l P Q Q' : Global Instance into_and_and_affine_l P Q Q' :
...@@ -607,7 +607,7 @@ Proof. ...@@ -607,7 +607,7 @@ Proof.
by rewrite embed_intuitionistically_if_2 HP intuitionistically_if_elim. by rewrite embed_intuitionistically_if_2 HP intuitionistically_if_elim.
Qed. Qed.
(* IntoSep *) (** IntoSep *)
Global Instance into_sep_sep P Q : IntoSep (P Q) P Q. Global Instance into_sep_sep P Q : IntoSep (P Q) P Q.
Proof. by rewrite /IntoSep. Qed. Proof. by rewrite /IntoSep. Qed.
...@@ -690,7 +690,7 @@ Global Instance into_sep_big_sepL_app {A} (Φ : nat → A → PROP) l l1 l2 : ...@@ -690,7 +690,7 @@ Global Instance into_sep_big_sepL_app {A} (Φ : nat → A → PROP) l l1 l2 :
([ list] k y l1, Φ k y) ([ list] k y l2, Φ (length l1 + k) y). ([ list] k y l1, Φ k y) ([ list] k y l2, Φ (length l1 + k) y).
Proof. rewrite /IsApp=>->. by rewrite /IntoSep big_sepL_app. Qed. Proof. rewrite /IsApp=>->. by rewrite /IntoSep big_sepL_app. Qed.
(* FromOr *) (** FromOr *)
Global Instance from_or_or P1 P2 : FromOr (P1 P2) P1 P2. Global Instance from_or_or P1 P2 : FromOr (P1 P2) P1 P2.
Proof. by rewrite /FromOr. Qed. Proof. by rewrite /FromOr. Qed.
Global Instance from_or_pure φ ψ : @FromOr PROP ⌜φ ψ⌝ ⌜φ⌝ ⌜ψ⌝. Global Instance from_or_pure φ ψ : @FromOr PROP ⌜φ ψ⌝ ⌜φ⌝ ⌜ψ⌝.
...@@ -712,7 +712,7 @@ Global Instance from_or_embed `{BiEmbed PROP PROP'} P Q1 Q2 : ...@@ -712,7 +712,7 @@ Global Instance from_or_embed `{BiEmbed PROP PROP'} P Q1 Q2 :
FromOr P Q1 Q2 FromOr P Q1 Q2. FromOr P Q1 Q2 FromOr P Q1 Q2.
Proof. by rewrite /FromOr -embed_or => <-. Qed. Proof. by rewrite /FromOr -embed_or => <-. Qed.
(* IntoOr *) (** IntoOr *)
Global Instance into_or_or P Q : IntoOr (P Q) P Q. Global Instance into_or_or P Q : IntoOr (P Q) P Q.
Proof. by rewrite /IntoOr. Qed. Proof. by rewrite /IntoOr. Qed.
Global Instance into_or_pure φ ψ : @IntoOr PROP ⌜φ ψ⌝ ⌜φ⌝ ⌜ψ⌝. Global Instance into_or_pure φ ψ : @IntoOr PROP ⌜φ ψ⌝ ⌜φ⌝ ⌜ψ⌝.
...@@ -734,7 +734,7 @@ Global Instance into_or_embed `{BiEmbed PROP PROP'} P Q1 Q2 : ...@@ -734,7 +734,7 @@ Global Instance into_or_embed `{BiEmbed PROP PROP'} P Q1 Q2 :
IntoOr P Q1 Q2 IntoOr P Q1 Q2. IntoOr P Q1 Q2 IntoOr P Q1 Q2.
Proof. by rewrite /IntoOr -embed_or => <-. Qed. Proof. by rewrite /IntoOr -embed_or => <-. Qed.
(* FromExist *) (** FromExist *)
Global Instance from_exist_exist {A} (Φ : A PROP): FromExist ( a, Φ a) Φ. Global Instance from_exist_exist {A} (Φ : A PROP): FromExist ( a, Φ a) Φ.
Proof. by rewrite /FromExist. Qed. Proof. by rewrite /FromExist. Qed.
Global Instance from_exist_pure {A} (φ : A Prop) : Global Instance from_exist_pure {A} (φ : A Prop) :
...@@ -756,7 +756,7 @@ Global Instance from_exist_embed `{BiEmbed PROP PROP'} {A} P (Φ : A → PROP) : ...@@ -756,7 +756,7 @@ Global Instance from_exist_embed `{BiEmbed PROP PROP'} {A} P (Φ : A → PROP) :
FromExist P Φ FromExist P (λ a, ⎡Φ a%I). FromExist P Φ FromExist P (λ a, ⎡Φ a%I).
Proof. by rewrite /FromExist -embed_exist => <-. Qed. Proof. by rewrite /FromExist -embed_exist => <-. Qed.
(* IntoExist *) (** IntoExist *)
Global Instance into_exist_exist {A} (Φ : A PROP) : IntoExist ( a, Φ a) Φ. Global Instance into_exist_exist {A} (Φ : A PROP) : IntoExist ( a, Φ a) Φ.
Proof. by rewrite /IntoExist. Qed. Proof. by rewrite /IntoExist. Qed.
Global Instance into_exist_pure {A} (φ : A Prop) : Global Instance into_exist_pure {A} (φ : A Prop) :
...@@ -791,7 +791,7 @@ Global Instance into_exist_embed `{BiEmbed PROP PROP'} {A} P (Φ : A → PROP) : ...@@ -791,7 +791,7 @@ Global Instance into_exist_embed `{BiEmbed PROP PROP'} {A} P (Φ : A → PROP) :
IntoExist P Φ IntoExist P (λ a, ⎡Φ a%I). IntoExist P Φ IntoExist P (λ a, ⎡Φ a%I).
Proof. by rewrite /IntoExist -embed_exist => <-. Qed. Proof. by rewrite /IntoExist -embed_exist => <-. Qed.
(* IntoForall *) (** IntoForall *)
Global Instance into_forall_forall {A} (Φ : A PROP) : IntoForall ( a, Φ a) Φ. Global Instance into_forall_forall {A} (Φ : A PROP) : IntoForall ( a, Φ a) Φ.
Proof. by rewrite /IntoForall. Qed. Proof. by rewrite /IntoForall. Qed.
Global Instance into_forall_affinely {A} P (Φ : A PROP) : Global Instance into_forall_affinely {A} P (Φ : A PROP) :
...@@ -807,15 +807,6 @@ Global Instance into_forall_embed `{BiEmbed PROP PROP'} {A} P (Φ : A → PROP) ...@@ -807,15 +807,6 @@ Global Instance into_forall_embed `{BiEmbed PROP PROP'} {A} P (Φ : A → PROP)
IntoForall P Φ IntoForall P (λ a, ⎡Φ a%I). IntoForall P Φ IntoForall P (λ a, ⎡Φ a%I).
Proof. by rewrite /IntoForall -embed_forall => <-. Qed. Proof. by rewrite /IntoForall -embed_forall => <-. Qed.
(* These instances must be used only after [into_forall_wand_pure] and
[into_forall_wand_pure]. *)
Global Instance into_forall_wand P Q :
IntoForall (P - Q) (λ _ : bi_emp_valid P, Q) | 10.
Proof. rewrite /IntoForall. apply forall_intro=><-. rewrite emp_wand //. Qed.
Global Instance into_forall_impl `{!BiAffine PROP} P Q :
IntoForall (P Q) (λ _ : bi_emp_valid P, Q) | 10.
Proof. rewrite /IntoForall. apply forall_intro=><-. rewrite -True_emp True_impl //. Qed.
Global Instance into_forall_impl_pure φ P Q : Global Instance into_forall_impl_pure φ P Q :
FromPureT false P φ IntoForall (P Q) (λ _ : φ, Q). FromPureT false P φ IntoForall (P Q) (λ _ : φ, Q).
Proof. Proof.
...@@ -830,7 +821,16 @@ Proof. ...@@ -830,7 +821,16 @@ Proof.
by rewrite -(pure_intro _ True%I) // /bi_affinely right_id emp_wand. by rewrite -(pure_intro _ True%I) // /bi_affinely right_id emp_wand.
Qed. Qed.
(* FromForall *) (* These instances must be used only after [into_forall_wand_pure] and
[into_forall_wand_pure] above. *)
Global Instance into_forall_wand P Q :
IntoForall (P - Q) (λ _ : bi_emp_valid P, Q) | 10.
Proof. rewrite /IntoForall. apply forall_intro=><-. rewrite emp_wand //. Qed.
Global Instance into_forall_impl `{!BiAffine PROP} P Q :
IntoForall (P Q) (λ _ : bi_emp_valid P, Q) | 10.
Proof. rewrite /IntoForall. apply forall_intro=><-. rewrite -True_emp True_impl //. Qed.
(** FromForall *)
Global Instance from_forall_forall {A} (Φ : A PROP) : Global Instance from_forall_forall {A} (Φ : A PROP) :
FromForall ( x, Φ x)%I Φ. FromForall ( x, Φ x)%I Φ.
Proof. by rewrite /FromForall. Qed. Proof. by rewrite /FromForall. Qed.
...@@ -868,11 +868,11 @@ Global Instance from_forall_embed `{BiEmbed PROP PROP'} {A} P (Φ : A → PROP) ...@@ -868,11 +868,11 @@ Global Instance from_forall_embed `{BiEmbed PROP PROP'} {A} P (Φ : A → PROP)
FromForall P Φ FromForall P%I (λ a, ⎡Φ a%I). FromForall P Φ FromForall P%I (λ a, ⎡Φ a%I).
Proof. by rewrite /FromForall -embed_forall => <-. Qed. Proof. by rewrite /FromForall -embed_forall => <-. Qed.
(* IntoInv *) (** IntoInv *)
Global Instance into_inv_embed {PROP' : bi} `{BiEmbed PROP PROP'} P N : Global Instance into_inv_embed {PROP' : bi} `{BiEmbed PROP PROP'} P N :
IntoInv P N IntoInv P N. IntoInv P N IntoInv P N.
(* ElimModal *) (** ElimModal *)
Global Instance elim_modal_wand φ p p' P P' Q Q' R : Global Instance elim_modal_wand φ p p' P P' Q Q' R :
ElimModal φ p p' P P' Q Q' ElimModal φ p p' P P' (R - Q) (R - Q'). ElimModal φ p p' P P' Q Q' ElimModal φ p p' P P' (R - Q) (R - Q').
Proof. Proof.
...@@ -909,7 +909,7 @@ Global Instance elim_modal_embed_bupd_hyp `{BiEmbedBUpd PROP PROP'} ...@@ -909,7 +909,7 @@ Global Instance elim_modal_embed_bupd_hyp `{BiEmbedBUpd PROP PROP'}
ElimModal φ p p' |==> P P' Q Q'. ElimModal φ p p' |==> P P' Q Q'.
Proof. by rewrite /ElimModal !embed_bupd. Qed. Proof. by rewrite /ElimModal !embed_bupd. Qed.
(* AddModal *) (** AddModal *)
Global Instance add_modal_wand P P' Q R : Global Instance add_modal_wand P P' Q R :
AddModal P P' Q AddModal P P' (R - Q). AddModal P P' Q AddModal P P' (R - Q).
Proof. Proof.
...@@ -926,7 +926,7 @@ Global Instance add_modal_embed_bupd_goal `{BiEmbedBUpd PROP PROP'} ...@@ -926,7 +926,7 @@ Global Instance add_modal_embed_bupd_goal `{BiEmbedBUpd PROP PROP'}
AddModal P P' (|==> Q)%I AddModal P P' |==> Q. AddModal P P' (|==> Q)%I AddModal P P' |==> Q.
Proof. by rewrite /AddModal !embed_bupd. Qed. Proof. by rewrite /AddModal !embed_bupd. Qed.
(* ElimInv *) (** ElimInv *)
Global Instance elim_inv_acc_without_close {X : Type} Global Instance elim_inv_acc_without_close {X : Type}
φ Pinv Pin φ Pinv Pin
M1 M2 α β mγ Q (Q' : X PROP) : M1 M2 α β mγ Q (Q' : X PROP) :
...@@ -956,7 +956,7 @@ Proof. ...@@ -956,7 +956,7 @@ Proof.
iApply "Hcont". simpl. iSplitL "Hα"; done. iApply "Hcont". simpl. iSplitL "Hα"; done.
Qed. Qed.
(* IntoEmbed *) (** IntoEmbed *)
Global Instance into_embed_embed {PROP' : bi} `{BiEmbed PROP PROP'} P : Global Instance into_embed_embed {PROP' : bi} `{BiEmbed PROP PROP'} P :
IntoEmbed P P. IntoEmbed P P.
Proof. by rewrite /IntoEmbed. Qed. Proof. by rewrite /IntoEmbed. Qed.
......
...@@ -8,7 +8,7 @@ Section sbi_instances. ...@@ -8,7 +8,7 @@ Section sbi_instances.
Context {PROP : sbi}. Context {PROP : sbi}.
Implicit Types P Q R : PROP. Implicit Types P Q R : PROP.
(* FromAssumption *) (** FromAssumption *)
Global Instance from_assumption_later p P Q : Global Instance from_assumption_later p P Q :
FromAssumption p P Q KnownRFromAssumption p P ( Q)%I. FromAssumption p P Q KnownRFromAssumption p P ( Q)%I.
Proof. rewrite /KnownRFromAssumption /FromAssumption=>->. apply later_intro. Qed. Proof. rewrite /KnownRFromAssumption /FromAssumption=>->. apply later_intro. Qed.
...@@ -39,7 +39,7 @@ Proof. ...@@ -39,7 +39,7 @@ Proof.
rewrite plainly_elim_persistently intuitionistically_into_persistently //. rewrite plainly_elim_persistently intuitionistically_into_persistently //.
Qed. Qed.
(* FromPure *) (** FromPure *)
Global Instance from_pure_internal_eq af {A : ofeT} (a b : A) : Global Instance from_pure_internal_eq af {A : ofeT} (a b : A) :
@FromPure PROP af (a b) (a b). @FromPure PROP af (a b) (a b).
Proof. by rewrite /FromPure pure_internal_eq affinely_if_elim. Qed. Proof. by rewrite /FromPure pure_internal_eq affinely_if_elim. Qed.
...@@ -61,7 +61,7 @@ Global Instance from_pure_plainly `{BiPlainly PROP} P φ : ...@@ -61,7 +61,7 @@ Global Instance from_pure_plainly `{BiPlainly PROP} P φ :
FromPure false P φ FromPure false ( P) φ. FromPure false P φ FromPure false ( P) φ.
Proof. rewrite /FromPure=> <-. by rewrite plainly_pure. Qed. Proof. rewrite /FromPure=> <-. by rewrite plainly_pure. Qed.
(* IntoPure *) (** IntoPure *)
Global Instance into_pure_eq {A : ofeT} (a b : A) : Global Instance into_pure_eq {A : ofeT} (a b : A) :
Discrete a @IntoPure PROP (a b) (a b). Discrete a @IntoPure PROP (a b) (a b).
Proof. intros. by rewrite /IntoPure discrete_eq. Qed. Proof. intros. by rewrite /IntoPure discrete_eq. Qed.
...@@ -70,7 +70,7 @@ Global Instance into_pure_plainly `{BiPlainly PROP} P φ : ...@@ -70,7 +70,7 @@ Global Instance into_pure_plainly `{BiPlainly PROP} P φ :
IntoPure P φ IntoPure ( P) φ. IntoPure P φ IntoPure ( P) φ.
Proof. rewrite /IntoPure=> ->. apply: plainly_elim. Qed. Proof. rewrite /IntoPure=> ->. apply: plainly_elim. Qed.
(* IntoWand *) (** IntoWand *)
Global Instance into_wand_later p q R P Q : Global Instance into_wand_later p q R P Q :
IntoWand p q R P Q IntoWand p q ( R) ( P) ( Q). IntoWand p q R P Q IntoWand p q ( R) ( P) ( Q).
Proof. Proof.
...@@ -144,7 +144,7 @@ Global Instance into_wand_plainly_false `{BiPlainly PROP} q R P Q : ...@@ -144,7 +144,7 @@ Global Instance into_wand_plainly_false `{BiPlainly PROP} q R P Q :
Absorbing R IntoWand false q R P Q IntoWand false q ( R) P Q. Absorbing R IntoWand false q R P Q IntoWand false q ( R) P Q.
Proof. intros ?. by rewrite /IntoWand plainly_elim. Qed. Proof. intros ?. by rewrite /IntoWand plainly_elim. Qed.
(* FromAnd *) (** FromAnd *)
Global Instance from_and_later P Q1 Q2 : Global Instance from_and_later P Q1 Q2 :
FromAnd P Q1 Q2 FromAnd ( P) ( Q1) ( Q2). FromAnd P Q1 Q2 FromAnd ( P) ( Q1) ( Q2).
Proof. rewrite /FromAnd=> <-. by rewrite later_and. Qed. Proof. rewrite /FromAnd=> <-. by rewrite later_and. Qed.
...@@ -159,7 +159,7 @@ Global Instance from_and_plainly `{BiPlainly PROP} P Q1 Q2 : ...@@ -159,7 +159,7 @@ Global Instance from_and_plainly `{BiPlainly PROP} P Q1 Q2 :
FromAnd P Q1 Q2 FromAnd ( P) ( Q1) ( Q2). FromAnd P Q1 Q2 FromAnd ( P) ( Q1) ( Q2).
Proof. rewrite /FromAnd=> <-. by rewrite plainly_and. Qed. Proof. rewrite /FromAnd=> <-. by rewrite plainly_and. Qed.
(* FromSep *) (** FromSep *)
Global Instance from_sep_later P Q1 Q2 : Global Instance from_sep_later P Q1 Q2 :
FromSep P Q1 Q2 FromSep ( P) ( Q1) ( Q2). FromSep P Q1 Q2 FromSep ( P) ( Q1) ( Q2).
Proof. rewrite /FromSep=> <-. by rewrite later_sep. Qed. Proof. rewrite /FromSep=> <-. by rewrite later_sep. Qed.
...@@ -181,7 +181,7 @@ Global Instance from_sep_plainly `{BiPlainly PROP} P Q1 Q2 : ...@@ -181,7 +181,7 @@ Global Instance from_sep_plainly `{BiPlainly PROP} P Q1 Q2 :
FromSep P Q1 Q2 FromSep ( P) ( Q1) ( Q2). FromSep P Q1 Q2 FromSep ( P) ( Q1) ( Q2).
Proof. rewrite /FromSep=> <-. by rewrite plainly_sep_2. Qed. Proof. rewrite /FromSep=> <-. by rewrite plainly_sep_2. Qed.
(* IntoAnd *) (** IntoAnd *)
Global Instance into_and_later p P Q1 Q2 : Global Instance into_and_later p P Q1 Q2 :
IntoAnd p P Q1 Q2 IntoAnd p ( P) ( Q1) ( Q2). IntoAnd p P Q1 Q2 IntoAnd p ( P) ( Q1) ( Q2).
Proof. Proof.
...@@ -213,7 +213,7 @@ Proof. ...@@ -213,7 +213,7 @@ Proof.
- intros ->. by rewrite plainly_and. - intros ->. by rewrite plainly_and.
Qed. Qed.
(* IntoSep *) (** IntoSep *)
Global Instance into_sep_later P Q1 Q2 : Global Instance into_sep_later P Q1 Q2 :
IntoSep P Q1 Q2 IntoSep ( P) ( Q1) ( Q2). IntoSep P Q1 Q2 IntoSep ( P) ( Q1) ( Q2).
Proof. rewrite /IntoSep=> ->. by rewrite later_sep. Qed. Proof. rewrite /IntoSep=> ->. by rewrite later_sep. Qed.
...@@ -248,7 +248,7 @@ Proof. ...@@ -248,7 +248,7 @@ Proof.
rewrite /IntoSep /= => -> ??. by rewrite sep_and plainly_and plainly_and_sep_l_1. rewrite /IntoSep /= => -> ??. by rewrite sep_and plainly_and plainly_and_sep_l_1.
Qed. Qed.
(* FromOr *) (** FromOr *)
Global Instance from_or_later P Q1 Q2 : Global Instance from_or_later P Q1 Q2 :
FromOr P Q1 Q2 FromOr ( P) ( Q1) ( Q2). FromOr P Q1 Q2 FromOr ( P) ( Q1) ( Q2).
Proof. rewrite /FromOr=><-. by rewrite later_or. Qed. Proof. rewrite /FromOr=><-. by rewrite later_or. Qed.
...@@ -276,7 +276,7 @@ Global Instance from_or_plainly `{BiPlainly PROP} P Q1 Q2 : ...@@ -276,7 +276,7 @@ Global Instance from_or_plainly `{BiPlainly PROP} P Q1 Q2 :
FromOr P Q1 Q2 FromOr ( P) ( Q1) ( Q2). FromOr P Q1 Q2 FromOr ( P) ( Q1) ( Q2).
Proof. rewrite /FromOr=> <-. by rewrite -plainly_or_2. Qed. Proof. rewrite /FromOr=> <-. by rewrite -plainly_or_2. Qed.
(* IntoOr *) (** IntoOr *)
Global Instance into_or_later P Q1 Q2 : Global Instance into_or_later P Q1 Q2 :
IntoOr P Q1 Q2 IntoOr ( P) ( Q1) ( Q2). IntoOr P Q1 Q2 IntoOr ( P) ( Q1) ( Q2).
Proof. rewrite /IntoOr=>->. by rewrite later_or. Qed. Proof. rewrite /IntoOr=>->. by rewrite later_or. Qed.
...@@ -291,7 +291,7 @@ Global Instance into_or_plainly `{BiPlainly PROP, BiPlainlyExist PROP} P Q1 Q2 : ...@@ -291,7 +291,7 @@ Global Instance into_or_plainly `{BiPlainly PROP, BiPlainlyExist PROP} P Q1 Q2 :
IntoOr P Q1 Q2 IntoOr ( P) ( Q1) ( Q2). IntoOr P Q1 Q2 IntoOr ( P) ( Q1) ( Q2).
Proof. rewrite /IntoOr=>->. by rewrite plainly_or. Qed. Proof. rewrite /IntoOr=>->. by rewrite plainly_or. Qed.
(* FromExist *) (** FromExist *)
Global Instance from_exist_later {A} P (Φ : A PROP) : Global Instance from_exist_later {A} P (Φ : A PROP) :
FromExist P Φ FromExist ( P) (λ a, (Φ a))%I. FromExist P Φ FromExist ( P) (λ a, (Φ a))%I.
Proof. Proof.
...@@ -321,7 +321,7 @@ Global Instance from_exist_plainly `{BiPlainly PROP} {A} P (Φ : A → PROP) : ...@@ -321,7 +321,7 @@ Global Instance from_exist_plainly `{BiPlainly PROP} {A} P (Φ : A → PROP) :
FromExist P Φ FromExist ( P) (λ a, (Φ a))%I. FromExist P Φ FromExist ( P) (λ a, (Φ a))%I.
Proof. rewrite /FromExist=> <-. by rewrite -plainly_exist_2. Qed. Proof. rewrite /FromExist=> <-. by rewrite -plainly_exist_2. Qed.
(* IntoExist *) (** IntoExist *)
Global Instance into_exist_later {A} P (Φ : A PROP) : Global Instance into_exist_later {A} P (Φ : A PROP) :
IntoExist P Φ Inhabited A IntoExist ( P) (λ a, (Φ a))%I. IntoExist P Φ Inhabited A IntoExist ( P) (λ a, (Φ a))%I.
Proof. rewrite /IntoExist=> HP ?. by rewrite HP later_exist. Qed. Proof. rewrite /IntoExist=> HP ?. by rewrite HP later_exist. Qed.
...@@ -336,7 +336,7 @@ Global Instance into_exist_plainly `{BiPlainlyExist PROP} {A} P (Φ : A → PROP ...@@ -336,7 +336,7 @@ Global Instance into_exist_plainly `{BiPlainlyExist PROP} {A} P (Φ : A → PROP
IntoExist P Φ IntoExist ( P) (λ a, (Φ a))%I. IntoExist P Φ IntoExist ( P) (λ a, (Φ a))%I.
Proof. rewrite /IntoExist=> HP. by rewrite HP plainly_exist. Qed. Proof. rewrite /IntoExist=> HP. by rewrite HP plainly_exist. Qed.
(* IntoForall *) (** IntoForall *)
Global Instance into_forall_later {A} P (Φ : A PROP) : Global Instance into_forall_later {A} P (Φ : A PROP) :
IntoForall P Φ IntoForall ( P) (λ a, (Φ a))%I. IntoForall P Φ IntoForall ( P) (λ a, (Φ a))%I.
Proof. rewrite /IntoForall=> HP. by rewrite HP later_forall. Qed. Proof. rewrite /IntoForall=> HP. by rewrite HP later_forall. Qed.
...@@ -348,7 +348,7 @@ Global Instance into_forall_plainly `{BiPlainly PROP} {A} P (Φ : A → PROP) : ...@@ -348,7 +348,7 @@ Global Instance into_forall_plainly `{BiPlainly PROP} {A} P (Φ : A → PROP) :
IntoForall P Φ IntoForall ( P) (λ a, (Φ a))%I. IntoForall P Φ IntoForall ( P) (λ a, (Φ a))%I.
Proof. rewrite /IntoForall=> HP. by rewrite HP plainly_forall. Qed. Proof. rewrite /IntoForall=> HP. by rewrite HP plainly_forall. Qed.
(* FromForall *)