 06 Dec, 2016 8 commits


Ralf Jung authored


Ralf Jung authored

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored

Ralf Jung authored

Robbert Krebbers authored

 05 Dec, 2016 13 commits


JacquesHenri Jourdan authored

JacquesHenri Jourdan authored

JacquesHenri Jourdan authored

JacquesHenri Jourdan authored

Robbert Krebbers authored
I added the old one in 176a588c but it was never used.

Ralf Jung authored

Robbert Krebbers authored

Robbert authored
New definition of contractive. The current notion of `Contractive` does not allow one to deal with functions with multiple arguments, for example, binary functions that are contractive in both arguments (like `lft_vs` in lambdarust), or binary functions that are contractive in one of their arguments. To that end, I propose I reformulate the notion of `Contractive` so that we can express being contractive using a `Proper`. The new definition is: Definition dist_later {A : ofeT} (n : nat) (x y : A) : Prop := match n with 0 => True  S n => x ≡{n}≡ y end. Notation Contractive f := (∀ n, Proper (dist_later n ==> dist n) f). Also, it turns out that using this definition we can implement a `solve_contractive` tactic in the same way as the `solve_proper` tactic. Unfortunately, the new tactic does not quite work for the weakest precondition connective in Iris because the proof involves induction, and the induction hypothesis does not quite fit into the new `solve_contractive` tactic. See merge request !32

Robbert Krebbers authored
Using this new definition we can express being contractive using a Proper. This has the following advantages:  It makes it easier to state that a function with multiple arguments is contractive (in all or some arguments).  A solve_contractive tactic can be implemented by extending the solve_proper tactic.

Robbert Krebbers authored
This removes Ralf's hack of using later_car, which is not function in the logic. Thanks to Aleš for suggesting this.

Ralf Jung authored

Ralf Jung authored

Ralf Jung authored

 02 Dec, 2016 4 commits


Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored

 01 Dec, 2016 1 commit


Ralf Jung authored

 30 Nov, 2016 6 commits


Robbert Krebbers authored

JacquesHenri Jourdan authored

JacquesHenri Jourdan authored
Also, higher cost for [elim_modal_bupd_fupd], so that it is not taken in place of [elim_modal_fupd_fupd] in spec patterns.

JacquesHenri Jourdan authored

JacquesHenri Jourdan authored

JacquesHenri Jourdan authored

 29 Nov, 2016 7 commits


Robbert Krebbers authored

Robbert Krebbers authored
When having H : ▷ (P ∗ Q) and H2 : ▷ P, iSpecialize ("H" with "H2") distributes the later over the wand.

Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored
The rewrite auth_validN_eq was not performed in the hypothesis. It used to work in 8.5 because of magic.

Robbert Krebbers authored

Robbert Krebbers authored

 28 Nov, 2016 1 commit


Robbert Krebbers authored
Also, use explicit unfolding lemmas for auth_valid and auth_validN. The `Arguments valid _ _ !_ /` hack did not really work when one has to deal with the valid instance of the cmra, which underneath also includes a `cmra_valid`. Declaring a similar Arguments for `cmra_valid` is a bad idea, it will also end up unfold stuff for the exclusive and option CMRA.
