- 04 Oct, 2017 2 commits
-
-
Robbert Krebbers authored
-
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`.
-
- 25 Sep, 2017 11 commits
-
-
Robbert Krebbers authored
-
Robbert Krebbers authored
-
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
Expression `e` such that `to_val e = Some v` is in the context gets reflected into value `v` together with the proof that `to_val e = Some v`. This is helpful for substitution and for `solve_to_val` operating on the reflected syntax.
-
Dan Frumin authored
-
Dan Frumin authored
This way `IntoLaterNEnvs` is ought to be computed less frequently
-
Dan Frumin authored
-
Robbert Krebbers authored
The tactic was doing something weird and only once used.
-
Robbert Krebbers authored
- Get rid of wp_finish, which was a hack. - Write the wp_ tactics for stateful steps in the same style as wp_pure, i.e. by taking the context into account. - Make use of the context K in wp_pure.
-
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
-
- 21 Sep, 2017 2 commits
-
-
Robbert Krebbers authored
-
Robbert Krebbers authored
-
- 18 Sep, 2017 1 commit
-
-
Robbert Krebbers authored
-
- 17 Sep, 2017 3 commits
-
-
Robbert Krebbers authored
For obsolete reasons, that no longer seem to apply, we used ∅ as the unit.
-
Robbert Krebbers authored
-
Robbert Krebbers authored
-
- 09 Sep, 2017 1 commit
-
-
Robbert Krebbers authored
-
- 28 Aug, 2017 2 commits
-
-
Robbert Krebbers authored
We now first iPoseProof the lemma and instantiate its premises before trying to search for the sub-term where to apply. As a result, instantiation of the premises of the applied lemmas happens only once, instead of it being done for each sub-term as obtained by reshape_expr.
-
Joshua Yanovski authored
-
- 14 Jul, 2017 1 commit
-
-
Joshua Yanovski authored
-
- 27 Jun, 2017 1 commit
-
-
Robbert Krebbers authored
-
- 08 Jun, 2017 1 commit
-
-
Robbert Krebbers authored
-
- 06 Jun, 2017 1 commit
-
-
Robbert Krebbers authored
TODO: document this.
-
- 19 Apr, 2017 1 commit
-
-
Ralf Jung authored
-
- 24 Mar, 2017 3 commits
-
-
Robbert Krebbers authored
-
Robbert Krebbers authored
-
Jeehoon Kang authored
-
- 22 Mar, 2017 1 commit
-
-
Ralf Jung authored
-
- 14 Mar, 2017 3 commits
-
-
Robbert Krebbers authored
-
Robbert Krebbers authored
This has some advantages: - Evaluation contexts behave like a proper "Huet's zipper", and thus: + We no longer need to reverse the list of evaluation context items in the `reshape_expr` tactic. + The `fill` function becomes tail-recursive. - It gives rise to more definitional equalities in simulation proofs using binary logical relations proofs. In the case of binary logical relations, we simulate an expressions in some ambient context, i.e. `fill K e`. Now, whenever we reshape `e` by turning it into `fill K' e'`, we end up with `fill K (fill K' e')`. In order to use the rules for the expression that is being simulated, we need to turn `fill K (fill K' e')` into `fill K'' e'` for some `K'`. In case of the old `foldr`-based approach, we had to rewrite using the lemma `fill_app` to achieve that. However, in case of the old `foldl`-based `fill`, we have that `fill K (fill K' e')` is definitionally equal to `fill (K' ++ K) e'` provided that `K'` consists of a bunch of `cons`es (which is always the case, since we obtained `K'` by reshaping `e`). Note that this change hardly affected `heap_lang`. Only the proof of `atomic_correct` broke. I fixed this by proving a more general lemma `ectxi_language_atomic` about `ectxi`-languages, which should have been there in the first place.
-
Robbert Krebbers authored
-
- 09 Mar, 2017 1 commit
-
-
Ralf Jung authored
-
- 14 Feb, 2017 1 commit
-
-
Robbert Krebbers authored
-
- 06 Feb, 2017 1 commit
-
-
Ralf Jung authored
-