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