-
Robbert Krebbers authoredRobbert Krebbers authored
This file lists "large-ish" changes to the std++ Coq library, but not every API-breaking change is listed.
std++ master
- Remove singleton notations
{[ x,y ]}
and{[ x,y,z ]}
for{[ (x,y) ]}
and{[ (x,y,z) ]}
. They date back to the time we used thesingleton
class with a product for maps (there's now thesingletonM
class). - Add map notations
{[ k1 := x1 ; .. ; kn := xn ]}
up to arity 13. (by Lennard Gäher) - Add multiset literal notation
{[+ x1; .. ; xn +]}
.- Add a new type class
SingletonMS
(with projection{[+ x +]}
for multiset singletons. - Define
{[+ x1; .. ; xn +]}
as notation for{[+ x1 +]} ⊎ .. ⊎ {[+ xn +]}
.
- Add a new type class
- Remove the
Singleton
andSemiset
instances for multisets to avoid accidental use.- This means the notation
{[ x1; .. ; xn ]}
no longer works for multisets (previously, its definition was wrong, since it used∪
instead of⊎
). - Add lemmas for
∈
and∉
specific for multisets, since the set lemmas no longer work for multisets.
- This means the notation
- Make
Qc_of_Z'
not an implicit coercion (fromZ
toQc
) any more. - Make
Z.of_nat'
not an implicit coercion (fromnat
toZ
) any more. - Rename
decide_left
→decide_True_pi
anddecide_right
→decide_False_pi
. - Add
option_guard_True_pi
. - Add lemma
surjective_finite
. (by Alix Trieu) - Add type classes
TCFalse
,TCUnless
,TCExists
, andTCFastDone
. (by Michael Sammler) - Add various results about bit representations of
Z
. (by Michael Sammler) - Add tactic
learn_hyp
. (by Michael Sammler) - Add
Countable
instance for decidable Sigma types. (by Simon Gregersen) - Add tactics
compute_done
andcompute_by
for solving goals by computation. - Add
Inj
instances forfmap
on option and maps. - Various changes to
Permutation
lemmas:- Rename
Permutation_nil
→Permutation_nil_r
,Permutation_singleton
→Permutation_singleton_r
, andPermutation_cons_inv
→Permutation_cons_inv_r
. - Add lemmas
Permutation_nil_l
,Permutation_singleton_l
, andPermutation_cons_inv_l
. - Add new instance
cons_Permutation_inj_l : Inj (=) (≡ₚ) (.:: k).
. - Add lemma
Permutation_cross_split
. - Make lemma
elem_of_Permutation
a biimplication
- Rename
- Add function
kmap
to transform the keys of finite maps. - Set
Hint Mode
for the classesPartialOrder
,TotalOrder
,MRet
,MBind
,MJoin
,FMap
,OMap
,MGuard
,SemiSet
,Set_
,TopSet
, andInfinite
. - Strengthen the extensionality lemmas
map_filter_ext
andmap_filter_strong_ext
:- Rename
map_filter_strong_ext
→map_filter_strong_ext_1
andmap_filter_ext
→map_filter_ext_1
. - Add new bidirectional lemmas
map_filter_strong_ext
andmap_filter_ext
. - Add
map_filter_strong_ext_2
andmap_filter_ext_2
.
- Rename
- Make collection of lemmas for filter + union/disjoint consistent for sets and
maps:
- Sets: Add lemmas
disjoint_filter
,disjoint_filter_complement
, andfilter_union_complement
. - Maps: Rename
map_disjoint_filter
→map_disjoint_filter_complement
andmap_union_filter
→map_filter_union_complement
to be consistent with sets. - Maps: Add lemmas
map_disjoint_filter
andmap_filter_union
analogous to sets.
- Sets: Add lemmas
- Add cross split lemma
map_cross_split
for maps - Setoid results for options:
- Add instance
option_fmap_equiv_inj
. - Add
Proper
instances forunion
,union_with
,intersection_with
, anddifference_with
. - Rename instances
option_mbind_proper
→option_bind_proper
andoption_mjoin_proper
→option_join_proper
to be consistent with similar instances for sets and lists. - Rename
equiv_None
→None_equiv_eq
. - Replace
equiv_Some_inv_l
,equiv_Some_inv_r
,equiv_Some_inv_l'
, andequiv_Some_inv_r'
by new lemmaSome_equiv_eq
that follows the pattern of other≡
-inversion lemmas: it uses a↔
and puts the arguments of≡
and=
in consistent order.
- Add instance
- Setoid results for lists:
- Add
≡
-inversion lemmasnil_equiv_eq
,cons_equiv_eq
,list_singleton_equiv_eq
, andapp_equiv_eq
. - Add lemmas
Permutation_equiv
andequiv_Permutation
.
- Add
- Setoid results for maps:
- Add instances
map_singleton_equiv_inj
andmap_fmap_equiv_inj
. - Add and generalize many
Proper
instances. - Add lemma
map_equiv_lookup_r
. - Add lemma
map_equiv_iff
. - Rename
map_equiv_empty
→map_empty_equiv_eq
. - Add
≡
-inversion lemmasinsert_equiv_eq
,delete_equiv_eq
,map_union_equiv_eq
, etc.
- Add instances
- Drop
DiagNone
precondition oflookup_merge
rule ofFinMap
interface.- Drop
DiagNone
class. - Add
merge_proper
instance. - Simplify lemmas about
merge
by dropping theDiagNone
precondition. - Generalize lemmas
partial_alter_merge
,partial_alter_merge_l
, andpartial_alter_merge_r
. - Drop unused
merge_assoc'
instance.
- Drop
- Improvements to
head
andtail
functions for lists:- Define
head
as notation that prints (Coq defines it asparsing only
) similar totail
. - Declare
tail
assimpl nomatch
. - Add lemmas about
head
andtail
.
- Define
- Add and extend equivalences between closure operators:
- Add
↔
lemmas that relatertc
,tc
,nsteps
, andbsteps
. - Rename
→
lemmasrtc_nsteps
→rtc_nsteps_1
,nsteps_rtc
→rtc_nsteps_2
,rtc_bsteps
→rtc_bsteps_1
, andbsteps_rtc
→rtc_bsteps_2
. - Add lemmas that relate
rtc
,tc
,nsteps
, andbsteps
to path representations as lists.
- Add
- Remove explicit equality from cross split lemmas so that they become easier to use in forward-style proofs.
- Add lemmas for finite maps:
dom_map_zip_with
,dom_map_zip_with_L
,map_filter_id
,map_filter_subseteq
, andmap_lookup_zip_Some
. - Add lemmas for sets:
elem_of_weaken
andnot_elem_of_weaken
. - Rename
insert_delete
→insert_delete_insert
; add newinsert_delete
that is consistent withdelete_insert
. - Fix statement of
sum_inhabited_r
. (by Paolo G. Giarrusso) - Make
done
work on goals of the formis_Some
.
The following sed
script should perform most of the renaming
(on macOS, replace sed
by gsed
, installed via e.g. brew install gnu-sed
).
Note that the script is not idempotent, do not run it twice.
sed -i -E '
s/\bdecide_left\b/decide_True_pi/g
s/\bdecide_right\b/decide_False_pi/g
# Permutation
s/\bPermutation_nil\b/Permutation_nil_r/g
s/\bPermutation_singleton\b/Permutation_singleton_r/g
s/\Permutation_cons_inv\b/Permutation_cons_inv_r/g
# Filter
s/\bmap_disjoint_filter\b/map_disjoint_filter_complement/g
s/\bmap_union_filter\b/map_filter_union_complement/g
# mbind
s/\boption_mbind_proper\b/option_bind_proper/g
s/\boption_mjoin_proper\b/option_join_proper/g
# relations
s/\brtc_nsteps\b/rtc_nsteps_1/g
s/\bnsteps_rtc\b/rtc_nsteps_2/g
s/\brtc_bsteps\b/rtc_bsteps_1/g
s/\bbsteps_rtc\b/rtc_bsteps_2/g
# setoid
s/\bequiv_None\b/None_equiv_eq/g
s/\bmap_equiv_empty\b/map_empty_equiv_eq/g
# insert_delete
s/\binsert_delete\b/insert_delete_insert/g
# filter extensionality lemmas
s/\bmap_filter_ext\b/map_filter_ext_1/g
s/\bmap_filter_strong_ext\b/map_filter_strong_ext_1/g
' $(find theories -name "*.v")
std++ 1.5.0 (2021-02-16)
Coq 8.13 is newly supported by this release, Coq 8.8 and 8.9 are no longer supported.
This release of std++ was managed by Ralf Jung and Robbert Krebbers, with contributions by Alix Trieu, Dan Frumin, Hugo Herbelin, Paulo Emílio de Vilhena, Simon Friis Vindum, and Tej Chajed. Thanks a lot to everyone involved!
- Overhaul of the theory of positive rationals
Qp
:- Add
max
andmin
operations forQp
. - Add the orders
Qp_le
andQp_lt
. - Rename
Qp_plus
intoQp_add
andQp_mult
intoQp_mul
to be consistent with the corresponding names fornat
,N
, andZ
. - Add a function
Qp_inv
for the multiplicative inverse. - Define the division function
Qp_div
in terms ofQp_inv
, and generalize the second argument frompositive
toQp
. - Add a function
pos_to_Qp
that converts apositive
into a positive rationalQp
. - Add many lemmas and missing type class instances, especially for orders, multiplication, multiplicative inverse, division, and the conversion.
- Remove the coercion from
Qp
toQc
. This follows our recent tradition of getting rid of coercions since they are more often confusing than useful. - Rename the conversion from
Qp_car : Qp → Qc
intoQp_to_Qc
to be consistent with other conversion functions in std++. Also rename the lemmaQp_eq
intoQp_to_Qc_inj_iff
. - Use
let '(..) = ...
in the definitions ofQp_plus
,Qp_mult
,Qp_inv
,Qp_le
andQp_lt
to avoid Coq tactics (likeinjection
) to unfold these definitions eagerly. - Define the
Qp
literals 1, 2, 3, 4 in terms ofpos_to_Qp
instead of iterated addition. - Rename and restate many lemmas so as to be consistent with the conventions
for Coq's number types
nat
,N
, andZ
.
- Add
- Add
rename select <pat> into <name>
tactic to find a hypothesis by pattern and give it a fixed name. - Add
eunify
tactic that lifts Coq'sunify
tactic toopen_constr
. - Generalize
omap_insert
,omap_singleton
,map_size_insert
, andmap_size_delete
to cover theSome
andNone
case. Add_Some
and_None
versions of the lemmas for the specific cases. - Rename
dom_map filter
→dom_filter
,dom_map_filter_L
→dom_filter_L
, anddom_map_filter_subseteq
→dom_filter_subseteq
for consistency's sake. - Remove unused notations
∪**
,∪*∪**
,∖**
,∖*∖**
,⊆**
,⊆1*
,⊆2*
,⊆1**
,⊆2**"
,##**
,##1*
,##2*
,##1**
,##2**
for nestedzip_with
andForall2
versions of∪
,∖
, and##
. - Remove unused type classes
DisjointE
,DisjointList
,LookupE
, andInsertE
. - Fix a bug where
pretty 0
was defined as""
, the empty string. It now returns"0"
forN
,Z
, andnat
. - Remove duplicate
map_fmap_empty
offmap_empty
, and renamemap_fmap_empty_inv
intofmap_empty_inv
for consistency's sake. - Rename
seq_S_end_app
toseq_S
. (The lemmaseq_S
is also in Coq's stdlib since Coq 8.12.) - Remove
omega
import and hint database intactics
file. - Remove unused
find_pat
tactic that was made mostly obsolete byselect
. - Rename
_11
and_12
into_1_1
and_1_2
, respectively. These suffixes are used forA → B1
andA → B2
variants ofA ↔ B1 ∧ B2
lemmas. - Rename
Forall_Forall2
→Forall_Forall2_diag
to be consistent with the names for big operators in Iris. - Rename set equality and equivalence lemmas:
elem_of_equiv_L
→set_eq
,set_equiv_spec_L
→set_eq_subseteq
,elem_of_equiv
→set_equiv
,set_equiv_spec
→set_equiv_subseteq
. - Remove lemmas
map_filter_iff
andmap_filter_lookup_eq
in favor of the stronger extensionality lemmasmap_filter_ext
andmap_filter_strong_ext
.
The following sed
script should perform most of the renaming
(on macOS, replace sed
by gsed
, installed via e.g. brew install gnu-sed
):
sed -i -E '
s/\bQp_plus\b/Qp_add/g
s/\bQp_mult\b/Qp_mul/g
s/\bQp_mult_1_l\b/Qp_mul_1_l/g
s/\bQp_mult_1_r\b/Qp_mul_1_r/g
s/\bQp_plus_id_free\b/Qp_add_id_free/g
s/\bQp_not_plus_ge\b/Qp_not_add_le_l/g
s/\bQp_le_plus_l\b/Qp_le_add_l/g
s/\bQp_mult_plus_distr_l\b/Qp_mul_add_distr_r/g
s/\bQp_mult_plus_distr_r\b/Qp_mul_add_distr_l/g
s/\bmap_fmap_empty\b/fmap_empty/g
s/\bmap_fmap_empty_inv\b/fmap_empty_inv/g
s/\bseq_S_end_app\b/seq_S/g
s/\bomap_insert\b/omap_insert_Some/g
s/\bomap_singleton\b/omap_singleton_Some/g
s/\bomap_size_insert\b/map_size_insert_None/g
s/\bomap_size_delete\b/map_size_delete_Some/g
s/\bNoDup_cons_11\b/NoDup_cons_1_1/g
s/\bNoDup_cons_12\b/NoDup_cons_1_2/g
s/\bmap_filter_lookup_Some_11\b/map_filter_lookup_Some_1_1/g
s/\bmap_filter_lookup_Some_12\b/map_filter_lookup_Some_1_2/g
s/\bmap_Forall_insert_11\b/map_Forall_insert_1_1/g
s/\bmap_Forall_insert_12\b/map_Forall_insert_1_2/g
s/\bmap_Forall_union_11\b/map_Forall_union_1_1/g
s/\bmap_Forall_union_12\b/map_Forall_union_1_2/g
s/\bForall_Forall2\b/Forall_Forall2_diag/g
s/\belem_of_equiv_L\b/set_eq/g
s/\bset_equiv_spec_L\b/set_eq_subseteq/g
s/\belem_of_equiv\b/set_equiv/g
s/\bset_equiv_spec\b/set_equiv_subseteq/g
' $(find theories -name "*.v")
std++ 1.4.0 (released 2020-07-15)
Coq 8.12 is newly supported by this release, and Coq 8.7 is no longer supported.
This release of std++ received contributions by Gregory Malecha, Michael Sammler, Olivier Laurent, Paolo G. Giarrusso, Ralf Jung, Robbert Krebbers, sarahzrf, and Tej Chajed.
- Rename
Z2Nat_inj_div
andZ2Nat_inj_mod
toNat2Z_inj_div
andNat2Z_inj_mod
to follow the naming convention ofNat2Z
andZ2Nat
. Re-purpose the namesZ2Nat_inj_div
andZ2Nat_inj_mod
for be the lemmas they should actually be. - Add
rotate
androtate_take
functions for accessing a list with wrap-around. Also addrotate_nat_add
androtate_nat_sub
for computing indicies into a rotated list. - Add the
select
andrevert select
tactics for selecting and reverting a hypothesis based on a pattern. - Extract
list_numbers.v
fromlist.v
andnumbers.v
for functions, which operate on lists of numbers (seq
,seqZ
,sum_list(_with)
andmax_list(_with)
).list_numbers.v
is exported by the prelude. This is a breaking change if one only importslist.v
, but not the prelude. - Rename
drop_insert
intodrop_insert_gt
and adddrop_insert_le
. - Add
Countable
instance forAscii.ascii
. - Make lemma
list_find_Some
more apply friendly. - Add
filter_app
lemma. - Add tactic
multiset_solver
for solving goals involving multisets. - Rename
fin_maps.singleton_proper
intosingletonM_proper
since it concernssingletonM
and to avoid overlap withsets.singleton_proper
. - Add
wn R
for weakly normalizing elements w.r.t. a relationR
. - Add
encode_Z
/decode_Z
functions to encode elements of a countable type as integersZ
, in analogy withencode_nat
/decode_nat
. - Fix list
Datatypes.length
and stringstrings.length
shadowing (length
should now always beDatatypes.length
). - Change the notation for pattern matching monadic bind into
'pat ← x; y
. It was''pat ← x; y
(with double'
) due to a shortcoming of Coq ≤8.7.
std++ 1.3.0 (released 2020-03-18)
Coq 8.11 is supported by this release.
This release of std++ received contributions by Amin Timany, Armaël Guéneau, Dan Frumin, David Swasey, Jacques-Henri Jourdan, Michael Sammler, Paolo G. Giarrusso, Pierre-Marie Pédrot, Ralf Jung, Robbert Krebbers, Simon Friis Vindum, Tej Chajed, and William Mansky
Noteworthy additions and changes:
- Rename
dom_map_filter
intodom_map_filter_subseteq
and repurposedom_map_filter
for the version with the equality. This follows the naming convention for similar lemmas. - Generalize
list_find_Some
andlist_find_None
to become bi-implications. - Disambiguate Haskell-style notations for partially applied operators. For
example, change
(!! i)
into(.!! x)
so that!!
can also be used as a prefix, as done in VST. A sed script to perform the renaming can be found at: iris/stdpp!93 - Add type class
TopSet
for sets with a⊤
element. Provide instances forboolset
,propset
, andcoPset
. - Add
set_solver
support fordom
. - Rename
vec_to_list_of_list
intovec_to_list_to_vec
, and add new lemmalist_to_vec_to_list
for the converse. - Rename
fin_of_nat
intonat_to_fin
,fin_to_of_nat
intofin_to_nat_to_fin
, andfin_of_to_nat
intonat_to_fin_to_nat
, to follow the conventions. - Add
Countable
instance forvec
. - Introduce
destruct_or{?,!}
to repeatedly destruct disjunctions in assumptions. The tactic can also be provided an explicit assumption name;destruct_and{?,!}
has been generalized accordingly and now can also be provided an explicit assumption name. Slight breaking change:destruct_and
no longer handleFalse
;destruct_or
now handlesFalse
whiledestruct_and
handlesTrue
, as the respective units of disjunction and conjunction. - Add tactic
set_unfold in H
. - Set
Hint Mode
forTCAnd
,TCOr
,TCForall
,TCForall2
,TCElemOf
,TCEq
, andTCDiag
. - Add type class
LookupTotal
with total lookup operation(!!!) : M → K → A
. Provide instances forlist
,fin_map
, andvec
, as well as corresponding lemmas for the operations on these types. The instance forvec
replaces the ad-hoc!!!
definition. As a consequence, arguments of!!!
are no longer parsed invec_scope
andfin_scope
, respectively. Moreover, since!!!
is overloaded, coercions around!!!
no longer work. - Make lemmas for
seq
andseqZ
consistent:- Rename
fmap_seq
→fmap_S_seq
- Add
fmap_add_seq
, and renameseqZ_fmap
→fmap_add_seqZ
- Rename
lookup_seq
→lookup_seq_lt
- Rename
seqZ_lookup_lt
→lookup_seqZ_lt
,seqZ_lookup_ge
→lookup_seqZ_ge
, andseqZ_lookup
→lookup_seqZ
- Rename
lookup_seq_inv
→lookup_seq
and generalize it to a bi-implication - Add
NoDup_seqZ
andForall_seqZ
- Rename
The following sed
script should perform most of the renaming
(on macOS, replace sed
by gsed
, installed via e.g. brew install gnu-sed
):
sed -i '
s/\bdom_map_filter\b/dom_map_filter_subseteq/g
s/\bfmap_seq\b/fmap_S_seq/g
s/\bseqZ_fmap\b/fmap_add_seqZ/g
s/\blookup_seq\b/lookup_seq_lt/g
s/\blookup_seq_inv\b/lookup_seq/g
s/\bseqZ_lookup_lt\b/lookup_seqZ_lt/g
s/\bseqZ_lookup_ge\b/lookup_seqZ_ge/g
s/\bseqZ_lookup\b/lookup_seqZ/g
s/\bvec_to_list_of_list\b/vec_to_list_to_vec/g
s/\bfin_of_nat\b/nat_to_fin/g
s/\bfin_to_of_nat\b/fin_to_nat_to_fin/g
s/\bfin_of_to_nat\b/nat_to_fin_to_nat/g
' $(find theories -name "*.v")
std++ 1.2.1 (released 2019-08-29)
This release of std++ received contributions by Dan Frumin, Michael Sammler, Paolo G. Giarrusso, Paulo Emílio de Vilhena, Ralf Jung, Robbert Krebbers, Rodolphe Lepigre, and Simon Spies.
Noteworthy additions and changes:
- Introduce
max
andmin
infix notations forN
andZ
like we have fornat
. - Make
solve_ndisj
tactic more powerful. - Add type class
Involutive
. - Improve
naive_solver
performance in case the goal is trivially solvable. - Add a bunch of new lemmas for list, set, and map operations.
- Rename
lookup_imap
intomap_lookup_imap
.
std++ 1.2.0 (released 2019-04-26)
Coq 8.9 is supported by this release, but Coq 8.6 is no longer supported. Use std++ 1.1 if you have to use Coq 8.6. The repository moved to a new location at https://gitlab.mpi-sws.org/iris/stdpp and automatically generated Coq-doc of master is available at https://plv.mpi-sws.org/coqdoc/stdpp/.
This release of std++ received contributions by Dan Frumin, Hai Dang, Jan-Oliver Kaiser, Mackie Loeffel, Maxime Dénès, Ralf Jung, Robbert Krebbers, and Tej Chajed.
New features:
- New notations
=@{A}
,≡@{A}
,∈@{A}
,∉@{A}
,##@{A}
,⊆@{A}
,⊂@{A}
,⊑@{A}
,≡ₚ@{A}
for being explicit about the type. - A definition of basic telescopes
tele
and some theory about them. - A simple type class based canceler
NatCancel
for natural numbers. - A type
binder
for anonymous and named binders to be used in program language definitions with string-based binders. - More results about
set_fold
on sets and multisets. - Notions of infinite and finite predicates/sets and basic theory about them.
- New operation
map_seq
. - The symmetric and reflexive/transitive/symmetric closure of a relation (
sc
andrtsc
, respectively). - Different notions of confluence (diamond property, confluence, local confluence) and the relations between these.
- A
size
function for finite maps and prove some properties. - More results about
Qp
fractions. - More miscellaneous results about sets, maps, lists, multisets.
- Various type class utilities, e.g.
TCEq
,TCIf
,TCDiag
,TCNoBackTrack
, andtc_to_bool
. - Generalize
gset_to_propset
toset_to_propset
for anySemiSet
.
Changes:
- Consistently use
lia
instead ofomega
everywhere. - Consistently block
simpl
on allZ
operations. - The
Infinite
class is now defined using a functionfresh : list A → A
that given a listxs
, gives an elementfresh xs ∉ xs
. - Make
default
an abbreviation forfrom_option id
(instead of just swapping the argument order offrom_option
). - More efficient
Countable
instance forlist
that is linear instead of exponential. - Improve performance of
set_solver
significantly by introducing specialized type classSetUnfoldElemOf
for propositions involving∈
. - Make
gset
aDefinition
instead of aNotation
to improve performance. - Use
disj_union
(notation⊎
) for disjoint union on multisets (that adds the multiplicities). Repurpose∪
on multisets for the actual union (that takes the max of the multiplicities). - Set
Hint Mode
forpretty
.
Naming:
- Consistently use the
set
prefix instead of thecollection
prefix for definitions and lemmas. - Renaming of classes:
-
Collection
intoSet_
(_
sinceSet
is a reserved keyword) -
SimpleCollection
intoSemiSet
-
FinCollection
intoFinSet
-
CollectionMonad
intoMonadSet
-
- Types:
-
set A := A → Prop
intopropset
-
bset := A → bool
intoboolset
.
-
- Files:
-
collections.v
intosets.v
-
fin_collections.v
intofin_sets.v
-
bset
intoboolset
-
set
intopropset
-
- Consistently use the naming scheme
X_to_Y
for conversion functions, e.g.list_to_map
instead of the formermap_of_list
.
The following sed
script should perform most of the renaming:
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.