 31 Oct, 2017 2 commits


Robbert Krebbers authored

Robbert Krebbers authored

 30 Oct, 2017 26 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

Robbert Krebbers authored

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
(All the later lemmas are now prefixed by later_, and dito for laterN, and except_0).

Robbert Krebbers authored

Aleš Bizjak authored

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored
These unfolds kind of make sense, and I was quite surprised that it used to work before. However, when changing to primitive records, these unfolds are actually needed.

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
Otherwise, ownership of cores in our ordered RA model will not be persistent.

Robbert Krebbers authored

Robbert Krebbers authored
Otherwise, whenever it cannot establish the Absorbing or Affine premise, it will backtrack on the FromAssumption premise, causing a possible loop. No idea why this happens, this may be a Coq bug...

Robbert Krebbers authored

Robbert Krebbers authored
As Aleš observed, in the ordered RA model it is not, unless the order on the unit is timeless.

Robbert Krebbers authored

Robbert Krebbers authored
Thanks to discussions with Ales and Amin.

Robbert Krebbers authored

 26 Oct, 2017 3 commits


Robbert Krebbers authored

Robbert Krebbers authored
Coq also uses level 200 for these constructs. Besides, heap_lang's match and if were also already at this level.

Robbert Krebbers authored
Now, associativity needs only to be established in case the elements are valid and their compositions are defined. This is very much like the notion of separation algebras I had in my PhD thesis (Def 4.2.1). The Dra to Ra construction still easily works out.

 25 Oct, 2017 9 commits


Robbert Krebbers authored
Replace/remove some occurences of `persistently` into `persistent` where the property instead of the modality is used.

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored
Rename `UCMRA` → `Ucmra` Rename `CMRA` → `Cmra` Rename `OFE` → `Ofe` (`Ofe` was already used partially, but many occurences were missing) Rename `STS` → `Sts` Rename `DRA` → `Dra`

Robbert Krebbers authored

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.
