Skip to content
Snippets Groups Projects
  1. May 12, 2017
  2. May 09, 2017
  3. Apr 27, 2017
  4. Apr 26, 2017
    • Robbert Krebbers's avatar
      Fix bug #85 in another way. · 293fb6c7
      Robbert Krebbers authored
      After discussing this with Ralf, again, it turned out that using a bar
      instead of a turnstyle would be better. When formalizing type systems, one
      often wants to use a turnstyle in other notations (the typing judgment),
      so having the turnstyle in the proofmode notation is confusing.
      293fb6c7
  5. Apr 19, 2017
  6. Apr 13, 2017
  7. Apr 12, 2017
  8. Apr 11, 2017
  9. Apr 07, 2017
  10. Apr 05, 2017
  11. Apr 04, 2017
  12. Mar 31, 2017
  13. Mar 30, 2017
  14. Mar 28, 2017
  15. Mar 27, 2017
  16. Mar 24, 2017
    • Robbert Krebbers's avatar
      Merge branch 'gen_big_op' into 'master' · e906ef70
      Robbert Krebbers authored
      Generic big operators that are computational for lists
      
      Closes #38
      
      See merge request !54
      e906ef70
    • Robbert Krebbers's avatar
    • Robbert Krebbers's avatar
      Make big_opL type class opaque. · 02a0929d
      Robbert Krebbers authored
      This commit fixes the issues that refolding of big operators did not work nicely
      in the proof mode, e.g., given:
      
          Goal forall M (P : nat → uPred M) l,
            ([∗ list] x ∈ 10 :: l, P x) -∗ True.
          Proof. iIntros (M P l) "[H1 H2]".
      
      We got:
      
          "H1" : P 10
          "H2" : (fix
                  big_opL (M0 : ofeT) (o : M0 → M0 → M0) (H : Monoid o) (A : Type)
                          (f : nat → A → M0) (xs : list A) {struct xs} : M0 :=
                    match xs with
                    | [] => monoid_unit
                    | x :: xs0 => o (f 0 x) (big_opL M0 o H A (λ n : nat, f (S n)) xs0)
                    end) (uPredC M) uPred_sep uPred.uPred_sep_monoid nat
                   (λ _ x : nat, P x) l
          --------------------------------------∗
          True
      
      The problem here is that proof mode looked for an instance of `IntoAnd` for
      `[∗ list] x ∈ 10 :: l, P x` and then applies the instance for separating conjunction
      without folding back the fixpoint. This problem is not specific to the Iris proof
      mode, but more of a general problem of Coq's `apply`, for example:
      
          Goal forall x l, Forall (fun _ => True) (map S (x :: l)).
          Proof.
            intros x l. constructor.
      
      Gives:
      
           Forall (λ _ : nat, True)
             ((fix map (l0 : list nat) : list nat :=
                match l0 with
                | [] => []
                | a :: t => S a :: map t
                end) l)
      
      This commit fixes this issue by making the big operators type class opaque and instead
      handle them solely via corresponding type classes instances for the proof mode tactics.
      
      Furthermore, note that we already had instances for persistence and timelessness. Those
      were really needed; computation did not help to establish persistence when the list in
      question was not a ground term. In fact, the sitation was worse, to establish persistence
      of `[∗ list] x ∈ 10 :: l, P x` it could either use the persistence instance of big ops
      directly, or use the persistency instance for `∗` first. Worst case, this can lead to an
      exponential blow up because of back tracking.
      02a0929d
Loading