 31 Oct, 2017 1 commit


Robbert Krebbers authored

 30 Oct, 2017 9 commits


Robbert Krebbers authored
Whenever we iSpecialize something whose conclusion is persistent, we now have to prove all the premises under the sink modality. This is strictly more powerful, as we now have to use just some of the hypotheses to prove the premises, instead of all.

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored
This also applies to the introduction pattern `!#`. Both will now introduce as many ■ or □ as possible. This behavior is consistent with the dual, `#`, which also gets rid of as many ■ and □ modalities as possible.

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored
The absence of this axiom has two consequences:  We no longer have `■ (P ∗ Q) ⊢ ■ P ∗ ■ Q` and `□ (P ∗ Q) ⊢ □ P ∗ □ Q`, and as a result, separating conjunctions in the unrestricted/persistent context cannot be eliminated.  When having `(P ∗ ⬕ Q) ∗ P`, we do not get `⬕ Q ∗ P`. In the proof mode this means when having: H1 : P ∗ ⬕ Q H2 : P We cannot say `iDestruct ("H1" with "H2") as "#H1"` and keep `H2`. However, there is now a type class `PositiveBI PROP`, and when there is an instance of this type class, one gets the above reasoning principle back. TODO: Can we describe positivity of individual propositions instead of the whole BI? That way, we would get the above reasoning principles even when the BI is not positive, but the propositions involved are.

Robbert Krebbers authored

Robbert Krebbers authored

 25 Oct, 2017 3 commits


Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored
I have reimplemented the tactic for introduction of ∀s/pures using type classes, which directly made it much more modular.

 05 Oct, 2017 1 commit


Robbert Krebbers authored

 28 Sep, 2017 1 commit


Robbert Krebbers authored

 27 Sep, 2017 1 commit


Robbert Krebbers authored

 26 Sep, 2017 2 commits


Robbert Krebbers authored

Robbert Krebbers authored
We used to normalize the goal, and then checked whether it was of a certain shape. Since `uPred_valid P` normalized to `True ⊢ P`, there was no way of making a distinction between the two, hence `True ⊢ P` was treated as `uPred_valid P`. In this commit, I use type classes to check whether the goal is of a certain shape. Since we declared `uPred_valid` as `Typeclasses Opaque`, we can now make a distinction between `True ⊢ P` and `uPred_valid P`.

 21 Sep, 2017 1 commit


Robbert Krebbers authored

 28 Aug, 2017 4 commits


Robbert Krebbers authored
persistent context. Given the source does not contain a box:  Before: noop if there is a Persistent instance.  Now: noop in all cases.

Robbert Krebbers authored
We now first iPoseProof the lemma and instantiate its premises before trying to search for the subterm where to apply. As a result, instantiation of the premises of the applied lemmas happens only once, instead of it being done for each subterm as obtained by reshape_expr.

Robbert Krebbers authored

Robbert Krebbers authored

 24 Aug, 2017 1 commit


Robbert Krebbers authored

 20 Aug, 2017 1 commit


Robbert Krebbers authored
This makes it easier to frame or introduce some modalities before introducing universal quantifiers.

 04 Aug, 2017 1 commit


Robbert Krebbers authored

 12 May, 2017 3 commits


Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored
Otherwise, the tactic will fail subsequently. Besides, it was inconsistent w.r.t. the iLöb tactic, which was already doing this.

 09 May, 2017 1 commit


Robbert Krebbers authored

 13 Apr, 2017 1 commit


Robbert Krebbers authored

 28 Mar, 2017 1 commit


Robbert Krebbers authored

 23 Mar, 2017 1 commit


Robbert Krebbers authored
This fixes issue #84.

 21 Mar, 2017 1 commit


Robbert Krebbers authored

 16 Mar, 2017 5 commits


Robbert Krebbers authored
This fixes issue #81.

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored

 15 Mar, 2017 1 commit


Robbert Krebbers authored
 Allow framing of persistent hypotheses below the always modality.  Allow framing of persistent hypotheses in just one branch of a disjunction.
