 25 Oct, 2016 2 commits


Robbert Krebbers authored

Robbert Krebbers authored
And also rename the corresponding proof mode tactics.

 05 Oct, 2016 1 commit


Robbert Krebbers authored

 28 Sep, 2016 1 commit


Robbert Krebbers authored
This allows us to factor out properties about connectives that commute with the big operators.

 20 Sep, 2016 2 commits


Robbert Krebbers authored

Robbert Krebbers authored

 09 Aug, 2016 1 commit


Ralf Jung authored

 08 Aug, 2016 1 commit


Robbert Krebbers authored
This makes stuff more uniform and also removes the need for the [inGFs] type class. Instead, there is now a type class [subG Σ1 Σ2] which expresses that a list of functors [Σ1] is contained in [Σ2].

 05 Aug, 2016 1 commit


Robbert Krebbers authored
This commit features:  A simpler model. The recursive domain equation no longer involves a triple containing invariants, physical state and ghost state, but just ghost state. Invariants and physical state are encoded using (higherorder) ghost state.  (Primitive) view shifts are formalized in the logic and all properties about it are proven in the logic instead of the model. Instead, the core logic features only a notion of raw view shifts which internalizing performing frame preserving updates.  A better behaved notion of mask changing view shifts. In particular, we no longer have sideconditions on transitivity of view shifts, and we have a rule for introduction of mask changing view shifts ={E1,E2}=> P with E2 ⊆ E1 which allows to postpone performing a view shift.  The weakest precondition connective is formalized in the logic using Banach's fixpoint. All properties about the connective are proven in the logic instead of directly in the model.  Adequacy is proven in the logic and uses a primitive form of adequacy for uPred that only involves raw views shifts and laters. Some remarks:  I have removed binary view shifts. I did not see a way to describe all rules of the new mask changing view shifts using those.  There is no longer the need for the notion of "frame shifting assertions" and these are thus removed. The rules for Hoare triples are thus also stated in terms of primitive view shifts. TODO:  Maybe rename primitive view shift into something more sensible  Figure out a way to deal with closed proofs (see the commented out stuff in tests/heap_lang and tests/barrier_client).

 27 Jul, 2016 2 commits


Robbert Krebbers authored
This way type class inference is not invokved when used in tactics like iPvs while not having to write an @. (Idea suggested by Ralf.)

Robbert Krebbers authored
This way, it won't pick arbitrary (and possibly wrong!) inG instances when multiple ones are available. We achieve this by declaring: Hint Mode inG   + So that type class inference only succeeds when the type of the ghost variable does not include any evars. This required me to make some minor changes throughout the whole development making some types explicit.

 23 Jun, 2016 1 commit


Robbert Krebbers authored
This is more consistent with the proofmode, where we also call it pure.

 17 Jun, 2016 1 commit


Robbert Krebbers authored
Fixes issue #20.

 16 Jun, 2016 1 commit


Robbert Krebbers authored

 15 Jun, 2016 1 commit


Robbert Krebbers authored

 31 May, 2016 2 commits


Robbert Krebbers authored
be the same as
↔ . This is a fairly intrusive change, but at least makes notations more consistent, and often shorter because fewer parentheses are needed. Note that viewshifts already had the same precedence as →. 
Robbert Krebbers authored
It used to be: (P ={E}=> Q) := (True ⊢ (P → ={E}=> Q)) Now it is: (P ={E}=> Q) := (P ⊢ ={E}=> Q)

 27 May, 2016 1 commit


Robbert Krebbers authored

 22 May, 2016 1 commit


Robbert Krebbers authored

 11 Apr, 2016 1 commit


Robbert Krebbers authored

 29 Mar, 2016 1 commit


Robbert Krebbers authored
Also remove some superfluous map_ prefixes.

 15 Mar, 2016 1 commit


Robbert Krebbers authored

 11 Mar, 2016 2 commits


Robbert Krebbers authored

Ralf Jung authored

 10 Mar, 2016 3 commits


Ralf Jung authored

Robbert Krebbers authored

Robbert Krebbers authored
Thanks to Amin Timany for the suggestion.

 08 Mar, 2016 2 commits
 07 Mar, 2016 1 commit


Ralf Jung authored
Add both nonexpansive and contractive functors, and bundle them for the general Iris instance as well as the global functor construction This allows us to move the \later in the userdefined functor to any place we want. In particular, we can now have "\later (iProp > iProp)" in the ghost CMRA.

 06 Mar, 2016 1 commit


Robbert Krebbers authored
Since functor instances are just used as combinators, there is really no need for functors that are not contractive.

 02 Mar, 2016 1 commit


Robbert Krebbers authored
This cleans up some adhoc stuff and prepares for a generalization of saved propositions.

 25 Feb, 2016 2 commits


Robbert Krebbers authored

Robbert Krebbers authored
The performance gain seems neglectable, unfortunatelly...

 23 Feb, 2016 1 commit


Ralf Jung authored

 22 Feb, 2016 4 commits


Robbert Krebbers authored
And now the part that I forgot to commit.

Robbert Krebbers authored
Also, give all these global functors the suffix GF to avoid shadowing such as we had with authF. And add some type annotations for clarity.

Ralf Jung authored
I added a new typeclass "inGF" to witness that a particular *functor* is part of \Sigma. inG, in contrast, witnesses a particular *CMRA* to be in there, after applying the functor to "\later iProp". inGF can be inferred if that functor is consed to the head of \Sigma, and it is preserved by consing a new functor to \Sigma. This is not the case for inG since the recursive occurence of \Sigma also changes. For evry construction (auth, sts, saved_prop), there is an instance infering the respective authG, stsG, savedPropG from an inGF. There is also a global inG_inGF, but Coq is unable to use it. I tried to instead have *only* inGF, since having both typeclasses seemed weird. However, then the actual type that e.g. "own" is about is the result of applying a functor, and Coq entirely fails to infer anything. I had to add a few type annotations in heap.v, because Coq tried to use the "authG_inGF" instance before the A got fixed, and ended up looping and expanding endlessly on that proof of timelessness. This does not seem entirely unreasonable, I was honestly surprised Coq was able to infer the types previously.

Ralf Jung authored

 19 Feb, 2016 1 commit


Robbert Krebbers authored
