 24 May, 2016 1 commit


Robbert Krebbers authored
Changes:  We no longer have a different syntax for specializing a term H : P ★ Q whose range P or domain Q is persistent. There is just one syntax, and the system automatically determines whether either P or Q is persistent.  While specializing a term, always modalities are automatically stripped. This gets rid of the specialization pattern !.  Make the syntax of specialization patterns more consistent. The syntax for generating a goal is [goal_spec] where goal_spec is one of the following: H1 .. Hn : generate a goal using hypotheses H1 .. Hn H1 .. Hn : generate a goal using all hypotheses but H1 .. Hn # : generate a goal for the premise in which all hypotheses can be used. This is only allowed when specializing H : P ★ Q where either P or Q is persistent. % : generate a goal for a pure premise.

 10 May, 2016 1 commit


Robbert Krebbers authored
And make constants P for which we do not want of_val P to reduce Opaque.

 02 May, 2016 1 commit


Robbert Krebbers authored
iSpecialize and iDestruct. These tactics now all take an iTrm, which is a tuple consisting of a.) a lemma or name of a hypotheses b.) arguments to instantiate c.) a specialization pattern.

 19 Apr, 2016 3 commits


Robbert Krebbers authored
This gets rid of the (ambiguous) notation %l, because we can declare LitLoc as a coercion. It also shortens the code.

Robbert Krebbers authored

Robbert Krebbers authored
That way, we do not have useless type annotations of the form "v : language.val heap_lang" cluttering about any goal. Note, that we could decide to eta expand everywhere (as we do for ∀ and ∃), and use the notation "WP e {{ Q }}" for "wp e ⊤ (λ _, Q)".

 11 Apr, 2016 1 commit


Robbert Krebbers authored

 20 Mar, 2016 1 commit


Ralf Jung authored
