- 31 Oct, 2018 2 commits
-
-
Robbert Krebbers authored
-
Robbert Krebbers authored
This commit extends the state interpretation with an additional parameter to talk about the number of forked-off threads, and a fixed postcondition for each forked-off thread: state_interp : Λstate → list Λobservation → nat → iProp Σ; fork_post : iProp Σ; This way, instead of having `True` as the post-condition of `Fork`, one can have any post-condition, which is then recorded in the state interpretation. The point of keeping track of the postconditions of forked-off threads, is that we get an (additional) stronger adequacy theorem: Theorem wp_strong_all_adequacy Σ Λ `{invPreG Σ} s e σ1 v vs σ2 φ : (∀ `{Hinv : invG Σ} κs, (|={⊤}=> ∃ (stateI : state Λ → list (observation Λ) → nat → iProp Σ) (fork_post : iProp Σ), let _ : irisG Λ Σ := IrisG _ _ _ Hinv stateI fork_post in stateI σ1 κs 0 ∗ WP e @ s; ⊤ {{ v, let m := length vs in stateI σ2 [] m -∗ [∗] replicate m fork_post ={⊤,∅}=∗ ⌜ φ v ⌝ }})%I) → rtc erased_step ([e], σ1) (of_val <$> v :: vs, σ2) → φ v. The difference with the ordinary adequacy theorem is that this one only applies once all threads terminated. In this case, one gets back the post-conditions `[∗] replicate m fork_post` of all forked-off threads. In Iron we showed that we can use this mechanism to make sure that all resources are disposed of properly in the presence of fork-based concurrency.
-
- 22 Oct, 2018 1 commit
-
-
Ralf Jung authored
-
- 18 Oct, 2018 1 commit
-
-
Ralf Jung authored
-
- 05 Oct, 2018 5 commits
-
-
Ralf Jung authored
-
Ralf Jung authored
-
Marianna Rapoport authored
-
Marianna Rapoport authored
- Removing head of list of observations after each reduction step in definition of wp - Adding support for observations to state_interp and world - Applying Ralf's suggestions to previous commit (e.g. replacing /\ and -> with unicode characters)
-
Marianna Rapoport authored
-
- 03 Oct, 2018 1 commit
-
-
Robbert Krebbers authored
-
- 18 Jun, 2018 1 commit
-
-
Ralf Jung authored
-
- 24 May, 2018 1 commit
-
-
Ralf Jung authored
-
- 23 May, 2018 1 commit
-
-
Ralf Jung authored
There's a very low risk of these conflicting with Coq's standard library
-
- 07 Dec, 2017 2 commits
- 26 Nov, 2017 1 commit
-
-
David Swasey authored
-
- 23 Nov, 2017 1 commit
-
-
Robbert Krebbers authored
-
- 09 Nov, 2017 3 commits
-
-
David Swasey authored
This reverts commit 913059d2.
-
David Swasey authored
-
- 08 Nov, 2017 4 commits
-
-
David Swasey authored
-
David Swasey authored
-
David Swasey authored
-
David Swasey authored
-
- 30 Oct, 2017 1 commit
-
-
Robbert Krebbers authored
-
- 25 Oct, 2017 2 commits
-
-
Robbert Krebbers authored
-
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.
-
- 24 Mar, 2017 1 commit
-
-
Robbert Krebbers authored
Instead, I have introduced a type class `Monoid` that is used by the big operators: Class Monoid {M : ofeT} (o : M → M → M) := { monoid_unit : M; monoid_ne : NonExpansive2 o; monoid_assoc : Assoc (≡) o; monoid_comm : Comm (≡) o; monoid_left_id : LeftId (≡) monoid_unit o; monoid_right_id : RightId (≡) monoid_unit o; }. Note that the operation is an argument because we want to have multiple monoids over the same type (for example, on `uPred`s we have monoids for `∗`, `∧`, and `∨`). However, we do bundle the unit because: - If we would not, the unit would appear explicitly in an implicit argument of the big operators, which confuses rewrite. By bundling the unit in the `Monoid` class it is hidden, and hence rewrite won't even see it. - The unit is unique. We could in principle have big ops over setoids instead of OFEs. However, since we do not have a canonical structure for bundled setoids, I did not go that way.
-
- 09 Mar, 2017 1 commit
-
-
Ralf Jung authored
-
- 11 Feb, 2017 1 commit
-
-
David Swasey authored
-
- 24 Jan, 2017 1 commit
-
-
Robbert Krebbers authored
-
- 09 Jan, 2017 1 commit
-
-
Ralf Jung authored
-
- 06 Jan, 2017 1 commit
-
-
Ralf Jung authored
-
- 05 Jan, 2017 1 commit
-
-
Ralf Jung authored
-
- 03 Jan, 2017 1 commit
-
-
Ralf Jung authored
This patch was created using find -name *.v | xargs -L 1 awk -i inplace '{from = 0} /^From/{ from = 1; ever_from = 1} { if (from == 0 && seen == 0 && ever_from == 1) { print "Set Default Proof Using \"Type*\"."; seen = 1 } }1 ' and some minor manual editing
-
- 09 Dec, 2016 3 commits
-
-
Ralf Jung authored
-
Robbert Krebbers authored
-
Robbert Krebbers authored
-