Skip to content
Snippets Groups Projects
  1. Oct 09, 2017
  2. Sep 25, 2017
  3. Sep 18, 2017
  4. Aug 22, 2017
  5. Jun 12, 2017
  6. Jun 08, 2017
  7. Mar 24, 2017
    • 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
  8. Feb 18, 2017
  9. Feb 07, 2017
  10. Feb 06, 2017
  11. Jan 17, 2017
  12. Dec 26, 2016
  13. Dec 22, 2016
  14. Dec 12, 2016
  15. Dec 09, 2016
  16. Dec 06, 2016
  17. Nov 23, 2016
  18. Nov 22, 2016
  19. Nov 15, 2016
  20. Nov 10, 2016
  21. Nov 01, 2016
  22. Oct 28, 2016
  23. Oct 25, 2016
  24. Oct 12, 2016
Loading