 13 Jun, 2017 3 commits


Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored
It can be derived, thanks to Ales for noticing!

 12 May, 2017 2 commits


Robbert Krebbers authored

Robbert Krebbers authored

 24 Mar, 2017 1 commit


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.

 15 Mar, 2017 1 commit


Robbert Krebbers authored
 Allow framing of persistent hypotheses below the always modality.  Allow framing of persistent hypotheses in just one branch of a disjunction.

 09 Mar, 2017 1 commit


Robbert Krebbers authored
Now, we never need to unfold LimitPreserving in LambdaRust, and hence the entails_lim tactic is no longer needed.

 11 Feb, 2017 1 commit


Robbert Krebbers authored

 27 Jan, 2017 1 commit


Ralf Jung authored

 22 Jan, 2017 2 commits


Robbert Krebbers authored

Robbert Krebbers authored

 11 Jan, 2017 1 commit


Ralf Jung authored
There are certainly more places this is useful, but let's start with this simple test

 05 Jan, 2017 1 commit


Ralf Jung authored

 03 Jan, 2017 1 commit


Ralf Jung authored
This patch was created using find name *.v  xargs L 1 awk i inplace '{from = 0} /^From/{ from = 1; ever_from = 1} { if (from == 0 && seen == 0 && ever_from == 1) { print "Set Default Proof Using \"Type*\"."; seen = 1 } }1 ' and some minor manual editing

 27 Dec, 2016 1 commit


Robbert Krebbers authored

 23 Dec, 2016 1 commit


JacquesHenri Jourdan authored

 13 Dec, 2016 1 commit


Robbert Krebbers authored
This fixes the following issue by JH Jourdan: The fact of including uPred_[...] in the module uPred (in base_logic.v), implies that typeclasses instances are declared twice. Once in module uPred and once in module uPred_[...]. This has the unfortunate consequence that it has to backtrack to both instances each time the first one fails, making failure of type class search for e.g. PersistentP potentially exponential. Goal ((□ ∀ (x1 x2 x3 x4 x5: nat), True ∗ True) ∗ True : iProp Σ). Time iIntros "#H". Undo. Remove Hints uPred_derived.forall_persistent : typeclass_instances. Time iIntros "#H". Thanks to Jason Gross @ Coq club for suggesting this fix.

 09 Dec, 2016 1 commit


Ralf Jung authored

 05 Dec, 2016 2 commits


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

 29 Nov, 2016 1 commit


Robbert Krebbers authored

 27 Nov, 2016 1 commit


Robbert Krebbers authored

 24 Nov, 2016 1 commit


JacquesHenri Jourdan authored
The idea on magic wand is to use it for curried lemmas and use ⊢ for uncurried lemmas.

 22 Nov, 2016 3 commits


Ralf Jung authored

Robbert Krebbers authored

Ralf Jung authored
Use COFEs only for the recursive domain equation solver

 21 Nov, 2016 1 commit


Robbert Krebbers authored
The old name didn't make much sense. Also now we can have pure_False too.

 20 Nov, 2016 1 commit


Robbert Krebbers authored

 17 Nov, 2016 1 commit


Robbert Krebbers authored

 03 Nov, 2016 1 commit


Robbert Krebbers authored
The old choice for ★ was a arbitrary: the precedence of the ASCII asterisk * was fixed at a wrong level in Coq, so we had to pick another symbol. The ★ was a random choice from a unicode chart. The new symbol ∗ (as proposed by David Swasey) corresponds better to conventional practise and matches the symbol we use on paper.

 01 Nov, 2016 1 commit


Ralf Jung authored

 28 Oct, 2016 1 commit


Robbert Krebbers authored
This commit fixes #41.

 25 Oct, 2016 3 commits


Robbert Krebbers authored

Robbert Krebbers authored

Robbert Krebbers authored
