 19 Sep, 2019 1 commit


Robbert Krebbers authored
For example, change `(!! i)` into `(.!! x)` so that `!!` can also be used as a prefix, as done in VST for example. This closes issue #42. I have used the `sed` script below. This script took care of nearly all uses apart from a few occurrences where a space was missing, e.g. `(,foo)`. In this case, `coqc` will just fail, allowing one to patch up things manually. The script is slightly too eager on Iris developments, where it also replaces `($ ...)` introduction patterns. When porting Iris developments you thus may want to remove the line for `$`. ``` sed ' s/(= /(.= /g; s/ =)/ =.)/g; s/(≠ /(.≠ /g; s/ ≠)/ ≠.)/g; s/(≡ /(.≡ /g; s/ ≡)/ ≡.)/g; s/(≢ /(.≢ /g; s/ ≢)/ ≢.)/g; s/(∧ /(.∧ /g; s/ ∧)/ ∧.)/g; s/(∨ /(.∨ /g; s/ ∨)/ ∨.)/g; s/(
↔ /(.↔ /g; s/↔ )/↔ .)/g; s/(→ /(.→ /g; s/ →)/ →.)/g; s/($ /(.$ /g; s/(∘ /(.∘ /g; s/ ∘)/ ∘.)/g; s/(, /(., /g; s/ ,)/ ,.)/g; s/(∘ /(.∘ /g; s/ ∘)/ ∘.)/g; s/(∪ /(.∪ /g; s/ ∪)/ ∪.)/g; s/(⊎ /(.⊎ /g; s/ ⊎)/ ⊎.)/g; s/(∩ /(.∩ /g; s/ ∩)/ ∩.)/g; s/(∖ /(.∖ /g; s/ ∖)/ ∖.)/g; s/(⊆ /(.⊆ /g; s/ ⊆)/ ⊆.)/g; s/(⊈ /(.⊈ /g; s/ ⊈)/ ⊈.)/g; s/(⊂ /(.⊂ /g; s/ ⊂)/ ⊂.)/g; s/(⊄ /(.⊄ /g; s/ ⊄)/ ⊄.)/g; s/(∈ /(.∈ /g; s/ ∈)/ ∈.)/g; s/(∉ /(.∉ /g; s/ ∉)/ ∉.)/g; s/(≫= /(.≫= /g; s/ ≫=)/ ≫=.)/g; s/(!! /(.!! /g; s/ !!)/ !!.)/g; s/(⊑ /(.⊑ /g; s/ ⊑)/ ⊑.)/g; s/(⊓ /(.⊓ /g; s/ ⊓)/ ⊓.)/g; s/(⊔ /(.⊔ /g; s/ ⊔)/ ⊔.)/g; s/(:: /(.:: /g; s/ ::)/ ::.)/g; s/(++ /(.++ /g; s/ ++)/ ++.)/g; s/(≡ₚ /(.≡ₚ /g; s/ ≡ₚ)/ ≡ₚ.)/g; s/(≢ₚ /(.≢ₚ /g; s/ ≢ₚ)/ ≢ₚ.)/g; s/(::: /(.::: /g; s/ :::)/ :::.)/g; s/(+++ /(.+++ /g; s/ +++)/ +++.)/g; ' i $(find name "*.v") ```

 20 Feb, 2019 1 commit


Robbert Krebbers authored
Get rid of using `Collection` and favor `set` everywhere. Also, prefer conversion functions that are called `X_to_Y`. The following sed script performs most of the renaming, with the exception of:  `set`, which has been renamed into `propset`. I couldn't do this rename using `sed` since it's too context sensitive.  There was a spurious rename of `Vec.of_list`, which I correctly manually.  Updating some section names and comments. ``` sed ' s/SimpleCollection/SemiSet/g; s/FinCollection/FinSet/g; s/CollectionMonad/MonadSet/g; s/Collection/Set\_/g; s/collection\_simple/set\_semi\_set/g; s/fin\_collection/fin\_set/g; s/collection\_monad\_simple/monad\_set\_semi\_set/g; s/collection\_equiv/set\_equiv/g; s/\bbset/boolset/g; s/mkBSet/BoolSet/g; s/mkSet/PropSet/g; s/set\_equivalence/set\_equiv\_equivalence/g; s/collection\_subseteq/set\_subseteq/g; s/collection\_disjoint/set\_disjoint/g; s/collection\_fold/set\_fold/g; s/collection\_map/set\_map/g; s/collection\_size/set\_size/g; s/collection\_filter/set\_filter/g; s/collection\_guard/set\_guard/g; s/collection\_choose/set\_choose/g; s/collection\_ind/set\_ind/g; s/collection\_wf/set\_wf/g; s/map\_to\_collection/map\_to\_set/g; s/map\_of\_collection/set\_to\_map/g; s/map\_of\_list/list\_to\_map/g; s/map\_of\_to_list/list\_to\_map\_to\_list/g; s/map\_to\_of\_list/map\_to\_list\_to\_map/g; s/\bof\_list/list\_to\_set/g; s/\bof\_option/option\_to\_set/g; s/elem\_of\_of\_list/elem\_of\_list\_to\_set/g; s/elem\_of\_of\_option/elem\_of\_option\_to\_set/g; s/collection\_not\_subset\_inv/set\_not\_subset\_inv/g; s/seq\_set/set\_seq/g; s/collections/sets/g; s/collection/set/g; ' i $(find name "*.v") ```

 29 Jan, 2019 1 commit


Robbert Krebbers authored

 17 Sep, 2017 1 commit


Robbert Krebbers authored
This provides significant robustness against looping type class search. As a consequence, at many places throughout the library we had to add additional typing information to lemmas. This was to be expected, since most of the old lemmas were ambiguous. For example: Section fin_collection. Context `{FinCollection A C}. size_singleton (x : A) : size {[ x ]} = 1. In this case, the lemma does not tell us which `FinCollection` with elements `A` we are talking about. So, `{[ x ]}` could not only refer to the singleton operation of the `FinCollection A C` in the section, but also to any other `FinCollection` in the development. To make this lemma unambigious, it should be written as: Lemma size_singleton (x : A) : size ({[ x ]} : C) = 1. In similar spirit, lemmas like the one below were also ambiguous: Lemma lookup_alter_None {A} (f : A → A) m i j : alter f i m !! j = None
↔ m !! j = None. It is not clear which finite map implementation we are talking about. To make this lemma unambigious, it should be written as: Lemma lookup_alter_None {A} (f : A → A) (m : M A) i j : alter f i m !! j = None↔ m !! j = None. That is, we have to specify the type of `m`.

 08 Sep, 2017 1 commit


Robbert Krebbers authored
See also Coq bug #5712.

 15 Mar, 2017 1 commit


Robbert Krebbers authored

 31 Jan, 2017 3 commits


Robbert Krebbers authored

Ralf Jung authored

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

 20 Sep, 2016 1 commit


Robbert Krebbers authored

 24 Feb, 2016 1 commit


Robbert Krebbers authored
It now traverses terms at most once, whereas the setoid_rewrite approach was travering terms many times. Also, the tactic can now be extended by defining type class instances.

 19 Feb, 2016 1 commit


Robbert Krebbers authored

 17 Feb, 2016 3 commits


Robbert Krebbers authored
It is doing much more than just dealing with ∈, it solves all kinds of goals involving set operations (including ≡ and ⊆).

Robbert Krebbers authored
simplify_equality => simplify_eq simplify_equality' => simplify_eq/= simplify_map_equality => simplify_map_eq simplify_map_equality' => simplify_map_eq/= simplify_option_equality => simplify_option_eq simplify_list_equality => simplify_list_eq f_equal' => f_equal/= The /= suffixes (meaning: do simpl) are inspired by ssreflect.

Robbert Krebbers authored

 16 Feb, 2016 1 commit


Robbert Krebbers authored
The singleton maps notation is now also more consistent with the insert <[_ := _]> _ notation for maps.

 13 Feb, 2016 1 commit


Robbert Krebbers authored
Also, make our redefinition of done more robust under different orders of Importing modules.

 16 Jan, 2016 1 commit


Robbert Krebbers authored
This one (previously solve_elem_of) was hardly used. The tactic that uses naive_solver (previously esolve_elem_of, now solve_elem_of) has been extended with flags to say which hypotheses should be cleared/kept.

 12 Jan, 2016 1 commit


Robbert Krebbers authored

 21 Dec, 2015 1 commit


Robbert Krebbers authored

 16 Nov, 2015 1 commit


Robbert Krebbers authored

 11 Nov, 2015 1 commit


Robbert Krebbers authored

 15 Mar, 2015 1 commit


Robbert Krebbers authored

 08 Feb, 2015 2 commits


Robbert Krebbers authored

Robbert Krebbers authored
Important changes in the core semantics: * Types extended with function types. Since function types are a special kind of pointer types, types now have an additional mutual part called "ptr_type". * Pointers extended with function pointers. Theses are just names that refer to an actual function in the function environment. * Typing environments extended to assign argument and return types to function names. Before we used a separate environment for these, but since the argument and return types are already needed to type function pointers, this environment would appear in pretty much every typing judgment. As a sideeffect, the frontend has been rewritten entirely. The important changes are: * Type checking of expressions is more involved: there is a special kind of expression type corresponding to a function designator. * To handle things like block scoped extern function, more statefullness was needed. To prepare for future extensions, the entire frontend now uses a state monad.

 16 Jun, 2014 1 commit


Robbert Krebbers authored
Major changes: * Make void a base type, and include a proper void base value. This is necessary because expressions (free, functions without return value) can yield a void. We now also allow void casts conforming to the C standard. * Various missing lemmas about typing, weakening, decidability, ... * The operations "free" and "alloc" now operate on lvalues instead of rvalues. This removes some duplication. * Improve notations of expressions and statements. Change the presence of the operators conforming to the C standard. Small changes: * Use the classes "Typed" and "TypeCheck" for validity of indexes in memory. This gives more uniform notations. * New tactic "typed_inversion" performs inversion on an inductive predicate of type "Typed" and folds the premises. * Remove a horrible hack in the definitions of the classes "FMap", "MBind", "OMap", "Alter" that was used to let "simpl" behave better. Instead, we have defined a tactic "csimpl" that folds the results after performing an ordinary "simpl". * Fast operation to remove duplicates from lists using hashsets. * Make various type constructors (mainly finite map implementations) universe polymorphic by packing them into an inductive. This way, the whole C syntax can live in type, avoiding the need for (slow) universe checks.

 05 Jun, 2014 1 commit


Robbert Krebbers authored
