1. 25 Oct, 2017 5 commits
  2. 27 Sep, 2017 1 commit
    • Robbert Krebbers's avatar
      Fix issue #99. · 7ed067a9
      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`.
      7ed067a9
  3. 26 Sep, 2017 1 commit
    • Robbert Krebbers's avatar
      Fix issue #98. · e17ac4ad
      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`.
      e17ac4ad
  4. 21 Sep, 2017 1 commit
  5. 17 Sep, 2017 3 commits
  6. 20 Aug, 2017 1 commit
  7. 17 Aug, 2017 1 commit
  8. 07 Aug, 2017 1 commit
  9. 27 Jun, 2017 1 commit
  10. 12 Jun, 2017 1 commit
  11. 08 Jun, 2017 1 commit
  12. 12 May, 2017 1 commit
  13. 13 Apr, 2017 1 commit
  14. 11 Apr, 2017 2 commits
  15. 07 Apr, 2017 1 commit
  16. 27 Mar, 2017 1 commit
  17. 24 Mar, 2017 2 commits
    • Robbert Krebbers's avatar
    • 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
  18. 22 Mar, 2017 1 commit
  19. 21 Mar, 2017 2 commits
  20. 20 Mar, 2017 4 commits
  21. 15 Mar, 2017 7 commits
  22. 14 Mar, 2017 1 commit