Skip to content
Snippets Groups Projects
  1. Nov 12, 2017
    • Robbert Krebbers's avatar
      Make `fmap` left associative. · 12e701ca
      Robbert Krebbers authored
      This follows the associativity in Haskell. So, something like
      
        f <$> g <$> h
      
      Is now parsed as:
      
        (f <$> g) <$> h
      
      Since the functor is a generalized form of function application, this also now
      also corresponds with the associativity of function application, which is also
      left associative.
      12e701ca
  2. Nov 09, 2017
  3. Nov 01, 2017
  4. Oct 31, 2017
  5. Oct 28, 2017
  6. Oct 27, 2017
  7. Oct 13, 2017
  8. Oct 10, 2017
  9. Oct 06, 2017
  10. Sep 21, 2017
  11. Sep 18, 2017
  12. Sep 17, 2017
    • Robbert Krebbers's avatar
      Set Hint Mode for all classes in `base.v`. · 7d7c9871
      Robbert Krebbers authored
      This provides significant robustness against looping type class search.
      
      As a consequence, at many places throughout the library we had to add
      additional typing information to lemmas. This was to be expected, since
      most of the old lemmas were ambiguous. For example:
      
        Section fin_collection.
          Context `{FinCollection A C}.
      
          size_singleton (x : A) : size {[ x ]} = 1.
      
      In this case, the lemma does not tell us which `FinCollection` with
      elements `A` we are talking about. So, `{[ x ]}` could not only refer to
      the singleton operation of the `FinCollection A C` in the section, but
      also to any other `FinCollection` in the development. To make this lemma
      unambigious, it should be written as:
      
        Lemma size_singleton (x : A) : size ({[ x ]} : C) = 1.
      
      In similar spirit, lemmas like the one below were also ambiguous:
      
        Lemma lookup_alter_None {A} (f : A → A) m i j :
          alter f i m !! j = None :left_right_arrow: m !! j = None.
      
      It is not clear which finite map implementation we are talking about.
      To make this lemma unambigious, it should be written as:
      
        Lemma lookup_alter_None {A} (f : A → A) (m : M A) i j :
          alter f i m !! j = None :left_right_arrow: m !! j = None.
      
      That is, we have to specify the type of `m`.
      7d7c9871
  13. Sep 08, 2017
  14. Sep 02, 2017
  15. Aug 17, 2017
  16. Aug 08, 2017
  17. Mar 17, 2017
  18. Mar 15, 2017
  19. Mar 09, 2017
  20. Feb 19, 2017
  21. Feb 10, 2017
  22. Jan 31, 2017
  23. Nov 22, 2016
    • Robbert Krebbers's avatar
      Make nclose an explicit coercion. · bf6caa7f
      Robbert Krebbers authored and Ralf Jung's avatar Ralf Jung committed
      We do this by introducing a type class UpClose with notation ↑.
      
      The reason for this change is as follows: since `nclose : namespace
      → coPset` is declared as a coercion, the notation `nclose N ⊆ E` was
      pretty printed as `N ⊆ E`. However, `N ⊆ E` could not be typechecked
      because type checking goes from left to right, and as such would look
      for an instance `SubsetEq namespace`, which causes the right hand side
      to be ill-typed.
      bf6caa7f
  24. Nov 15, 2016
  25. Nov 10, 2016
    • Robbert Krebbers's avatar
      Remove Existing Class Is_true. · 94ecebcc
      Robbert Krebbers authored
      Having Is_true as a type class caused problems with rewrite: when the
      rewrited lemma has a premise of the shape Is_true, the rewrite tactic
      will complain that it cannot find a type class instance, instead
      of generating a goal for that premise.
      94ecebcc
  26. Sep 20, 2016
Loading