1. 27 Feb, 2018 7 commits
  2. 25 Feb, 2018 1 commit
  3. 23 Feb, 2018 7 commits
  4. 22 Feb, 2018 1 commit
  5. 20 Feb, 2018 1 commit
  6. 13 Feb, 2018 3 commits
  7. 12 Feb, 2018 5 commits
  8. 07 Feb, 2018 3 commits
    • Robbert Krebbers's avatar
      Better framing support for disjunctions. · 2fb90ca6
      Robbert Krebbers authored
      For example, framing `P` in `(P ∨ Q) ∗ R` now succeeds and turns the goal into `R`.
      2fb90ca6
    • Robbert Krebbers's avatar
    • Robbert Krebbers's avatar
      Generic `iAlways` tactic. · 6dc83bcb
      Robbert Krebbers authored
      This commit implements a generic `iAlways` tactic that is not tied to
      `persistently`, `affinely` and `plainly` but can be instantiated with a
      variety of always-style modalities.
      
      In order to plug in an always-style modality, one has to decide for both
      the persistent and spatial what action should be performed upon introducing
      the modality:
      
      - Introduction is only allowed when the context is empty.
      - Introduction is only allowed when all hypotheses satisfy some predicate
        `C : PROP → Prop` (where `C` should be a type class).
      - Introduction will only keep the hypotheses that satisfy some predicate
        `C : PROP → Prop` (where `C` should be a type class).
      - Introduction will clear the context.
      - Introduction will keep the context as-if.
      
      Formally, these actions correspond to the following inductive type:
      
      ```coq
      Inductive always_intro_spec (PROP : bi) :=
        | AIEnvIsEmpty
        | AIEnvForall (C : PROP → Prop)
        | AIEnvFilter (C : PROP → Prop)
        | AIEnvClear
        | AIEnvId.
      ```
      
      An always-style modality is then a record `always_modality` packing together the
      modality with the laws it should satisfy to justify the given actions for both
      contexts.
      6dc83bcb
  9. 02 Feb, 2018 1 commit
  10. 25 Jan, 2018 1 commit
  11. 24 Jan, 2018 1 commit
  12. 20 Jan, 2018 1 commit
  13. 16 Jan, 2018 1 commit
    • Robbert Krebbers's avatar
      Special proof mode class for adding a modality to a goal. · a63f256e
      Robbert Krebbers authored
      This used to be done by using `ElimModal` in backwards direction. Having
      a separate type class for this gets rid of some hacks:
      
      - Both `Hint Mode`s in forward and backwards direction for `ElimModal`.
      - Weird type class precedence hacks to make sure the right instance is picked.
        These were needed because using `ElimModal` in backwards direction caused
        ambiguity.
      a63f256e
  14. 20 Dec, 2017 1 commit
  15. 03 Dec, 2017 1 commit
  16. 01 Nov, 2017 2 commits
  17. 30 Oct, 2017 3 commits