1. 25 Oct, 2017 1 commit
    • Robbert Krebbers's avatar
      Make `iDestruct ... as (cpat) "..."` work on '⌜φ⌝ ∧ P` and `⌜φ⌝ ∗ P`. · c5045145
      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.
      c5045145
  2. 24 Mar, 2017 1 commit
    • Robbert Krebbers's avatar
      Generic big operators that are no longer tied to CMRAs. · 6fbff46e
      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.
      6fbff46e
  3. 09 Mar, 2017 1 commit
  4. 11 Feb, 2017 1 commit
  5. 24 Jan, 2017 1 commit
  6. 09 Jan, 2017 1 commit
  7. 06 Jan, 2017 1 commit
  8. 05 Jan, 2017 1 commit
  9. 03 Jan, 2017 1 commit
  10. 09 Dec, 2016 3 commits