-
Robbert Krebbers authoredRobbert Krebbers authored
To find the state of this project's repository at the time of any of these versions, check out the tags.
CHANGELOG.md 4.95 KiB
This file lists "large-ish" changes to the std++ Coq library, but not every API-breaking change is listed.
std++ master
Numerous functions and theorems have been renamed.
- Consistently use
set
instead ofcollection
. - Rename the
Collection
type class intoSet_
. Likewise,SimpleCollection
is calledSemiSet
, andFinCollection
is calledFinSet
, andCollectionMonad
is calledMonadSet
. - Rename
collections.v
andfin_collections.v
intosets.v
andfin_sets.v
, respectively. - Rename
set A := A → Prop
(theories/set.v
) intopropset
, and likewisebset
intoboolset
. - Consistently prefer
X_to_Y
for conversion functions, e.g.list_to_map
instead of the formermap_of_list
.
The following sed
script should get you a long way:
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;
s/to\_gmap/gset\_to\_gmap/g;
s/of\_bools/bools\_to\_natset/g;
s/to_bools/natset\_to\_bools/g;
s/coPset\.of_gset/gset\_to\_coPset/g;
s/coPset\.elem\_of\_of\_gset/elem\_of\_gset\_to\_coPset/g;
s/of\_gset\_finite/gset\_to\_coPset\_finite/g;
s/set\_seq\_S\_disjoint/set\_seq\_S\_end\_disjoint/g;
s/set\_seq\_S\_union/set\_seq\_S\_end\_union/g;
s/map\_to\_of\_list/map\_to\_list\_to\_map/g;
s/of\_bools/bools\_to\_natset/g;
s/to\_bools/natset\_to\_bools/g;
' -i $(find -name "*.v")
std++ 1.1.0 (released 2017-12-19)
Coq 8.5 is no longer supported by this release of std++. Use std++ 1.0 if you have to use Coq 8.5.
New features:
- Many new lemmas about lists, vectors, sets, maps.
- Equivalence proofs between std++ functions and their alternative in the the
Coq standard library, e.g.
List.nth
,List.NoDop
. - Typeclass versions of the logical connectives and list predicates:
TCOr
,TCAnd
,TCTrue
,TCForall
,TCForall2
. - A function
tc_opaque
to make definitions type class opaque. - A type class
Infinite
for infinite types. - A generic implementation to obtain fresh elements of infinite types.
- More theory about curry and uncurry functions on
gmap
. - A generic
filter
andzip_with
operation on finite maps. - A type of generic trees for showing that arbitrary types are countable.
Changes:
- Get rid of
Automatic Coercions Import
, it is deprecated. Also get rid ofSet Asymmetric Patterns
. - Various changes and improvements to
f_equiv
andsolve_proper
. -
Hint Mode
is now set for all operational type classes to make instance search less likely to diverge. - New type class
RelDecision
for decidable relations, andEqDecision
is defined in terms of it. This class allows to setHint Mode
properly. - Use the flag
assert
ofArguments
to make it more robust. - The functions
imap
andimap2
on lists are defined so that they enjoy more definitional equalities. - Theory about
fin
is moved to its own filefin.v
. - Rename
preserving
→mono
.
Changes to notations:
- Operational type classes for lattice notations:
⊑
,⊓
,⊔
,⊤
⊥
. - Replace
⊥
for disjointness with##
, so that⊥
can be used for the bottom lattice element. - All notations are now in
stdpp_scope
with scope keystdpp
(formerlyC_scope
andC
). - Higher precedence for
.1
and.2
that is compatible with ssreflect. - Various changes to monadic notations to improve compatibility with Mtac2:
- Pattern matching notation for monadic bind
'pat ← x; y
wherepat
can be any Coq pattern. - Change the level of the do-notation.
-
<$>
is left associative. - Notation
x ;; y
for_ ← x; y
.
- Pattern matching notation for monadic bind
History
Coq-std++ has originally been developed by Robbert Krebbers as part of his formalization of the C programming language in his PhD thesis, called CH2O. After that, Coq-std++ has been part of the Iris project, and has continued to be developed by Robbert Krebbers, Ralf Jung, and Jacques Henri-Jourdan.