Skip to content
Snippets Groups Projects
Commit d179e416 authored by Robbert Krebbers's avatar Robbert Krebbers
Browse files

Make `iFrame` "less" smart w.r.t. clean up of modalities.

Previously, if would "cleanup" `<affine>` and `□` if the result after framing
is affine and intuitionistic, respectively. This behavior was inconsistent,
since similar "cleanup" was not performed for `<absorbing>` and `<persistent>`.
This MR thus removes this "cleanup" of modalities. It now consistently removes
the modalities `<affine>`, `<absorbing>, `<persistent>` and `□` only if the
result after framing is `True` or `emp`.

Since `iFrame` is already very complicated, and since its performance is
sometimes suboptimal in bigger developments, @jung and I believed doing
fewer "smart" things is better than the alternative, namely performing doing
sophisticated "cleanup" for all modalities, which is presented in
!450
parent 5aaf3c6f
No related branches found
No related tags found
1 merge request!521Make `iFrame` "less" smart w.r.t. clean up of modalities.
...@@ -188,10 +188,10 @@ Proof. ...@@ -188,10 +188,10 @@ Proof.
by rewrite assoc (comm _ P1) -assoc wand_elim_r. by rewrite assoc (comm _ P1) -assoc wand_elim_r.
Qed. Qed.
Global Instance make_affinely_emp : @KnownMakeAffinely PROP emp emp | 0.
Proof. by rewrite /KnownMakeAffinely /MakeAffinely affinely_emp. Qed.
Global Instance make_affinely_True : @KnownMakeAffinely PROP True emp | 0. Global Instance make_affinely_True : @KnownMakeAffinely PROP True emp | 0.
Proof. by rewrite /KnownMakeAffinely /MakeAffinely affinely_True_emp affinely_emp. Qed. Proof. by rewrite /KnownMakeAffinely /MakeAffinely affinely_True_emp affinely_emp. Qed.
Global Instance make_affinely_affine P : Affine P KnownMakeAffinely P P | 1.
Proof. intros. by rewrite /KnownMakeAffinely /MakeAffinely affine_affinely. Qed.
Global Instance make_affinely_default P : MakeAffinely P (<affine> P) | 100. Global Instance make_affinely_default P : MakeAffinely P (<affine> P) | 100.
Proof. by rewrite /MakeAffinely. Qed. Proof. by rewrite /MakeAffinely. Qed.
...@@ -202,17 +202,17 @@ Proof. ...@@ -202,17 +202,17 @@ Proof.
rewrite -{1}(affine_affinely ( R)%I) affinely_sep_2 //. rewrite -{1}(affine_affinely ( R)%I) affinely_sep_2 //.
Qed. Qed.
Global Instance make_intuitionistically_True : Global Instance make_intuitionistically_emp :
@KnownMakeIntuitionistically PROP True emp | 0. @KnownMakeIntuitionistically PROP emp emp | 0.
Proof. Proof.
by rewrite /KnownMakeIntuitionistically /MakeIntuitionistically by rewrite /KnownMakeIntuitionistically /MakeIntuitionistically
intuitionistically_True_emp. intuitionistically_emp.
Qed. Qed.
Global Instance make_intuitionistically_intuitionistic P : Global Instance make_intuitionistically_True :
Affine P Persistent P KnownMakeIntuitionistically P P | 1. @KnownMakeIntuitionistically PROP True emp | 0.
Proof. Proof.
intros. rewrite /KnownMakeIntuitionistically /MakeIntuitionistically. by rewrite /KnownMakeIntuitionistically /MakeIntuitionistically
rewrite intuitionistic_intuitionistically //. intuitionistically_True_emp.
Qed. Qed.
Global Instance make_intuitionistically_default P : Global Instance make_intuitionistically_default P :
MakeIntuitionistically P ( P) | 100. MakeIntuitionistically P ( P) | 100.
...@@ -230,9 +230,8 @@ Proof. ...@@ -230,9 +230,8 @@ Proof.
by rewrite /KnownMakeAbsorbingly /MakeAbsorbingly by rewrite /KnownMakeAbsorbingly /MakeAbsorbingly
-absorbingly_True_emp absorbingly_pure. -absorbingly_True_emp absorbingly_pure.
Qed. Qed.
(* Note: there is no point in having an instance `Absorbing P → MakeAbsorbingly P P` Global Instance make_absorbingly_True : @KnownMakeAbsorbingly PROP True True | 0.
because framing will never turn a proposition that is not absorbing into Proof. by rewrite /KnownMakeAbsorbingly /MakeAbsorbingly absorbingly_pure. Qed.
something that is absorbing. *)
Global Instance make_absorbingly_default P : MakeAbsorbingly P (<absorb> P) | 100. Global Instance make_absorbingly_default P : MakeAbsorbingly P (<absorb> P) | 100.
Proof. by rewrite /MakeAbsorbingly. Qed. Proof. by rewrite /MakeAbsorbingly. Qed.
...@@ -242,13 +241,13 @@ Proof. ...@@ -242,13 +241,13 @@ Proof.
rewrite /Frame /MakeAbsorbingly=> <- <- /=. by rewrite absorbingly_sep_r. rewrite /Frame /MakeAbsorbingly=> <- <- /=. by rewrite absorbingly_sep_r.
Qed. Qed.
Global Instance make_persistently_true : @KnownMakePersistently PROP True True.
Proof. by rewrite /KnownMakePersistently /MakePersistently persistently_pure. Qed.
Global Instance make_persistently_emp : @KnownMakePersistently PROP emp True. Global Instance make_persistently_emp : @KnownMakePersistently PROP emp True.
Proof. Proof.
by rewrite /KnownMakePersistently /MakePersistently by rewrite /KnownMakePersistently /MakePersistently
-persistently_True_emp persistently_pure. -persistently_True_emp persistently_pure.
Qed. Qed.
Global Instance make_persistently_True : @KnownMakePersistently PROP True True.
Proof. by rewrite /KnownMakePersistently /MakePersistently persistently_pure. Qed.
Global Instance make_persistently_default P : Global Instance make_persistently_default P :
MakePersistently P (<pers> P) | 100. MakePersistently P (<pers> P) | 100.
Proof. by rewrite /MakePersistently. Qed. Proof. by rewrite /MakePersistently. Qed.
...@@ -259,7 +258,7 @@ Proof. ...@@ -259,7 +258,7 @@ Proof.
rewrite /Frame /MakePersistently=> <- <- /=. rewrite /Frame /MakePersistently=> <- <- /=.
rewrite -persistently_and_intuitionistically_sep_l. rewrite -persistently_and_intuitionistically_sep_l.
by rewrite -persistently_sep_2 -persistently_and_sep_l_1 by rewrite -persistently_sep_2 -persistently_and_sep_l_1
persistently_affinely_elim persistently_idemp. persistently_affinely_elim persistently_idemp.
Qed. Qed.
Global Instance frame_exist {A} p R (Φ Ψ : A PROP) : Global Instance frame_exist {A} p R (Φ Ψ : A PROP) :
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment