- Dec 07, 2017
-
-
Ralf Jung authored
-
- Dec 05, 2017
-
-
Robbert Krebbers authored
-
Ralf Jung authored
-
- Nov 30, 2017
-
-
Robbert Krebbers authored
-
Robbert Krebbers authored
-
- Nov 13, 2017
-
-
Robbert Krebbers authored
-
- Nov 11, 2017
-
-
Robbert Krebbers authored
-
- Nov 09, 2017
-
-
David Swasey authored
This reverts commit 913059d2.
-
David Swasey authored
I saw no need for `stuckness_flip`: strong atomicity always works, while weak atomicity works only for expressions that are not stuck. Since this seemed unclear, I split lemma `wp_atomic'` up into `wp_strong_atomic` (parametric in the WP's `s`) and `wp_weak_atomic` (not). The proof mode instance is stated in terms of the derived rule `wp_atomic` (parametric in `s`).
-
David Swasey authored
-
- Nov 08, 2017
-
-
David Swasey authored
-
David Swasey authored
-
David Swasey authored
-
- Nov 04, 2017
-
-
Robbert Krebbers authored
-
- Nov 01, 2017
-
-
Robbert Krebbers authored
This solves issue #100: the proof mode notation is sometimes not printed. As Ralf discovered, the problem is that there are two overlapping notations: ```coq Notation "P ⊢ Q" := (uPred_entails P Q). ``` And the "proof mode" notation: ``` Notation "Γ '--------------------------------------' □ Δ '--------------------------------------' ∗ Q" := (of_envs (Envs Γ Δ) ⊢ Q%I). ``` These two notations overlap, so, when having a "proof mode" goal of the shape `of_envs (Envs Γ Δ) ⊢ Q%I`, how do we know which notation is Coq going to pick for pretty printing this goal? As we have seen, this choice depends on the import order (since both notations appear in different files), and as such, Coq sometimes (unintendedly) uses the first notation instead of the latter. The idea of this commit is to wrap `of_envs (Envs Γ Δ) ⊢ Q%I` into a definition so that there is no ambiguity for the pretty printer anymore.
-
- Oct 30, 2017
-
-
Robbert Krebbers authored
-
- Oct 28, 2017
-
-
Robbert Krebbers authored
Instead, as Ralf suggested, just comment the test out.
-
Robbert Krebbers authored
-
Robbert Krebbers authored
-
- Oct 27, 2017
-
-
Robbert Krebbers authored
This closes issue #64.
-
- Oct 25, 2017
-
-
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
I have reimplemented the tactic for introduction of ∀s/pures using type classes, which directly made it much more modular.
-
Robbert Krebbers authored
The advantage is that we can directly use a Coq introduction pattern `cpat` to perform actions to the pure assertion. Before, this had to be done in several steps: iDestruct ... as "[Htmp ...]"; iDestruct "Htmp" as %cpat. That is, one had to introduce a temporary name. I expect this to be quite useful in various developments as many of e.g. our invariants are written as: ∃ x1 .. x2, ⌜ pure stuff ⌝ ∗ spacial stuff.
-
- Oct 19, 2017
- Oct 09, 2017
-
-
Ralf Jung authored
-
- Oct 05, 2017
-
-
Robbert Krebbers authored
-
- Sep 28, 2017
-
-
Robbert Krebbers authored
-
- Sep 27, 2017
-
-
Robbert Krebbers authored
-
Robbert Krebbers authored
This causes a bit of backwards incompatibility: it may now succeed with later stripping below unlocked/TC transparent definitions. This problem actually occured for `wsat`.
-
Ralf Jung authored
-
- Sep 26, 2017
-
-
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`.
-
- Sep 25, 2017
-
-
Robbert Krebbers authored
This problem has been reported by Léon Gondelman. Before, when using, for example wp_alloc, in an expression like: ref (ref v) It would apply `tac_wp_alloc` to the outermost ref, after which it fails to establish that the argument `ref v` is a value. In this commit, other evaluation positions will be tried whenever it turn out that the argument of the construct is not a value. The same applies to store/cas/... I have implemented this by making use of the new `IntoVal` class.
-
Dan Frumin authored
-
Dan Frumin authored
Instead of writing a separate tactic lemma for each pure reduction, there is a single tactic lemma for performing all of them. The instances of PureExec can be shared between WP tactics and, e.g. symbolic execution in the ghost threadpool
-
- Sep 21, 2017
-
-
Robbert Krebbers authored
-