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