aboutsummaryrefslogtreecommitdiff
path: root/mathcomp/ssreflect/fintype.v
AgeCommit message (Collapse)Author
2021-01-16Drop support for Coq 8.10 and deprecate the `deprecate` notationKazuhiko Sakaguchi
- The `deprecate` notation and `iota_add` have been deprecated. All the uses of the `deprecate` notation have been replaced with the `deprecated` attribute. - Deprecation aliases in `ssrnat` and `ssrnum` introduced in MathComp 1.11+beta1 have been removed. - Remove `VDFILE` related hacks from `Makefile.common`.
2020-11-25Using `only printing` and fixing coercion in notationsCyril Cohen
2020-11-19Merge pull request #656 from affeldt-aist/declare_scopesCyril Cohen
add declare scopes
2020-11-19add declare scopesReynald Affeldt
2020-11-19Refactor, reshuffle, and rename sorting lemmas in `path.v`Kazuhiko Sakaguchi
- Lemmas `sorted_(lt|le)_nth` have been renamed to `sorted_(ltn|leq)_nth`. - Lemmas `(ltn|leq)_index` have been renamed to `sorted_(ltn|leq)_index` and generalized for non-`eqType`s. - Lemmas `order_path_min`, `path_sortedE`, `subseq_order_path`, `subseq_sorted`, `sorted_uniq`, `sorted_eq`, `irr_sorted_eq`, `sorted_(ltn|leq)_nth`, and `sorted_(ltn|leq)_index` have been relocated since their proofs are independent from `merge` and `sort`. - The stability proofs for `iota` sequences (`push_stable`, `pop_stable`, and `sort_iota_stable`) have been simplified by sorting out their hypotheses and by redefining `push_invariant` to include the `sorted` condition. Their main result `sort_iota_stable`, formerly a local `Let` to prove `sort_stable`, has been turned into a lemma. - Some stability proofs for general sequences (`sort_stable` and `filter_sort`) have also been simplified, of which the former one uses the above `sorted_ltn_nth` lemma for a non-`eqType`.
2020-11-03Generalizing inj_card_onto and inj_card_bij.Cyril Cohen
2020-10-29Switch from long suffixes to short suffixesKazuhiko Sakaguchi
2020-10-09Added results about `mask` and `subseq`Cyril Cohen
2020-10-07Turn class_of records into primitive records and get rid of the xclass idiomKazuhiko Sakaguchi
2020-09-28Submatrix theoryCyril Cohen
2020-09-28Merge pull request #555 from chdoc/disjoint-lemmasCyril Cohen
some lemmas for disjoint
2020-09-27some lemmas for disjointChristian Doczkal
2020-09-27Putting ord1 in fintypeCyril Cohen
ord1 is in zmodp, but it does not really require the zmodType structure of 'I_n to be stated and proven if we state it with ord0. We still keep the variant in zmodp with 0 instead of ord0 (for readability purposes).
2020-09-03Lemmas reindex_omap and bigD1_ordCyril Cohen
+ eq_liftF and lift_eqF + proof simplificaions
2020-09-03Expliciting relation between split and [lr]shiftCyril Cohen
2020-06-18conform to 80 chars limitChristian Doczkal
2020-06-18fixup spacingCyril Cohen
2020-06-18Apply suggestions from code reviewChristian Doczkal
Co-authored-by: Cyril Cohen <CohenCyril@users.noreply.github.com>
2020-06-18add fcard_gt?P lemmas found in fourcolorChristian Doczkal
2020-06-18cardinality lemmas for #|A| <= 1 and n <= #|A|Christian Doczkal
2020-06-06ImprovementsCyril Cohen
- deprecating `fintype.arg_(min|max)P` - removing dangling comments connecting min max and meet join - better compatibility module - removing broken notations with `\min` and `\max` (no neutral available) - fixing `incompare` and `incomparel` in order.v - adding missing elimination lemmas (`(comparable_)?(max|min)E[lg][et]`) - adding missing `(comparable|real)_arg(min|max)P` - CHANGELOG update
2020-06-06Generalizing max and min to porderTypeCyril Cohen
- max and min are not defined in terms or meet and join anymore - extremum_inP is a generalization of extremum suitable for a partial order - arg_min and arg_max are usable in a porderType - equivalences between min and meet, and max and join are proven for orderType - leP, ltP, ltgtP, and `[l]?comparable_.*P` lemmas have been generalized to take this into account - total_display was completely removed
2020-05-16A few more revisionsKazuhiko Sakaguchi
2020-05-13Revise proofs in ssreflect/*.vKazuhiko Sakaguchi
This change reduces - use of numerical occurrence selectors (#436) and - use of non ssreflect tactics such as `auto`, and improves use of comparison predicates such as `posnP`, `leqP`, `ltnP`, `ltngtP`, and `eqVneq`.
2020-04-09Merge pull request #474 from llelf/doc-typosaffeldt-aist
Documentation typos
2020-04-08fix typos in documentation: textAntonio Nikishaev
2020-03-15Extend comparison predicates for nat with minn and maxnKazuhiko Sakaguchi
2019-12-28Refactoring and linting especially polydivKazuhiko Sakaguchi
- Replace `altP eqP` and `altP (_ =P _)` with `eqVneq`: The improved `eqVneq` lemma (#351) is redesigned as a comparison predicate and introduces a hypothesis in the form of `x != y` in the second case. Thus, `case: (altP eqP)`, `case: (altP (x =P _))` and `case: (altP (x =P y))` idioms can be replaced with `case: eqVneq`, `case: (eqVneq x)` and `case: (eqVneq x y)` respectively. This replacement slightly simplifies and reduces proof scripts. - use `have [] :=` rather than `case` if it is better. - `by apply:` -> `exact:`. - `apply/lem1; apply/lem2` or `apply: lem1; apply: lem2` -> `apply/lem1/lem2`. - `move/lem1; move/lem2` -> `move/lem1/lem2`. - Remove `GRing.` prefix if applicable. - `negbTE` -> `negPf`, `eq_refl` -> `eqxx` and `sym_equal` -> `esym`.
2019-12-11Make an appropriate use of the order library everywhere (#278, #280, #282, ↵Kazuhiko Sakaguchi
#283, #285, #286, #288, #296, #330, #334, and #341) ssrnum related changes: - Redefine the intermediate structure between `idomainType` and `numDomainType`, which is `normedDomainType` (normed integral domain without an order). - Generalize (by using `normedDomainType` or the order structures), relocate (to order.v), and rename ssrnum related definitions and lemmas. - Add a compatibility module `Num.mc_1_9` and export it to check compilation. - Remove the use of the deprecated definitions and lemmas from entire theories. - Implement factories mechanism to construct several ordered and num structures from fewer axioms. order related changes: - Reorganize the hierarchy of finite lattice structures. Finite lattices have top and bottom elements except for empty set. Therefore we removed finite lattice structures without top and bottom. - Reorganize the theory modules in order.v: + `LTheory` (lattice and partial order, without complement and totality) + `CTheory` (`LTheory` + complement) + `Theory` (all) - Give a unique head symbol for `Total.mixin_of`. - Replace reverse and `^r` with converse and `^c` respectively. - Fix packing and cloning functions and notations. - Provide more ordered type instances: Products and lists can be ordered in two different ways: the lexicographical ordering and the pointwise ordering. Now their canonical instances are not exported to make the users choose them. - Export `Order.*.Exports` modules by default. - Specify the core hint database explicitly in order.v. (see #252) - Apply 80 chars per line restriction. General changes: - Give consistency to shape of formulae and namings of `lt_def` and `lt_neqAle` like lemmas: lt_def x y : (x < y) = (y != x) && (x <= y), lt_neqAle x y : (x < y) = (x != y) && (x <= y). - Enable notation overloading by using scopes and displays: + Define `min` and `max` notations (`minr` and `maxr` for `ring_display`) as aliases of `meet` and `join` specialized for `total_display`. + Provide the `ring_display` version of `le`, `lt`, `ge`, `gt`, `leif`, and `comparable` notations and their explicit variants in `Num.Def`. + Define 3 variants of `[arg min_(i < n | P) F]` and `[arg max_(i < n | P) F]` notations in `nat_scope` (specialized for nat), `order_scope` (general version), and `ring_scope` (specialized for `ring_display`). - Update documents and put CHANGELOG entries.
2019-11-22Injectivity lemmas in fintype (#426)Kazuhiko Sakaguchi
2019-11-04add existsPn/forallPn lemmasChristian Doczkal
2019-10-25Instances for empty type. (#393)Arthur Azevedo de Amorim
* Add notation and instances for empty type. * Update change log. * Mention void in fintype header. * Remove unnecessary explicit argument. * Documentation header for void.
2019-10-16Improving fintype and bigopCyril Cohen
### Added - Fintype theorems: `fintype0`, `card_le1P`, `mem_card1`, `card1P`, `fintype_le1P`, `fintype1`, `fintype1P`. - Bigop theorems: `big_rmcond`, `bigD1_seq`, `reindex_enum_val_cond`, `reindex_enum_rank_cond`, `reindex_enum_val`, `reindex_enum_rank`, `big_set`.
2019-04-29Generalise use of `{pred T}` from coq/coq#9995Georges Gonthier
Use `{pred T}` systematically for generic _collective_ boolean predicate. Use `PredType` to construct `predType` instances. Instrument core `ssreflect` files to replicate these and other new features introduces by coq/coq#9555 (`nonPropType` interface, `simpl_rel` that simplifies with `inE`).
2019-04-26Cleaning Require and Require ImportsCyril Cohen
2019-04-06Permutations and other extensions to seq; fintype documentationGeorges Gonthier
- Added `permutations` and some `perm_eq` lemmas suggested by @MrSet in #299 (except the link to the coq lib `Permutation` predicate). Use insertions to construct permutations. This definition is closer to the one proposed by @MrSet, than one using rotations (it adds one line to the definition of `permutations` but the proofs become a little simpler.) - Added support for casts on `map` comprehension general terms. - Added `allpairs_map[lr]` suggested by @pi8027 in #314, but with equational proofs; changed `allpairs_comp` to its converse `map_allpairs` for consistency. - Add three `allpairs` extensionality lemmas: for the non-localised, dependent localised and non-dependent localised cases; as per `eq_in_map`, the latter two are equivalences. - Documented the `all2` predicate added in #224, and the view combinators added in #202. - Renamed `seq2_ind` to `seq_ind2`, and weakened the induction hypothesis, adding a `size` equality assumption. - Corrected the header to use `<=>` for `bool` predicate documentation, and `<->` for `Prop` predicates, following the library’s general convention. - Replaced the `nosimpl` in `rev` with a `Arguments simpl never` directive, making it possible to merge the `Rev` section into the main `Sequences` section. - Miscellaneous improvements to proof scripts and file organisation. - Correct maximal implicits of `constant`. - Fixes omitted `Prenex Implicit` declaration. - Other implicits fixes. - Fix apparent `done` regression It appears `done` now does a weaker form of intros, and this broke the `dtuple_onP` proof. Updated the proof to eliminate the issue. (Commit log edited by @CohenCyril during the squash.)
2019-03-18remove dependency on hidden case branch typesGeorges Gonthier
Anticipating coq/coq#9170, remove numeric occurrence selector affected by the (invisible) presence of explicit types for variables bound in `match` branch patterns. The proof could be further simplified if this change is implemented.
2018-12-19Generalizing homo-mono-morphism lemmas and extremum (#201)Cyril Cohen
2018-12-13Adjust implicits of cancellation lemmasGeorges Gonthier
Like injectivity lemmas, instances of cancellation lemmas (whose conclusion is `cancel ? ?`, `{in ?, cancel ? ?}`, `pcancel`, or `ocancel`) are passed to generic lemmas such as `canRL` or `canLR_in`. Thus such lemmas should not have trailing on-demand implicits _just before_ the `cancel` conclusion, as these would be inconvenient to insert (requiring essentially an explicit eta-expansion). We therefore use `Arguments` or `Prenex Implicits` directives to make all such arguments maximally inserted implicits. We don’t, however make other arguments implicit, so as not to spoil direct instantiation of the lemmas (in, e.g., `rewrite -[y](invmK injf)`). We have also tried to do this with lemmas whose statement matches a `cancel`, i.e., ending in `forall x, g (E[x]) = x` (where pattern unification will pick up `f = fun x => E[x]`). We also adjusted implicits of a few stray injectivity lemmas, and defined constants. We provide a shorthand for reindexing a bigop with a permutation. Finally we used the new implicit signatures to simplify proofs that use injectivity or cancellation lemmas.
2018-12-11Fix some new warnings emitted by Coq 8.10:Anton Trunov
``` Warning: Adding and removing hints in the core database implicitly is deprecated. Please specify a hint database. [implicit-core-hint-db,deprecated] ```
2018-12-04Remove `_ : Type` from packed classesAnton Trunov
This increases performance 10% - 15% for Coq v8.6.1 - v8.9.dev. Tested on a Debain-based 16-core build server and a Macbook Pro laptop with 2,3 GHz Intel Core i5. | | Compilation time, old | Compilation | Speedup | | | (mathcomp commit 967088a6f87) | time, new | | | Coq 8.6.1 | 10min 33s | 9min 10s | 15% | | Coq 8.7.2 | 10min 12s | 8min 50s | 15% | | Coq 8.8.2 | 9min 39s | 8min 32s | 13% | | Coq 8.9.dev(05d827c800544) | 9min 12s | 8min 16s | 11% | | | | | | It seems Coq at some point fixed the problem `_ : Type` was supposed to solve.
2018-12-04Document parameter names whenever possibleAnton Trunov
As suggested by @ggonthier [here](https://github.com/math-comp/math-comp/pull/249#pullrequestreview-177938295) > One of the design ideas for the `Arguments` command was that it would allow to centralise the documentation of the application of constants. In that spirit it would be in my opinion better to make as much use of this as possible, and to document the parameter names whenever possible, especially that of implicit parameters. and [here](https://github.com/math-comp/math-comp/pull/253#discussion_r237434163): > As a general rule, defined functional constants should have maximal prenex implicit arguments, as this facilitates their use as arguments to functionals, because this mimics the way function constants are treated in functional programming languages with Hindley-Milner type inference. Conversely, lemmas and theorems should have on-demand implicit arguments, possibly interspersed with explicit ones, as it's fairly common for other lemmas to have universally quantified premises; also, this makes it easier to specify such arguments with the apply: tactic. This policy may be amended for lemmas that are used as functional arguments, such as reflection or cancellation lemmas. Unfortunately there is currently no easy way to tell Coq to use different defaults for definitions and lemmas, so MathComp sticks to the on-demand default, as there are significantly more lemmas than definition, and use the Prenex Implicits to redress matters in bulk for definitions. However, this is not completely systematic, and is sometimes omitted for constants that are not used as functional arguments in the library, or inside the sections in which the definition occur, since such commands need to be repeated after the section is closed. Since Arguments commands should document the intended constant usage as best as possible, they should follow the implicits policy - even in cases such as this where the Prenex Implicits had been skipped.
2018-11-21Merge Arguments and Prenex ImplicitsAnton Trunov
See the discussion here: https://github.com/math-comp/math-comp/pull/242#discussion_r233778114
2018-11-13Documentation complements for combinatorial class factoriesGeorges Gonthier
Adding missing documentation for mixin and class constructors for Equality, Choice, Countable, and Finite. Renaming Equality mixin constructor comparableClass to the more consistent comparableMixin.
2018-07-19Merge pull request #202 from CohenCyril/improving-polyLaurent Théry
small generalizations and extensions in poly
2018-07-19poly_size_eq1 phrased with reflect + combinatorsCyril Cohen
2018-07-12Replace all the CoInductives with VariantsKazuhiko Sakaguchi
2018-02-21Change Implicit Arguments to Arguments in ssreflectJasper Hugunin
2018-02-06running semi-automated linting on the whole libraryCyril Cohen
2017-10-30Fix obsolete vernacular syntax for locality.Maxime Dénès
It was emitting a deprecation warning and will soon be removed from Coq.